废话不多说了,先上下载链接
ffmpeg官方网站:http://ffmpeg.org/download.html
ffmpeg源码下载链接:https://ffmpeg.org/releases/ffmpeg-3.4.13.tar.gz
如果需要其他版本,修改版本号即可,适用于3.4全系列,如https://ffmpeg.org/releases/ffmpeg-3.4.8.tar.gz
windows编译ffmpeg,需要mingw环境支持,具体教程,查看我的博文:
【无标题】windows下使用cmake编译c++_帝利特的博客-CSDN博客
以下是在mingw环境内执行的shell命令:
#定位到代码根目录
cd /e/workspace/ffmpeg-3.4.13
#配置cmake
./configure --prefix=build --arch=x86_64 --enable-shared --enable-static --disable-ffserver --enable-ffplay --disable-debug --disable-doc
make clean
make -j4
make install
编译好后,拷贝build目录下的内容到需要安装的目录(非必要)。同时设置环境变量(必要):
环境变量配置好后,使用命令测试是否功能正常:
需要注意的是因为windows平台默认没有libpng.dll,默认打包的ffmpeg并没有png的编码器和解码器,所以我们编译好ffmpeg后,如果想要导入或者导出png格式,则会出现以下错误:
接下来,我们开始c++的常规踩坑。。。这些都需要在mingw64的msys环境下进行编译
补充说明一下在linux环境下,如何解决encoder for format image2 (codec png) is probably disabled. 的问题。只要在安装前安装以下软件之一即可
sudo apt install libopencv-dev
#opencv的开发包里有包含libpng-tools,按需要安装即可
sudo apt install libpng-tools
既然知道需要libpng才能正确导出和导入png格式,那么我们就前往libpng的官方网站进行下载编译。不过libpng还需要zlib的支持才能正常工作。这边我们不再引导式书写了,直接按顺序来,上链接,上方案。如果不需要进行编译支持,只要dll的话,可以直接从腾讯的程序中获取到该dll,如qq,tim,微信等。无需进行编译哦。那么问题来了。我们为什么要编译。是因为我们需要静态库。
本文提供2个方案供大家选择:
方案一:
懒人直达链接下载我已经配置好的mingw64,只需要修改博文内msys对应的mingw64的目录为你实际保存的目录即可,同时需要在环境变量配置你的mingw64。
【无标题】windows下使用cmake编译c++_帝利特的博客-CSDN博客
方案二:
zlib下载链接 http://www.zlib.net/
cd /e/workspace/zlib-1.2.13/
make -f win32/Makefile.gcc
编译完成后,拷贝整个需要的文件到对应的目录,上文的gcc文件内已经说明了,自己查看一下。
总体来说编译zlib比较顺利,差不多一次就过了,接下来的libpng比较头疼问题比较多。
首先就是官方的下载链接是有问题的,官方提供了zip和gzip包,zip包是有问题的,会碰到一个一个错误 ,options.awk:bad line (10): com
遇到这个问题,我一开始以为安装了awk支持就可以了,然并卵,那怎么办?在Google上查阅了相关资料后,偶然间发现,官方提供的gzip包是可以被正常编译的,只是在配置好后,进行make的时候libpngconf.h有错误,这个错误也很简单,只需要把定义中出现换行的代码变成不换行即可。为了文章,我牺牲一下,找个临时目录,再次编译libpng。
libpng的官方地址:http://www.libpng.org/pub/png/libpng.html
libpng的下载链接:https://download.sourceforge.net/libpng/libpng-1.6.39.tar.gz
cd /e/workspace/libpng-1.6.39/
./configure --prefix=e:/workspace/libpng-1.6.39/build --enable-shared --enable-static
make clean
make -j8
make install
#拷贝libpng的目录内容到mingw的根目录
启动编译:
使用tar.gz包遇到的错误:pnglibconf.h:206:54: error: expected identifier or '(' before '-' token
我们去pnglibconf.h的206行看看问题:
我们看到代码被莫名其妙换行了,好了,找到问题,fixed it。
修复后的代码,如下图:
编译顺利
编译后的成果:
拷贝整个build内的内容到mingw64的根目录即可。注意,拷贝好后,需要重启一下mingw的窗口。
懒人直达链接libpng成果包: https://download.csdn.net/download/DeleteElf/87910669