ffmpeg6.1 Windows编译支持drawtext滤镜功能

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脚本。

  1. 配置 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
相关推荐
都在酒里21 小时前
【极致低延时】香橙派部署 MediaMTX 实现 WebRTC 推流,延时仅 500-800ms,比局域网 ffmpeg 拉流快近 10 倍!(附踩坑全记录)
linux·arm开发·ffmpeg·webrtc·orangepi·嵌入式软件
Empty-Filled1 天前
用 Kap + FFmpeg 把录屏转成小体积 GIF:产品操作演示图制作实践
ffmpeg·kap
矜辰所致1 天前
嵌入式语音开发应用基础说明
ffmpeg·ai 语音·嵌入式语音·语音播放·语音采样
luoyayun3612 天前
Qt + FFmpeg 实战:音频静音段检测
qt·ffmpeg·音视频·静音段检测
小鹿研究点东西3 天前
直播带货长视频AI自动剪辑开播:一场直播如何反复利用?
ffmpeg·自动化·音视频·语音识别
luoyayun3614 天前
Qt + FFmpeg 实战:获取音视频文件基础属性、流信息和元数据
qt·ffmpeg·音视频·元数据·获取音视频文件属性
Rudon滨海渔村4 天前
ffmpeg裁剪视频黑屏、不准时等处理方式 - ffmpeg基本操作
ffmpeg·音视频
The Sheep 20235 天前
ffmpeg速成
ffmpeg
街灯L5 天前
【Ubuntu】使用ffmpeg解析m3u8网页视频
ubuntu·ffmpeg·音视频
烟雨江南7856 天前
特高压输电线路带电作业直升机吊篮与强电磁感应放电:基于“灵声智库”空间自适应滤波与声纹授权的离线语音控制指令方案
人工智能·ffmpeg·webrtc·语音识别·ai质检