此文章转载自:http://blog.csdn.net/fm0517/article/details/44700005
本文主要记录在64位Windows 7下,编译64位ffmpeg的过程。
1.资源准备
(1). MSYS http://sourceforge.net/projects/mingwbuilds/files/external-binary-packages/
(2). MinGW-w64 http://www.drangon.org/mingw/
(3). SDL http://www.libsdl.org/download-1.2.php
(4). x264 http://www.videolan.org/developers/x264.html
(5). FFmpeg http://www.ffmpeg.org/download.html
MinGW-w64中已经包含Yasm,因此不需要额外准备Yasm。
本文章指导得非常详细,本应是非常顺利的。但我仍然为编译64位ffmpeg耽误了很久,现在总结一下经验教训:
经验:在编译SDL的时候,我直接使用了1.2.5的版本,省去了很多麻烦;
教训:在编译ffmpeg时,我直接去原文链接的官网下载了2.6.1版本,结果总是出现下面的错误:
LD libavcodec/avcodec-56.dll
gcc.exe: error: libavcod: No such file or directory
后来才发现官网上写了这么一段话:”1.2.12 was released on 2015-02-12. It is the latest stable FFmpeg release from the 1.2 release branch“。原来1.2.12也是最新才发布的。后来用了这个版本完全没有问题了。
2.软件安装
(1). MinGW+Msys安装
下载MSYS,解压到E:/ffmpeg64/msys目录。
下载MinGW-w64,解到E:/ffmpeg64/msys/mingw64目录。
启动msys.bat,打开类似于Linux的终端,并导入mingw64的环境变量。
1 2 3 |
|
(2). SDL安装
下载SDL1.2.14,解压到E:/ffmpeg64/SDL-1.2.14目录。
进入SDL-1.2.14目录,依次执行:
1 2 3 4 5 |
|
编译过程中,出现如下错误:
查看SDL_dx5video.c源代码,如下图所示,可以看出启用预定义NONAMELESSUNION,则会引用u1、u2的结构,出现上述错误。
解决方法是去除预定义NONAMELESSUNION,具体代码修改参考:http://hg.libsdl.org/SDL/rev/eada7e321df6
另一种简便的解决方法是更换SDL库,换成SDL-1.2.15或SDL-2.0.3。由于ffplay.c主要是利用SDL-1.2的接口实现,若使用SDL-2.0.3,则需要修改ffplay.c的源代码,因此,本文利用SDL-1.2.15重新编译,生成SDL库,安装过程和安装SDL-1.2.14一样。
完成编译过程,但在安装(make install)出现如下错误,提示“系统找不到指定的文件”,但是/bin/install和sdl-config都是存在。
查询相关资料后,发现出错的原因可能是终端在解释路径出错,如:http://mingw-users.1079350.n2.nabble.com/Problem-with-ranlib-while-running-make-install-for-SDL-td3282130.html%E3%80%82%E5%BD%93MinGW+Msys%E5%92%8CCygmin%E5%90%8C%E6%97%B6%E5%AD%98%E5%9C%A8%E6%97%B6%EF%BC%8C%E4%BC%9A%E5%87%BA%E7%8E%B0%E8%B7%AF%E5%BE%84%E5%86%B2%E7%AA%81%E7%9A%84%E9%97%AE%E9%A2%98%EF%BC%8C%E5%9C%A8Cygmin%E4%B8%AD%EF%BC%8C%E6%A0%B9%E7%9B%AE%E5%BD%95"/“被解释为当前目录的根目录,即”E:/",Cygmin会将”/bin/install"解释为"E:/install",因而出现“系统找不到指定的文件”的错误。
解决方法:修改Makefile文件,重新设置install的路径。
(3). x264安装
下载x264,解压到E:/ffmpeg64/x264目录下。
进入x264目录,依次执行:
1 2 3 4 5 |
|
(4). FFmpeg安装
下载FFmpeg1.2,解压到E:/ffmpeg64/ffmpeg1.2
进入ffmpeg目录,依次执行:
1 2 3 4 5 |
|
–extra-cflags用于指定头文件路径,–extrac-ldflags用于指定库文件路径。
注意:一定要指定SDL库和x264库的头文件和库文件路径。
(5). 验证安装
验证生成ffmpeg工具是否可执行,利用ffplay播放视频文件,查看是否可以正常播放。\
验证生成的动态库和可执行程序是否是64位,利用dumpbin查看动态库和可执行程序的属性信息。