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

本人写过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版本,里面的目录结构如下。
vs2017编译libass静态库,并添加到ffmpeg中去,以支持ass,subtitles滤镜_第1张图片

在文件夹SMP中有对应的解决方案libass.sln,直接双击此文件(libass.sln),会弹出下面的对话框。
vs2017编译libass静态库,并添加到ffmpeg中去,以支持ass,subtitles滤镜_第2张图片
此时可以先打开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的依赖库,里面有五个库。
vs2017编译libass静态库,并添加到ffmpeg中去,以支持ass,subtitles滤镜_第3张图片
关于freetype库的支持,读者可以看本人的博客:
ffmpeg编译时添加freetype支持,用于在视频中添加文字

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

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

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

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

这五个库编译好后,再编译libass,编译libass时,有一点需要注意:
vs2017编译libass静态库,并添加到ffmpeg中去,以支持ass,subtitles滤镜_第4张图片
这里本人配置的运行库是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滤镜也可以将字幕内嵌到视频中。

你可能感兴趣的:(ffmpeg)