Windows平台MSVC编译的FFmpeg库

张开发
2026/4/4 21:18:51 15 分钟阅读
Windows平台MSVC编译的FFmpeg库
在MSYS2中使用MSVC编译FFmpeg V6.1.4并增加H.264编解码支持核心是先编译x264库再将其集成到FFmpeg中。以下是详细操作步骤一、环境准备与配置1.1 基础软件安装安装Visual Studio确保已安装VS2019/2022并包含“使用C的桌面开发”组件安装MSYS2从官网下载并安装至无空格路径如C:\msys64修改MSYS2配置编辑C:\msys64\msys2_shell.cmd取消rem set MSYS2_PATH_TYPEinherit的注释使MSYS2继承VS环境变量1.2 启动MSYS2环境# 从VS x64 Native Tools Command Prompt启动MSYS2 cd C:\msys64 .\msys2_shell.cmd -mingw64 -use-full-path1.3 安装编译工具链# 更新包管理器 pacman -Syu # 安装基础编译工具 pacman -S base-devel make diffutils pkg-config yasm nasm git1.4 解决link.exe冲突# 重命名MSYS2的link.exe避免与MSVC冲突 mv /usr/bin/link.exe /usr/bin/link.exe.bak二、编译x264库H.264编码器2.1 下载x264源码# 进入home目录 cd ~ # 克隆x264源码或下载压缩包 git clone https://code.videolan.org/videolan/x264.git cd x2642.2 创建编译脚本build_x264.sh#!/bin/bash # build_x264.sh # 设置基础路径 BASE_PATH$(pwd) X264_SOURCE$BASE_PATH/x264 INSTALL_PATH$BASE_PATH/x264_install # 进入源码目录 cd $X264_SOURCE # 配置x264使用MSVC编译器 CCcl ./configure \ --prefix$INSTALL_PATH \ --enable-shared \ --enable-static \ --disable-asm \ # MSVC不支持x264的汇编优化 --extra-cflags-MT # 静态运行时库 # 编译安装 make clean make -j$(nproc) make install2.3 关键修改x264.h适配MSVC编译完成后需修改x264_install/include/x264.h// 找到X264_API定义处修改为 #define X264_API /* 注释掉原有定义 #ifdef X264_API_IMPORTS # define X264_API X264_DLL_IMPORT #else # ifdef X264_API_EXPORTS # define X264_API X264_DLL_EXPORT # else # define X264_API # endif #endif */若不修改此文件后续FFmpeg链接x264时会报错。2.4 执行编译# 赋予执行权限 chmod x build_x264.sh # 执行编译 ./build_x264.sh编译成功后x264_install目录将包含include/x264.h和lib/x264.lib。三、编译FFmpeg V6.1.4集成x2643.1 下载FFmpeg源码cd ~ # 下载FFmpeg 6.1.4 wget https://ffmpeg.org/releases/ffmpeg-6.1.4.tar.gz tar -xzf ffmpeg-6.1.4.tar.gz cd ffmpeg-6.1.43.2 创建编译脚本build_ffmpeg.sh#!/bin/bash # build_ffmpeg.sh BASE_PATH$(cd $(dirname $0); pwd) X264_INSTALL$BASE_PATH/../x264_install # 假设x264_install在上级目录 cd $BASE_PATH # 配置FFmpeg ./configure \ --prefix$BASE_PATH/ffmpeg_install \ --toolchainmsvc \ --archx86_64 \ --enable-x86asm \ --enable-cross-compile \ --enable-asm \ --enable-shared \ --disable-programs \ --enable-d3d11va \ --enable-dxva2 \ --disable-static --enable-gpl \ --enable-encoderlibx264 \ --enable-decoderh264 \ --enable-libx264 \ --extra-cflags-I$X264_INSTALL/include -MT \ --extra-ldflags-LIBPATH:$X264_INSTALL/lib \ --extra-libsx264.lib \ --pkg-configpkg-config # 编译安装 make clean make -j$(nproc) make install3.3 关键配置说明参数作用必要性--toolchainmsvc指定MSVC编译器必需--enable-gpl启用GPL许可x264要求必需--enable-libx264链接外部x264库必需--extra-cflags-I...指定x264头文件路径必需--extra-ldflags-LIBPATH:...指定x264库路径必需--enable-asm汇编优化建议--enable-shared生成DLL动态库可选3.4 执行编译chmod x build_ffmpeg.sh ./build_ffmpeg.sh四、验证编译结果4.1 检查x264支持# 进入安装目录 cd ffmpeg_install/bin # 查看编码器列表 ./ffmpeg.exe -encoders | findstr 264 # 应显示V..... libx264 libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 104.2 测试编码功能# 使用x264编码测试 ./ffmpeg.exe -i input.mp4 -c:v libx264 -preset medium -crf 23 output.mp4五、常见问题解决5.1 链接错误未找到x264符号问题编译FFmpeg时提示undefined reference to x264_encoder_open等错误。解决确认x264.h已按步骤2.3修改检查--extra-ldflags路径是否正确确保x264编译为静态库--enable-static5.2 MSVC编译器警告问题大量C4996警告fopen: This function or variable may be unsafe。解决在--extra-cflags中添加--extra-cflags-I$X264_INSTALL/include -MT -D_CRT_SECURE_NO_WARNINGS5.3 运行时缺少DLL问题运行ffmpeg.exe提示缺少x264-164.dll。解决将x264_install/bin/x264-164.dll复制到ffmpeg_install/bin/目录。5.4 C compiler test filed问题 C compiler test filed。解决build_ffmpeg.sh 中缺少 --enable-cross-compile 选项。或其他选项不适配。5.5 doc编译失败解决不影响需要的动态库已经编译出来了直接使用make install 命令安装。六、项目集成建议6.1 Qt项目配置.pro文件注意添加库的路径需要根据自己需要修改。# FFmpeg包含路径 INCLUDEPATH $$PWD/../ffmpeg_install/include DEPENDPATH $$PWD/../ffmpeg_install/include # 库文件路径Debug/Release分别配置 CONFIG(debug, debug|release) { LIBS -L$$PWD/../ffmpeg_install/lib/debug } else { LIBS -L$$PWD/../ffmpeg_install/lib/release } # 链接库按需添加 LIBS -lavcodec -lavformat -lavutil -lswscale -lswresample -lx264 # 运行时DLL复制 win32 { debug { QMAKE_POST_LINK $$quote(copy /Y $$PWD/../ffmpeg_install/bin/*.dll $$OUT_PWD/debug$$escape_expand(\n\t)) } release { QMAKE_POST_LINK $$quote(copy /Y $$PWD/../ffmpeg_install/bin/*.dll $$OUT_PWD/release$$escape_expand(\n\t)) } }如果是msvc的编译器增加方法如下INCLUDEPATH $$PWD/../ffmpeg_install/include # 链接 FFmpeg 库MSVC LIBS -L$$PWD/../ffmpeg_install/lib \ avcodec.lib \ avformat.lib \ avutil.lib \ swscale.lib6.2 编译选项优化如需Release版本修改build_ffmpeg.sh# 将-MT改为-MD动态运行时库 --extra-cflags-I$X264_INSTALL/include -MD -O2 -DNDEBUG # 移除调试选项 --disable-debug \ --enable-optimizations \总结通过以上步骤你可以在MSYS2MSVC环境下成功编译支持H.264编解码的FFmpeg V6.1.4。关键点环境继承正确配置MSYS2继承VS环境变量x264适配修改x264.h以兼容MSVC链接器工具链指定FFmpeg配置必须包含--toolchainmsvc路径正确确保x264头文件和库路径正确传递给FFmpeg

更多文章