一. 前言
FFmpeg是一个基于Linux开发的开源项目,其源代码和Windows下最常见的Visual Studio提供的C/C++编译器不兼容,因此它不支持MSVC++编译,需要在Windows下配置一个类似Linux的编译环境进行编译。
编译生成动态链接库dll,这些库将和其他的动态链接库一样在使用上没什么差别。可以使用MSVC++来链接这些库到其他的程序,也就是说,Windows + Visual Studio平台下的软件开发。
如果没有时间了解以下编译的过程,可直接下载以下链接的压缩包:该压缩包包含了编译好的FFmpeg库和可执行文件,且支持H.264编解码:
http://download.csdn.net/detail/liyuefeilong/9289455
注意:根据自身需求编译并配置FFmpeg,如欲使编译出来的FFmpeg支持对mp3格式的编解码,则需要下载mp3lame;欲使编译出来的FFmpeg支持对Xvid格式的编解码,则需要下载Xvid…更多需求可参考文章:http://blog.chinaunix.net/uid-20718335-id-2980793.html
二. 准备工作
首先需要准备编译过程所需的软件工具和源代码:
1.MinGW+MSYS:一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,可以通过配置让FFmpeg编译时产生Windows下调用dll对应的lib。为了简化烦琐的配置过程,直接下载MinGW-MSYS Bundle软件,按照软件默认的安装向导安装程序并配置安装路径,很快便可以把软件安装好。
下载链接:http://sourceforge.net/projects/mingwbundle/
2.Yasm:编译FFmpeg里面的汇编代码所需要的汇编编译器。
下载链接:http://yasm.tortall.net/releases/Release1.3.0.html
3.SDL(Simple DirectMedia Layer):是一套开放源代码的跨平台多媒体开发库,如果需要用到ffplay,则在编译FFmpeg前必须编译并配置SDL,否则无法生成ffplay,但是在本机尝试配置SDL并完成FFmpeg的编译后,生成的ffmpeg.exe、ffplay.exe和 ffprobe.exe在运行时无法正常输出信息,网上的说法是。
下载链接:http://www.libsdl.org/download-2.0.php
4.X264:为了让编译出来的FFmpeg支持对x264格式的编解码,需要先下载x264包。
下载链接:http://www.videolan.org/developers/x264.html
5.FFmpeg:直接下载源代码即可,我使用的版本为ffmpeg-2.8.2。FFmpeg的发行版本很多,各种版本可以在以下链接找到。
下载链接:http://ffmpeg.org/download.html
以上所有软件工具可直接通过以下链接下载:其中各个工具使用的不一定是最新版本,若需要使用最新版本,请自行下载软件和源代码。
三. 编译过程
1.MinGW+MSYS安装
MinGW-MSYS Bundle软件的安装过程十分简单,只需按照默认的安装向导安装程序并配置安装路径即可,我选择的安装路径是:C:\MinGW和C:\msys\1.0。
安装完成后,需要配置msys.bat,用于启动类似于Linux环境的终端。(安装完成后,我的msys.bat的路径是:C:\Program Files (x86)\MinGW-MSYS),然后,以编辑模式打开文件,在首行(@echo off之后)添加以下命令,其中的路径取决于Visual Studio的安装路径:
call “C:/Program Files (x86)/Microsoft Visual Studio 11.0/VC/bin/vcvars32.bat”
2.YASM
在http://yasm.tortall.net/Download.html上下载yasm的exe文件(根据自己的操作系统选择是Win32.exe还Win64.exe),下载完后重命名为yasm.exe,放到MinGW安装目录的bin目录下。
若没有执行这一步,则在后面编译FFmpeg的过程中可能会提示找不到yasm命令。这是由于FFmpeg里面的汇编加速部分的代码需要用到它,如果禁用汇编加速,会影响编译出来的编解码库的运行效率。
3.x264编译
FFmpeg本身仅支持H.264视频的解码,因此如果需要用到编码,需要下载x264源码包进行编译,根据上述提到的链接下载文件last_x264.tar.bz2,并接压到:C:\FFmpeg\目录下,然后,运行C:\Program Files (x86)\MinGW-MSYS以启动MinGW32,使用以下指令将工作路径切换到x264目录:C:\FFmpeg\ x264-snapshot-20151119-2245
$ cd /c
$ cd FFmpeg
$ cd x264-snapshot-20151119-2245
进入该目录后,再依次执行以下命令:
$ ./configure --enable-shared --disable-asm
$ make
$ make install
运行无误的话,结果如下:
编译结果在:C:\MinGW\msys\1.0\local 目录下可找到。
4.拷贝H.264编译结果
为了后续的编译工作,需要从C:\msys\1.0\local 到 D:\MinGW,分别把bin中的内容拷贝到 bin中;同理include拷贝到 include中;lib拷贝到 lib中。当然,该拷贝过程你可以不做,只要在编译的时候把路径指到C:\msys\1.0\local里面。
5.编译FFmpeg
使用configure命令配置FFmpeg的编译参数,根据需要组件的不同,输入的指令也会不同,也可以使用指令禁用一些功能。我的配置参数如下:
./configure --enable-shared --enable-gpl –enable-libx264 –enable-static
不出问题的话,会生成config文件,如下图所示。
最后一步,输入make进行编译,这需要一段时间。编译完成后,输入make install进行部署。
编译步骤完成,生成的文件在路径:C:\msys\1.0\local目录下。生成的动态库在:C:\msys\1.0\local\bin目录下;链接库文件在: C:\msys\1.0\local\lib目录下。其中,后缀为.dll.a为动态库需要的链接文件,.a为纯静态库(不依赖于dll);修改扩展名为.lib就可以用了。需要的头文件在路径:C:\msys\1.0\local目录下。
在运行ffmpeg.exe或ffprobe.exe时,可能会出现无法启动程序的错误,因为计算机中丢失pthreadGC2.dll和libiconv-2.dll等信息,只需要在C:\MinGW\bin下找到对应的dll,拷贝到当前目录,或放到系统目录C:\WINDOWS\system32(64位系统为:C:\Windows\syswow64)中即可。以下是运行ffmpeg.exe时的截图:
四.参考链接
http://blog.sina.com.cn/s/blog_513f4e8401011yuq.html
http://www.cnblogs.com/lidabo/p/3967473.html
http://blog.csdn.net/finewind/article/details/38854517