目录
FFmpeg 5.1.10 + Qt5.9.9 MSVC2015 x64 完整编译方案(豆包解决思路待验证)
3. 第三方编码库(可选,x264/x265/fdkaac)
二、FFmpeg 5.1.10 configure 编译配置(适配 MSVC Qt 调用)
三、Qt5.9.9 MSVC2015_64 工程 .pro 配置模板
五、纯 MSVC 编译 FFmpeg 备选方案(无 MinGW)
(为了快速音视频开发没有编译源码,直接从官网下载编译好的windows库直接使用,匹配的环境为Qt_5_14_2_MinGW_64_bit)
FFmpeg 原生编译 & 开发环境完整限制
一、编译脚本层面核心限制(最关键)
FFmpeg 自带 configure 是 Bash Shell 脚本,不支持 Windows CMD/PowerShell、VS 命令行,直接决定环境门槛:
- 必须类 Unix Shell 环境 Windows 原生终端无法执行
./configure,只能通过:- MSYS2 / MinGW-w64 shell
- Cygwin(不推荐,产物带 cygwin 依赖)
- WSL(编译出 Linux .so,不能给 Windows Qt 使用) Linux/macOS 自带 bash,无此限制。
- 依赖 GNU 工具链 编译依赖:
make、sed、awk、git、pkg-config; Visual Studio 自带工具集没有这些,不能直接跑原生 configure。
二、编译器限制
1. GCC / Clang(原生完美支持)
Linux、macOS、MSYS2 MinGW-w64 GCC 是官方主推编译器,全功能支持所有编码、硬件加速、汇编优化。
2. MSVC(Visual Studio,严重受限)
FFmpeg 原生不支持 MSVC,分两种场景: 1)直接跑 configure:完全不支持,会直接报错退出; 2)官方提供 build_msvc 手动工程脚本,有大量短板:
- 不自动适配第三方库(x264/x265/fdk-aac 集成极其麻烦);
- 部分汇编优化代码缺失,性能低于 GCC 编译版本;
- 高版本 FFmpeg 对老 MSVC(如 VS2015)兼容性差;
- 编译步骤繁琐,没有一键 configure 自动配置。
你使用 Qt5.9.9 MSVC2015_64 场景:只能用 MSYS2 MinGW 编译 FFmpeg dll+lib 给 MSVC 间接调用,不能直接 MSVC 编译源码。
3. 编译器 ABI 不互通
- MinGW GCC 编译
.a静态库 不能被 MSVC 链接; - MSVC
.lib静态库不能被 MinGW Qt 链接; - 只有动态库方案跨编译器通用(dll + 对应导入库)。
三、汇编工具硬性限制(FFmpeg 必选)
FFmpeg 大量音视频汇编优化,二选一必须安装: yasm 或 nasm
- Windows VS、Qt 自带环境默认不带,必须 MSYS2 安装;
- 缺少汇编器会直接 configure 失败,或编译出无硬件加速、性能极低的版本。
四、操作系统 & 目标平台限制
- Windows
- 只能 MinGW-w64 编译生成 mingw 目标程序;
- 原生 configure 不识别 MSVC 运行时;
- Linux GCC/Clang 无任何限制,支持 VAAPI/NVENC/QSV 全硬件编解码;
- macOS Xcode Clang 原生支持;
- 交叉编译限制: 原生 configure 支持交叉编译,但需要手动配置交叉编译器、sysroot,Windows 下交叉编译安卓 / 嵌入式难度高。
五、第三方编码库协议与编译开关限制
libx264 / libx265:需要--enable-gpl,商用闭源软件分发需开源;libfdk-aac:非自由协议,必须追加--enable-nonfree,无法用于 GPL 合规商用;- 所有第三方库必须提前编译并提供头文件 + 库路径,configure 不会自动搜索 Windows 下自定义目录。
六、版本兼容性限制(针对你 FFmpeg 5.1.10)
- 老系统 / 老编译器
- VS2010、MinGW 4.x 及以下编译 FFmpeg5.x 会语法报错;
- Qt5.9 配套老 MinGW 不推荐,建议 MSYS2 新版 MinGW-w64;
- C 语言标准:FFmpeg 大量使用 C99 语法
- MSVC 默认不开启 C99,代码会报语法错误;
- MinGW 默认支持 C99,无问题。
七、链接与开发调用环境限制
- C++ 工程(Qt)强制要求
extern "C"FFmpeg 纯 C 库,C++ 直接包含头文件会符号未定义链接错误; - 动态 / 静态库平台差异
- Linux:
.so动态、.a静态; - Windows MinGW:
.dll动态、.a导入库 / 静态库; - Windows MSVC:仅能使用 MinGW 输出的 dll + 导入
.lib;
- Linux:
- 运行时依赖 MinGW 编译 FFmpeg 默认依赖
libgcc_s_seh-1.dll、libstdc++-6.dll,打包发布必须附带,除非编译加--extra-ldflags="-static-libgcc -static-libstdc++"静态链接运行库。
八、硬件加速模块环境限制
不同硬件编解码绑定专属平台环境,缺依赖直接无法开启:
- NVENC (NVIDIA):需要 CUDA Toolkit、显卡驱动头文件;
- QSV (Intel):Linux/macOS 友好,Windows MSVC 编译极麻烦;
- VAAPI:仅 Linux;
- D3D11VA:Windows 平台,MSYS2 编译可开启,但调试复杂。
总结(贴合你的 Qt 开发场景)
- Windows 下不能用 MSVC 直接编译 FFmpeg 源码,只能 MSYS2 MinGW 编译库;
- Qt MSVC / Qt MinGW 两套套件的 FFmpeg 库不能混用;
- 编译必须 Bash + yasm/nasm,Qt、VS 自带环境均缺少依赖;
- MSVC 只能动态链接 FFmpeg dll,无法使用 MinGW 编译的静态 .a;
- FFmpeg 纯 C,Qt C++ 代码必须 extern "C" 包裹头文件,否则链接失败。
FFmpeg 5.1.10 + Qt5.9.9 MSVC2015 x64 完整编译方案(豆包解决思路待验证)
前置说明
- 环境:VS2015 专业版 / 社区版、Qt5.9.9 MSVC2015_64、MSYS2 MinGW64(用于生成 VS 可用 FFmpeg 库)
- 限制:FFmpeg 原生 configure 仅支持 MinGW/MSYS,不能直接用 MSVC 编译源码;主流方案:
- 方案 A(推荐):MSYS2-MinGW64 编译 FFmpeg 5.1.10 静态 / 动态库,MSVC Qt 链接使用
- 方案 B:用 ffmpeg-windows-build 预编译 MSVC 版本(省事,但可控性差)
- 版本锁定:ffmpeg-5.1.10(5.1 稳定分支最后版本)
一、环境准备
1. 安装 MSYS2 x64
官网:MSYS2 启动 MSYS2 MINGW64 终端(必须 64 位) 更新工具链:
bash
运行
pacman -Syu
pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-make mingw-w64-x86_64-yasm mingw-w64-x86_64-nasm git mingw-w64-x86_64-pkg-config

5000

被折叠的 条评论
为什么被折叠?



