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
相关推荐
blanks20203 天前
ffmpeg 学习笔记 通过命令行采集音频
ffmpeg
Mahut7 天前
我用 Electron + FFmpeg 做了一个本地视频处理工作站 ClipForge
前端·ffmpeg·electron
源之缘-OFD先行者16 天前
破界渲染:WinForm下的FFmpeg+Vortice极速推流引擎
ffmpeg·winform·推流·h264
源来猿往16 天前
记ffmpeg-8.1.1 之Android库编译(window)
android·ffmpeg
Deitymoon16 天前
RV1126+FFMPEG多路码流监控项目
ffmpeg·音视频
芝麻别开门16 天前
GStreamer DASH Demux 知识文档
ffmpeg·dash
ltlovezh17 天前
ROI 编码学习指南:Android 与 FFmpeg 的真实实现边界
android·ffmpeg·音视频开发
m0_7471245318 天前
多媒体框架 FFmpeg 和 GStreamer
ffmpeg·gstreamer
小鹿研究点东西18 天前
AI直播系统怎么搭?
人工智能·ffmpeg·自动化·音视频·语音识别
Nightwish518 天前
Oracle 数据库巡检检查清单
数据库·oracle·ffmpeg