vs2017编译libass静态库,并添加到ffmpeg中去,以支持ass,subtitles滤镜

文章详细介绍了如何在VisualStudio2017环境下编译libass静态库,并将其集成到ffmpeg中,以便使用ass和subtitles滤镜实现视频内嵌字幕功能。过程涉及到nasm编译器的配置、libass及其依赖库如freetype、iconv、fontconfig、fribidi和harfbuzz的编译,以及ffmpeg的configure和编译步骤。
摘要由CSDN通过智能技术生成

本人写过ffmpeg为mkv封装格式的音视频文件添加内挂字幕
,里面字幕和视频是两个独立的通道,可以将字幕从文件中剔除,添加自己的字幕。

若想字幕和视频粘在一块,无法分割,则需要ass,subtitles滤镜,此时的字幕为内嵌字幕。
而ffmpeg若要支持ass,subtitles滤镜,则在configure的时候,需要–enable-libass。

本文讲解在vs2017下编译libass静态库,并集成到ffmpeg中去。
首先是libass的下载,本人建议到ShiftMediaProject工程中下载,该工程对ffmpeg的常用配置库,比如opus,fdk-aac,libass,harfbuzz等;都有专门的vs工程。libass的地址为https://github.com/ShiftMediaProject/libass。本人下载的是0.17.0版本,里面的目录结构如下。
在这里插入图片描述

在文件夹SMP中有对应的解决方案libass.sln,直接双击此文件(libass.sln),会弹出下面的对话框。
在这里插入图片描述
此时可以先打开vs2017,然后将此sln拖进去即可。

libass里面有一部分汇编代码(asm结尾的文件),用的是nasm编译器,vs2017没有自带nasm编译器,需要读者配置,本人下载的nasm编译器地址如下:
https://www.nasm.us/pub/nasm/releasebuilds/2.14/win32/
这块是nasm.exe,其实在vs2017中,还需要有几个配置文件拷贝到vs2017的安装目录,这块读者可以参考Win7 VS2015 NASM汇编语言环境配置

然后我们看libass的依赖库,里面有五个库。
在这里插入图片描述
关于freetype库的支持,读者可以看本人的博客:
ffmpeg编译时添加freetype支持,用于在视频中添加文字

iconv库的编译,读者可以看本人的博客:
vs2017编译iconv

fontconfig库的编译,读者可以看本人的博客:
ffmpeg vs2017静态库编译,支持fontconfig

fribidi库,本人用的是1.0.12版本,直接在msys2上编译,这个没用vs2017编译。

harfbuzz库,本人用的也是ShiftMediaProject工程里面的,版本为3.4.0

这五个库编译好后,再编译libass,编译libass时,有一点需要注意:
在这里插入图片描述
这里本人配置的运行库是MT,是运行时库的静态版本;如果是MD,则在配置ffmpeg的时候,会报链接错误。

最后,本人将上面编译好的ass库和其依赖的库放到msys2环境中,切换到ffmpeg的编译目录,配置命令如下:
./configure --toolchain=msvc --arch=x86_64 --disable-debug --enable-gpl --enable-libass --enable-libfreetype --enable-libfontconfig --enable-libopus --enable-libx264 --enable-libx265 --extra-cflags=-I/usr/local/x264/include --extra-ldflags=‘-LIBPATH:/usr/local/x264/lib’ --prefix=/home/ffmpeg_x264_x265_vpx_opus_ass_freetype_fontconfig_static --enable-libvpx --enable-encoder=libvpx_vp8 --enable-encoder=libvpx_vp9 --enable-decoder=vp8 --enable-decoder=vp9 --enable-parser=vp8 --enable-parser=vp9

编译出ffmpeg。

然后执行命令:

ffmpeg -i 2022-01-08T22-32-58.mp4 -vf ass=ts.ass -y 2022-01-08T22-32-58_ass.mp4

ass滤镜可以将字幕内嵌到视频中

执行命令

ffmpeg -i 2022-01-08T22-32-58.mp4 -vf subtitles=ts.ass -y 2022-01-08T22-32-58_ass_2.mp4

subtitles滤镜也可以将字幕内嵌到视频中。

以下是在Windows环境下使用MSYS2编译FFmpeg静态库的步骤: 1. 安装MSYS2 首先需要下载并安装MSYS2,可以在官网上下载安装包:https://www.msys2.org/ 2. 安装编译工具和依赖项 打开MSYS2的终端,执行以下命令安装编译工具和依赖项: ``` pacman -S mingw-w64-x86_64-toolchain mingw-w64-x86_64-nasm git perl python3 ``` 3. 下载FFmpeg源码 从FFmpeg官网(https://ffmpeg.org/download.html)下载最新的源码包,解压到某个目录下。 4. 配置编译选项 在MSYS2的终端中进入FFmpeg源码目录,执行以下命令配置编译选项: ``` ./configure --disable-shared --enable-static --disable-doc --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver --disable-network --disable-iconv --disable-bzlib --disable-zlib --disable-lzma --disable-sdl2 --disable-xlib --disable-libxcb --disable-libxcb-shm --disable-libxcb-xfixes --disable-libxcb-shape --disable-lzma --disable-iconv --disable-libass --disable-libbluray --disable-libcaca --disable-libfontconfig --disable-libfreetype --disable-libfribidi --disable-libgme --disable-libgsm --disable-libilbc --disable-libkvazaar --disable-libmodplug --disable-libmp3lame --disable-libopencore-amrnb --disable-libopencore-amrwb --disable-libopenh264 --disable-libopenjpeg --disable-libopus --disable-libpulse --disable-librsvg --disable-librtmp --disable-libshine --disable-libsmbclient --disable-libsnappy --disable-libsoxr --disable-libspeex --disable-libssh --disable-libtesseract --disable-libtheora --disable-libtwolame --disable-libv4l2 --disable-libvorbis --disable-libvpx --disable-libwebp --disable-libx264 --disable-libx265 --disable-libxvid --disable-lzma --disable-zlib --disable-opencl --disable-opengl --disable-openssl --disable-libxml2 --arch=x86_64 --target-os=mingw32 --cross-prefix=x86_64-w64-mingw32- --pkg-config=pkg-config ``` 其中,--disable-shared和--enable-static表示编译静态库。 5. 编译并安装 执行以下命令编译并安装静态库: ``` make -j4 && make install ``` 其中,-j4表示使用4个线程编译,可以根据自己的CPU核心数进行调整。 6. 查找静态库 编译完成后,在MSYS2的终端中执行以下命令查找静态库: ``` find / -name '*.a' | grep ffmpeg ``` 可以看到类似如下的输出: ``` /usr/local/lib/libavcodec.a /usr/local/lib/libavdevice.a /usr/local/lib/libavfilter.a /usr/local/lib/libavformat.a /usr/local/lib/libavutil.a /usr/local/lib/libpostproc.a /usr/local/lib/libswresample.a /usr/local/lib/libswscale.a ``` 这些就是编译出来的FFmpeg静态库。 7. 使用静态库 在使用时,只需要将需要的静态库链接到自己的程序中即可。以使用libavformat静态库为例,在编译时需要加上-lavformat参数: ``` g++ -o myapp myapp.cpp -lavformat ``` 注意,编译时还需要加上其他依赖库的链接参数,具体可以参考FFmpeg官方文档:https://ffmpeg.org/documentation.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值