现在对ffmpeg的学习到了往视频指定位置添加对应文字的时候了。
发现添加文字,用的是drawtext滤镜,需要在编译ffmpeg的时候,添加–enable-libfreetype。
为此先编译freetype,由于本人ffmpeg使用vs2017编译,并且为了最终的成果物中的文件尽量少,本人编译出的是静态库,此处的是freetype也需要用vs2017进行静态库编译。
读者可以按照如下路径,找到freetype.sln,原来的工程是2010的,此处直接用vs2017打开即可,微软会自动转成vs2017工程。
打开sln后,如下所示,本人进行的是64位版本的静态库编译,编译出的成果物为freetype.lib。
现在进入到编译ffmpeg的阶段,先将上一步编译的freetype的lib库文件和头文件拷贝到mingw的相应位置,这个位置自己定,然后再用pkgconfig进行头文件路径和lib库路径进行配置即可,为此需要freetype.pc这样的pkgconfig文件,刚才我用vs2017编译时,没看到对应的freetype.pc这样的文件。
为此先在linux下编译freetype,编译后,看到名字为freetype2.pc。
这里面需要将头文件和库路径对应上即可,本人在mingw下的freetype放到了/usr/local路径下,其中头文件路径如下:
库文件如下:
pkgconfig文件夹里面就是freetype2.pc(从linux的编译成果物中拷贝而来),内容如下:
prefix=/usr/local
exec_prefix=/usr/local
libdir=/usr/local/lib
includedir=/usr/local/include
Name: FreeType 2
URL: https://freetype.org
Description: A free, high-quality, and portable font engine.
Version: 24.1.18
Requires:
Requires.private: zlib
Libs: -L${libdir} -lfreetype
Libs.private: -lbz2
Cflags: -I${includedir}/freetype2
下面是ffmpeg的编译时的配置。
./configure --toolchain=msvc --arch=x86_64 --disable-debug --enable-gpl --enable-libfreetype --enable-libx264 --extra-cflags="-I/usr/local/x264/include" --extra-ldflags="-LIBPATH:/usr/local/x264/lib" --prefix=/home/ffmpeg_x264_freetype_static
编译后,生成了ffmpeg.exe文件,下面我们找个文件进行测试,命令行如下:
ffmpeg -i 2022-01-16T12-18-13.mp4 -vf "drawtext=fontcolor=white:fontsize=80:fontfile=zihun152hao-jijiachaojihei.ttf:text='你好,我来了':x=100:y=100" output.mp4
执行目录的内容如下所示:
这个字体ttf文件是一定要存在的,生成的效果文件如下:
上面的ttf文件要跟ffmpeg在同一个目录下,如果不是呢,比如ttf文件在其他位置,可以通过全路径查找
ffmpeg -i E:\learn\ffmpeg\ffmpeg_x264_freetype_static\bin\2022-01-16T12-18-13.mp4 -vf "drawtext=fontcolor=white:fontsize=80:fontfile='E\:\\learn\\ffmpeg\\ffmpeg_x264_freetype_static\\bin\\zihun152hao-jijiachaojihei.ttf':text='你好,我来了':x=100:y=100" output.mp4
fontfile本为E:\learn\ffmpeg\ffmpeg_x264_freetype_static\bin\zihun152hao-jijiachaojihei.ttf,前面加\表示转义。