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
相关推荐
_oP_i1 天前
FFmpeg 如何与ai结合剪辑出效果好的视频
人工智能·ffmpeg·音视频
四方云2 天前
电销系统中FreeSWITCH桥接播放自定义振铃:被叫接听后振铃持续问题解决
ffmpeg
花花鱼2 天前
将 MP4 转为 886×1920(竖屏)使用ffmpeg处理
ffmpeg
杨云龙UP3 天前
Oracle RAC/ODA环境下如何准确查询PDB表空间已分配大小?一次说清Oracle表空间逻辑大小和ASM三副本实际占用_2026-05-19
linux·运维·数据库·sql·oracle·ffmpeg
DogDaoDao3 天前
Android 播放器开发:从零构建全功能视频播放器
android·ffmpeg·音视频·播放器·mediacodec·编解码
学Linux的语莫4 天前
FFmpeg和流媒体服务器
ffmpeg
太阳风暴5 天前
fftools/graph-FFmpeg Filtergraph 打印系统文档
ffmpeg·滤镜图
!chen5 天前
Oracle Deep Data Security (Deep Sec) 初体验
数据库·oracle·ffmpeg
wyw00006 天前
FFmpeg实现带颜色MXF转mp4
python·ffmpeg