众所周知FFMPEG是非常牛逼的存在,但是在学习FFMPEG时一般都是依库的形式调用,总有种隔靴搔痒的感觉,于是爆肝了两天终于把代码加入到Qt工程中了
Mingw 版本编译 FFMPEG(动态静态库版本)
前置条件:
先跳坑在ubuntu编译FFMPEG和ffplay中的Window小节有详细介绍,这个还是比较重要的,起码有个感性的认识一个bash解析器,这个选git就行了,程序员还能不装个这?mingw编译器一套(Qt自带的就行了)打开git终端输入以下命令 (我是装了cywin以及另外的mingw64套件)所以要直接将PATH变量清零(只保留mingw和git命令环境),还有个要注意DOS中的c:\这里要改成/c,因为冒号:在linux中起到路径分割的作用, 而windows下是分号;
移到Qt中
其实实现的有点挫(只实现了window环境下的x86_32位),为每个子模块编写一个pri文件包含起来
重要知识点:
如何使用qmake编译汇编文件asm参考mingw链接库版本中的下面一句话,结合QMake的非公开wiki(见文末)可以新建一个yasm.pri内容如下编译步骤
依次为libavutil, libswresample, libavcodec, libavformat, libswscale, libpostproc, libavdevice, libavfilter, 其中第一个必须编译libavutil模块,这个是个工具库,所有其他的部分可能会依赖它, 然后照猫画虎编译其他模块大致按照上面顺序, 在遇到依赖的就延后处理就是了
思路
在克隆好的ffmpeg 中先执行 .configure命令 得到一些必要的配置文件(config.h, config_components.h等文件)新建一个ffmpeg.pri参考每个模块文件夹下的makefile文件编写pri文件写python脚本处理一下内容大致为以下步骤将makefile文件中的OBJS中的各个.o替换成同名的.c遇到形如 OBJS-$(CONFIG_CUDA) 之类的查找config.h中CONFIG_CUDA的定义如果为1 则替换.o 为.c或者.asm,如果为0则注释掉遇到重名的.c 只保留一个(汇编只会警告,c文件重复会报错….)到每个模块目录如果存在架构文件夹(如x86)则找到makefile参照建立对应的.pri文件
如第一个libavutil.pri文件如下
对应的x86.pri
测试
新建一个工程 将ffmpeg文件夹拷贝过去
mian.cpp文件如下
附件下载
配置参考附件