ffmpeg6.1 Windows编译支持drawtext滤镜功能
一、编译环境准备
在 Windows 下用 MSVC 编译 FFmpeg,最省事儿的方式是借助 MSYS2 来充当壳环境(用来执行 configure脚本和 make命令),而实际的编译工作交给 VS2017 的编译器 (cl.exe) 完成。
1. 安装 VS2017
确保安装了"使用 C++ 的桌面开发"工作负载,并在右侧的可选组件里勾选 Windows SDK。
2. 安装 MSYS2
前往 MSYS2 官网下载并安装。
打开 MSYS2 MinGW 32-bit(注意不是 UCRT 或 Clang)。
更新核心库并安装必备工具:
cpp
pacman -Syu
pacman -S base-devel mingw-w64-i686-toolchain nasm yasm
二、依赖库准备
drawtext滤镜强依赖 freetype.lib和harfbuzz.lib。在 MSVC 环境下,我们有两种常见的方式来获取它:
方案一:直接下载预编译的 FreeType和Harfbuzz(强烈推荐,省时省力)
GitHub 上有大神维护的 MSVC 静态库版本,我们可以直接"白嫖":
访问 https://github.com/ShiftMediaProject 搜索 freetype2和Harfbuzz库的msvc预编译包。下载与 VS2017 兼容的版本,解压后,将 include 文件夹复制到 MSYS2 的 /usr/local/include,将 lib 文件夹复制到 /usr/local/lib。
方案二:使用 VS2017 自行编译 FreeType
如果你偏好自己动手,也非常简单:
1.下载 FreeType 和Harfbuzz源码。
2.用 VS2017 打开源码中的 builds/windows/vc2010/freetype.sln(VS2017 会自动升级项目文件)。
3.选择 Release和 WIN32,右键项目属性,将"配置类型"改为"静态库(.lib)"。
4.点击编译,得到 freetype.lib。
5.将生成的 freetype.lib放入 MSYS2 的 /usr/local/lib,将源码中的 include文件夹放入 /usr/local/include/freetype。
6.Harfbuzz库编译指令,Harfbuzz库依赖freetype,可以讲下载的vs2017库放进源码中,并添加一下路径。
cpp
#!/bin/bash
# 当前脚本的目录
base_path=$(cd `dirname $0`;pwd)
rm -rf build
cmake -B build -S . -G "Visual Studio 15 2017" -A WIN32 -DCMAKE_BUILD_TYPE=Release \
-DFREETYPE_INCLUDE_DIRS="$base_path/libfreetype2_VER-2-13-3_msvc17/include/freetype2" \
-DFREETYPE_LIBRARY="$base_path/libfreetype2_VER-2-13-3_msvc17/lib/x86/libfreetype.lib" \
-DBUILD_SHARED_LIBS=OFF -DHB_HAVE_FREETYPE=ON -DHB_HAVE_GLIB=OFF -DHB_HAVE_ICU=OFF
cmake --build build --config Release -j4
三、编译ffmpeg6.1
下载ffmpeg6.1 源码,并解压到MSYS2安装目录的/home/电脑用户名目录下/,例如我的目录是/home/lizi/
1.找到MSYS2安装目录,并在目录下新建msys_vs2017.bat文件,编写配置vs2017环境的脚本。
bash
set MSYS2_PATH_TYPE=inherit
call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars32.bat"
msys2_shell.cmd -mingw32
2.双击运行msys_vs2017.bat脚本。
- 配置 FFmpeg 编译参数 执行以下configure命令,重点开启
--enable-filter=drawtext
--enable-libfreetype
--enable-libharfbuzz
--disable-libfontconfig
--disable-libfribidi
并指定使用MSVC工具链。
cpp
./configure \
--toolchain=msvc \
--arch=x86 \
--disable-shared \
--enable-static \
--enable-libfreetype \
--enable-gpl \
--disable-debug \
--extra-cflags="-I/usr/local/include" \
--extra-ldflags="-LIBPATH:/usr/local/lib" \
--prefix=../install
- --toolchain=msvc:告诉脚本我们要用 Visual Studio 的编译器。
- --enable-libfreetype:开启文字水印功能的核心开关
- --prefix:编译完成后,文件输出的目录。
4.开始编译与安装
cpp
make -j8
make install
四、验证成果
编译完成之后,去上一步--prefix设置的目录(如:.../install)找到生成的ffmpeg.exe文件。
打开cmd或PowerShell,运行以下命令测试drawtext是否生效。
bash
ffmpeg.exe -version
ffmpeg.exe -filters | findstr drawtext
如果能在输出列表中看到 drawtext,恭喜你,编译成功!
你可以随便丢一个视频和一个 .ttf字体文件在同目录下,用以下命令测试加个简单的红色文字水印:
bash
ffmpeg.exe -i input.mp4 -vf "drawtext=fontfile=your_font.ttf:text='Hello World':fontcolor=red:fontsize=48:x=10:y=10" -c:a copy output.mp4