windows编译ffmpeg,并开启png的编解码器

废话不多说了,先上下载链接

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编译ffmpeg,并开启png的编解码器_第1张图片

环境变量配置好后,使用命令测试是否功能正常:

 windows编译ffmpeg,并开启png的编解码器_第2张图片

需要注意的是因为windows平台默认没有libpng.dll,默认打包的ffmpeg并没有png的编码器和解码器,所以我们编译好ffmpeg后,如果想要导入或者导出png格式,则会出现以下错误:

windows编译ffmpeg,并开启png的编解码器_第3张图片
 

 接下来,我们开始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文件内已经说明了,自己查看一下。

windows编译ffmpeg,并开启png的编解码器_第4张图片

总体来说编译zlib比较顺利,差不多一次就过了,接下来的libpng比较头疼问题比较多。

首先就是官方的下载链接是有问题的,官方提供了zip和gzip包,zip包是有问题的,会碰到一个一个错误 ,options.awk:bad line (10): com

windows编译ffmpeg,并开启png的编解码器_第5张图片

 遇到这个问题,我一开始以为安装了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的根目录

启动编译:

windows编译ffmpeg,并开启png的编解码器_第6张图片

 使用tar.gz包遇到的错误:pnglibconf.h:206:54: error: expected identifier or '(' before '-' token

windows编译ffmpeg,并开启png的编解码器_第7张图片

我们去pnglibconf.h的206行看看问题:

 windows编译ffmpeg,并开启png的编解码器_第8张图片

 我们看到代码被莫名其妙换行了,好了,找到问题,fixed it。

修复后的代码,如下图:

windows编译ffmpeg,并开启png的编解码器_第9张图片

 编译顺利

windows编译ffmpeg,并开启png的编解码器_第10张图片

编译后的成果:

windows编译ffmpeg,并开启png的编解码器_第11张图片​ 

拷贝整个build内的内容到mingw64的根目录即可。注意,拷贝好后,需要重启一下mingw的窗口。

懒人直达链接libpng成果包: https://download.csdn.net/download/DeleteElf/87910669

你可能感兴趣的:(c++,ffmpeg,windows,zlib,libpng)