简介这份资源是面向32位Windows平台、基于MinGW32编译环境构建的FFmpeg 3.4版本适合需要在Qt项目中集成音视频编解码能力的C/C开发者以及希望直接调用预编译库完成转码、封装、解封装等任务的终端用户。压缩包共170个文件以h头文件与c示例源码为主辅以def、a、lib、dll等导入库与动态库文件另有pc配置、ffpreset预设及少量exe工具整体约2.62MB体积轻量便于嵌入工程。内容预览可见libavcodec、libavformat、libavfilter等模块的导入库以及transcode_aac、muxing、demuxing_decoding等示例代码可帮助读者快速理解各模块职责并对照编写调用逻辑。已有229人学习下载适合作为QtMinGW32环境下音视频功能的集成参考。1. 从一次 Qt 编译翻车说起为什么我还在用 ffmpeg-3.4-mingw32上周帮一个做桌面播放器的朋友收拾烂摊子。他在 Qt 5.9 的 MinGW 32 位环境里调视频解码随手从网上拖了个 64 位的 ffmpeg 动态库塞进工程结果ld直接报file format not recognized换成静态库又冒出一堆undefined reference to av_register_all。折腾到半夜最后发现根子不在代码而在工具链位数和 ffmpeg 版本对不上。这类事我见得太多了Qt mingw ffmpeg 32位 3.4 这套组合看着老但在不少存量项目、教学环境和老机器上仍然是刚需。装对了十分钟跑通装错了能卡你一整天。这篇笔记就按我实际部署的顺序把版本选择、目录摆放、.pro配置、验证和救火一条线写清楚新手照着走熟手看参数取舍。2. 装前把环境钉死Qt、MinGW 与 ffmpeg 3.4 的位数对齐2.1 先确认你的 Qt 套件到底是哪一套 MinGW很多人一上来就下载 ffmpeg压根没看自己 Qt 用的是哪个编译器。Qt 安装器里带 MinGW 的套件通常长这样Desktop Qt 5.9.8 MinGW 32bit、Desktop Qt 5.12.12 MinGW 64-bit。名字里那个32bit就是命门。打开 Qt Creator进「工具 → 选项 → 构建和运行 → 构建套件」看当前套件的「编译器」一栏如果是MinGW 5.3.0 32bit之类那你的整个工程就是 32 位目标ffmpeg 必须给 32 位库。我一般还会在命令行再核一遍避免 Qt Creator 显示和实际不一致# 进入 Qt 自带的 MinGW 目录确认 gcc 目标架构 gcc -dumpmachine # 32 位 MinGW 通常输出 i686-w64-mingw32 # 64 位则输出 x86_64-w64-mingw32-dumpmachine输出里的i686就是 32 位铁证。这一步别省我踩过「Qt Creator 套件写着 32bit、PATH 里却混进了另一个 64 位 gcc」的坑编译时链接器悄悄用了错的报错信息还特别玄学。确认完把 Qt 的 MinGWbin目录放到 PATH 最前面后面所有命令都在这个 shell 里跑。2.2 ffmpeg 3.4 的库文件构成别只认一个 dllffmpeg 3.4 这套 mingw32 构建核心是几组库avcodec、avformat、avutil、swscale、swresample外加可选的avfilter、avdevice、postproc。每个库都有静态.a和动态.dll 导入库.dll.a两种形态。Qt 工程里怎么选直接决定你后面会不会被 dll 丢失搞疯。文件类型典型文件名用途我的取舍静态库libavcodec.a编进 exe无运行时依赖小工具、单文件分发首选导入库libavcodec.dll.a配合 dll 链接用动态方案必须动态库avcodec-57.dll运行时加载多程序共用、体积敏感时用头文件libavcodec/avcodec.h等编译期包含整个include目录都要注意 ffmpeg 3.4 的主版本号是 57avcodec、57avformat、55avutildll 名字里带这个数字别拿 4.x 的avcodec-58.dll混进来ABI 不兼容运行时会直接崩在avcodec_open2。我一般把整套文件按「include / lib / bin」三目录摆好后面配置路径时心里有数。2.3 目录怎么摆决定了 .pro 好不好写我习惯在工程根目录下建一个third_party/ffmpeg里面分三层your_project/ ├── third_party/ │ └── ffmpeg/ │ ├── include/ # 所有 .h保持 avcodec/ avformat/ 等子目录结构 │ ├── lib/ # .a 或 .dll.a 导入库 │ └── bin/ # 运行时 dll动态方案才需要 ├── your_project.pro └── main.cpp这么摆的好处是.pro里路径短、可移植换台机器把third_party整个拷过去就行。常见做法是把 ffmpeg 装到系统某个固定目录再配环境变量但 Qt 工程我更倾向工程内自带避免「这台机器能编、那台机器找不到头文件」的经典翻车。头文件目录一定要保留libavcodec/这一层因为源码里写的是#include libavcodec/avcodec.h你把 .h 全平铺到 include 根下反而编不过。3. 落地安装与 .pro 配置让 qmake 正确找到 32 位 ffmpeg 3.43.1 解压、校验、放位三步别跳拿到 ffmpeg-3.4-mingw32 的包之后先别急着往工程里塞。我一般先解压到一个临时目录核对位数和版本再往third_party里搬# 解压到临时目录 unzip ffmpeg-3.4-mingw32.zip -d /tmp/ffcheck # 看 dll 的架构32 位会显示 80386 或 i386 file /tmp/ffcheck/bin/avcodec-57.dll # 看静态库架构 file /tmp/ffcheck/lib/libavcodec.afile输出里出现PE32 executable (DLL) (GUI) Intel 80386就是 32 位出现PE32或x86-64就是 64 位直接换包。这一步花十秒能省掉后面半小时的链接报错。校验通过后把include、lib、bin分别拷进third_party/ffmpeg对应目录。动态方案记得把bin下的 dll 也拷到构建输出目录或者后面在.pro里加拷贝规则。3.2 .pro 里写对 INCLUDEPATH 和 LIBS 的顺序Qt 工程链接 ffmpeg核心就三行头文件路径、库路径、库列表。但顺序和写法有讲究写错了就是一堆 undefined reference。# 头文件目录指向 include 的上一层 INCLUDEPATH $$PWD/third_party/ffmpeg/include # 库目录静态库和导入库都放这 LIBS -L$$PWD/third_party/ffmpeg/lib # 静态链接按依赖顺序avformat 依赖 avcodecavcodec 依赖 avutil LIBS -lavformat -lavcodec -lswscale -lswresample -lavutil # 如果用到滤镜和设备再补 # LIBS -lavfilter -lavdevice -lpostproc$$PWD是 .pro 所在目录用它拼相对路径工程挪位置也不断。-L指定库搜索目录-l后面跟库名去掉lib前缀和扩展名比如libavformat.a写成-lavformat。顺序上被依赖的库放后面avformat用到avcodecavcodec用到avutil所以-lavutil压轴。GNU ld 对静态库是单遍扫描顺序反了就会报undefined reference to av_malloc这类看着莫名其妙的错。3.3 动态方案导入库 dll 拷贝规则如果你选动态链接LIBS里链接的是.dll.a导入库运行时还得让 exe 找得到 dll。qmake 里加一段拷贝省得每次手动拖# 动态方案链接导入库.dll.a 会被 -l 自动识别 LIBS -lavformat -lavcodec -lswscale -lswresample -lavutil # 构建后把 dll 拷到输出目录 FFMPEG_BIN $$PWD/third_party/ffmpeg/bin DESTDIR_WIN $$replace(OUT_PWD, /, \\) QMAKE_POST_LINK $$quote(cmd /c copy /y \$$replace(FFMPEG_BIN, /, \\)\\*.dll\ \$$DESTDIR_WIN\)QMAKE_POST_LINK在链接完成后执行copy /y覆盖已有文件。$$replace(..., /, \\)是把 qmake 的正斜杠路径转成 Windows 反斜杠不转的话cmd有时认不出。这段在 MinGW 的 make 下能跑因为最终调的是系统cmd。动态方案的好处是多个程序共用一套 dll坏处是分发时漏一个 dll 就启动失败所以后面验证环节我会专门查依赖。3.4 编译前先跑一个最小验证程序别等整个工程编完才发现库没链上。我习惯先写个十几行的main.cpp只调一个 ffmpeg 函数确认工具链通了再往上堆业务代码#include libavcodec/avcodec.h #include libavutil/avutil.h #include cstdio int main() { // 打印 ffmpeg 版本确认链接的是 3.4 这套 printf(avcodec version: %u\n, avcodec_version()); printf(avutil version: %u\n, avutil_version()); // 3.4 对应 avcodec 57.xavutil 55.x return 0; }avcodec_version()返回的是major16 | minor8 | micro拼出来的整数3.4 系列 avcodec 主版本 57打印出来高位应该是 57。跑通这个再写解码逻辑出问题范围小、好定位。这一步我强烈建议保留在工程里当冒烟测试换机器、换库版本时先跑它。4. 避坑与排查ffmpeg 3.4 MinGW 32 位最常见的五处翻车4.1 现象链接报undefined reference to av_register_all原因多半是库顺序写反或者只链了avcodec没链avformat。av_register_all在 3.4 里属于avformat而avformat又依赖avcodec、avutil。解决把LIBS改成-lavformat -lavcodec -lavutil这个从高到低的顺序-lavutil放最后。如果还报检查是不是混进了 64 位库file libavformat.a看一眼架构。4.2 现象编译过、运行崩提示找不到avcodec-57.dll原因动态方案下 dll 没跟 exe 放一起或者放的是 64 位 dll。解决把third_party/ffmpeg/bin下所有*-57.dll、*-55.dll拷到 exe 同目录用file确认每个 dll 都是 32 位。我一般还会用objdump -p your.exe | grep DLL Name列出 exe 依赖的所有 dll逐个核对是否存在比盲猜快。4.3 现象#include libavcodec/avcodec.h报 No such file原因INCLUDEPATH指到了include/libavcodec这一层而不是include。源码里的路径是带libavcodec/前缀的所以INCLUDEPATH必须指到它的上一层。解决改成INCLUDEPATH $$PWD/third_party/ffmpeg/include并确认include下确实有libavcodec子目录。4.4 现象qmake 生成 Makefile 后链接器仍去系统路径找库原因PATH 或系统环境里存在另一套 ffmpeg-L的优先级被盖过或者LIBS里混了绝对路径的旧库。解决在.pro里把-L$$PWD/third_party/ffmpeg/lib放在所有-L最前面执行qmake后打开生成的Makefile搜LIBS看实际展开的路径对不对。这一步是排查链接问题的黑匣子别嫌麻烦。4.5 现象静态链接后 exe 体积暴涨、或报重复符号原因静态库把整个avformat拉进来体积自然大重复符号通常是同时链了静态库和导入库。解决二选一静态方案只留.a动态方案只留.dll.a别把两种都放lib目录让-l自己猜。体积敏感的话ffmpeg 3.4 支持编译期裁剪但现成 mingw32 包一般没裁接受现实或者自己重编。5. 装完怎么验证跑通三步确认这套 32 位 ffmpeg 3.4 真的能用第一步跑 3.4 节那个版本打印程序确认avcodec_version()高位是 57、avutil_version()高位是 55。数字对不上说明链的不是这套库回去查LIBS和-L顺序。第二步写个最小解封装验证用avformat_open_input打开一个本地 mp4打印nb_streams和第一条视频流的codec_id能正常输出就说明avformatavcodec的运行时链路是通的。第三步动态方案下把 exe 单独拷到一个干净目录不带 Qt 的 bin双击运行能起来且不报 dll 缺失才算真正可分发。我一般还会留一张对照表在工程 README 里换机器时逐项打勾检查项期望值命令/位置编译器架构i686-w64-mingw32gcc -dumpmachineavcodec 主版本57版本打印程序avutil 主版本55版本打印程序dll 架构PE32 / 80386file *.dllexe 依赖 dll全部存在于同目录objdump -p exe这套流程走下来Qt mingw ffmpeg 32位 3.4 的环境基本就钉死了。说个血泪经验我有次图省事直接把 64 位 ffmpeg 的 include 和 32 位 lib 混着用编译期一点不报运行到avcodec_alloc_context3才崩查了大半天。从那以后我每次配这套环境都强制先跑file核架构、再跑版本打印程序两步不过绝不往下写业务代码。希望帮到你少走我走过的弯路。本文还有配套的精品资源点击获取
企业数字化 ERP 产品动态
相关推荐
Oracle汉字转拼音实战:PL/SQL包安装、调用与避坑指南 简介:这份资源是一套面向Oracle数据库开发与运维人员的PL/SQL工具包,用于在UTF8编码环境下将汉字转换为拼音,可服务于数据分析、索引优化与文本检索等场景。压缩包共1个文件,为sql脚本,整体约156KB,导入后即… · 2026/11/4 7:14:03
Linux下C/C++连接MySQL:头文件与库文件配置及32/64位避坑指南 简介:这份资源面向在 Linux 环境下进行 C/C 开发、需要连接 MySQL 数据库的开发者,尤其适合不想额外安装 mysql-devel 或 MySQL 客户端与服务端、希望以轻量方式完成编译链接的人群。压缩包共 77 个文件,以 68 个 .h 头文件、8 个 .a 静态库和… · 2026/11/7 16:27:11
MySQL 8.0导入1700万条K12题库:字符集与LaTeX避坑 简介:这份中小学题库 MySQL 资源面向在线 K12 教育从业者、题库产品与研发人员,聚焦数学、物理、化学等学科试题的存储、章节与知识点组织、题目属性设置,以及 LaTeX 公式录入与前端显示等常见难题。压缩包共 583 个文件,约 2.03M… · 2026/11/3 2:22:11
高级技能电工证怎么考?学历不高也能拿!含金量不输本科 高级技能电工证怎么考?学历不高也能拿!含金量不输本科 你是不是也担心自己学历不高,考不了高级技能电工证?其实完全不用担心,我身边就有好几个初中毕业的电工朋友,现在拿着高级技能电工证在工地当技术员,工资都不比本科生低。今天我就从洛阳涧西区一个… · 2026/11/11 1:49:01
我需要一个电工证,2026河南最新政策怎么考? 我需要一个电工证,2026河南最新政策怎么考? 工地太忙根本没时间复习考试,这几乎是每个特种作业人员的心声。尤其像你这样在开封转岗的电工,可能正面临着从建筑工地转到电力安装岗位的挑战,而手里那本已经过期的电工证,成了你上新岗位的拦路虎。20… · 2026/11/11 1:49:01
工地太忙根本没时间复习考试?黔江电工证考试在哪里网上查询全攻略 工地太忙根本没时间复习考试?黔江电工证考试在哪里网上查询全攻略 工地太忙根本没时间复习考试?你不是一个人。很多人在工地一干就是几个月,白天干活晚上赶工期,根本抽不出时间复习电工证考试,但证件到期又不能上岗,这事儿谁懂?别急,今天我就把… · 2026/11/11 1:49:01
电工证有办法挂靠吗 含金量高到你想不到 电工证有办法挂靠吗 含金量高到你想不到 你是不是也遇到过这样的情况?不知道去哪报名,怕被中介坑,听说电工证有办法挂靠,但又不知道具体怎么操作,生怕踩坑?其实,电工证的含金量在很多行业都相当高,尤其是涉及电力、建筑、制造这些领域,但问题在于,… · 2026/11/11 1:49:01
证书过期了不知道怎么复审延期?办理无锡学习电工证千万别踩坑 证书过期了不知道怎么复审延期?办理无锡学习电工证千万别踩坑 你是不是也遇到过这种情况?电工证快到期了,但不知道该怎么复审,怕一不小心错过了,证书就失效了,到时候找工作、上岗都受影响。特别是像你这样在南阳卧龙区转岗的从业者,对证书的含金量和有… · 2026/11/11 1:49:01
高压电工作业教案官方回应:证书过期了不知道怎么复审延期 高压电工作业教案官方回应:证书过期了不知道怎么复审延期 证书过期了不知道怎么复审延期?很多人在高压电工作业证到期后才意识到问题,结果发现不是简单地找培训机构补个课就能解决。 官方回应… · 2026/11/11 1:48:00
电工证丢失还能补吗?千万别踩坑,丢了证等于失业 电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。… · 2026/11/10 2:16:10
电力电缆作业证直播报名入口与办理流程良心建议 电力电缆作业证直播报名入口与办理流程良心建议 你是不是也担心学历不高报不了名?别急,今天就给你讲讲 电力电缆作业证直播 的报名流程和那些你必须知道的干货, 良心建议 在这里,别错过。 电力电缆作业证直播报名需要什么条件?… · 2026/11/10 17:46:39
英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 怕考不过白交培训费?英德电工证报考费多少钱,你真的了解吗?现在市面上培训机构五花八门,价格参差不齐,很多人一不小心就花了冤枉钱,结果还考不过。别急,今天就来给你说清楚英德电工证的… · 2026/11/10 17:11:43
_中职电工证最新政策解读 中职电工证在哪考?工地太忙根本没时间复习考试的救星来了 工地太忙根本没时间复习考试,这是很多正在备考 中职电工证 的建筑工友的真实写照。你不是不想考,而是真的没时间。但别担心,这期内容是 新乡初次报考人员… · 2026/11/11 0:00:52
昆明电工证培训价格值不值得考?老电工告诉你真相 昆明电工证培训价格值不值得考?老电工告诉你真相 之前考的证在外省能不能转过来?这个问题是很多在外地打工、换城市生活、或者是想在昆明发展的朋友最关心的。尤其是现在云南发展快,很多企业都在招持证上岗的电工,如果你手头有证但不在本地,那这个证是不… · 2026/11/11 0:00:52
特种电缆张工网上查询全攻略:外省证如何转过来 特种电缆张工网上查询全攻略:外省证如何转过来 之前考的证在外省能不能转过来?这是很多特种作业从业者最关心的问题,尤其是像特种电缆张工这类证书,直接关系到日常工作是否合规、能否顺利晋升。很多小伙伴因为证书归属地的问题,陷入职业发展的瓶颈,甚至… · 2026/11/11 0:00:52
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/10 20:19:29
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/10 19:22:45
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/10 17:00:47