您的位置:首页 > 其它

Windows系统使用minGW+msys 编译ffmpeg全过程

2013-09-05 17:12 567 查看
看到原作者的一篇文章,写得很详细,转载过来备忘,非常感谢原作者!

原文地址:http://blog.csdn.net/yangshu168/article/details/5204269

前言:

FFmpeg 0.5已经发布快一年了。一直没有在原有的软件中使用。现在要在软件中增加一些对流行格式的支持及修改原有的一些bug. 比如MKV编辑码。原本希望将新版本中的新功能移植到老版本中,毕竟老版本在应用过程中修改了很多地方。但是经过研读新版代码发现新版本的框架结构发生了很大的变化,如果不是编解码专家移植是有很大难度的。所以就先整体编译新版,再将旧版的修改之处移植过来,应该是个不错的选择。

在网上找了很多相关文档,但是在编译过程中还是遇到了一些问题。现将编译过程写下来,希望对研究FFmpeg 的新手有些帮助。专家级的高手就不必看了。呵呵。



一.环境配置

1.下载并安装 MinGW-5.1.4.exe (http://jaist.dl.sourceforge.net/sourceforge/mingw/MinGW-5.1.4.exe),安装时选中 g++, mingw make。建议安装到c:/mingw.

2.下载并安装 MSYS-1.0.11-rc-1.exe (http://jaist.dl.sourceforge.net/sourceforge/mingw/MSYS-1.0.11-rc-1.exe),安装结束时会以命令行方式提示输入MinGW的安装路径,输入c:/MinGW,
msys建议安装到c:/msys, 默认是c:/msys-1.0, 可以手动改为c:/msys。

3.下载gcc-4.3.2-tdm-1-core.zip (http://ftp3.ie.freebsd.org/pub/sourceforge/t/td/tdm-gcc/gcc-4.3.2-tdm-1-core.zip),解压后覆盖到 c:/mingw 安装目录.
minGW-5.1.4 默认安装的版本是3.4.5.



二.下载 ffmpeg 0.5 (http://ffmpeg.mplayerhq.hu/releases/ffmpeg-0.5.tar.bz2)

1.解压后拷贝到c:/msys/home/目录下。 (C:/msys/home/ffmpeg-0.5)

2.用文本编辑器打开源码目录下的 configure (C:/msys/home/ffmpeg-0.5/configure) 文件,搜索两处 pr 全部替换为 print。

3.运行c:/msys.bat,进入c:/msys/home/ffmpeg-0.5源码目录,创建release目录 (mkdir release) 和 debug 目录 (mkdir debug) 目录,视需求编译 release 或 debug 版本:

4.进入c:/msys/home/ffmpeg-0.5/release 目录下执行: ../configure --disable-static --enable-shared --enable-small --enable-memalign-hack --enable-gpl --extra-cflags=-I/local/include --extra-ldflags=-L/local/lib --enable-pthreads

(注:如果出现libavutil/atomic.c:101:2: error: #error "Threading is enabled, but there is no implementation of atomic operations available"错误,在配置的时候加上 --cpu=i686 或者使用mingw64代替Mingw来编译ffmpeg 参考:http://comments.gmane.org/gmane.comp.video.ffmpeg.devel/161098)

5.或进入c:/msys/home/ffmpeg-0.5/debug 目录下执行: ../configure --disable-static --enable-shared --enable-memalign-hack --enable-gpl --extra-cflags=-I/local/include --extra-ldflags=-L/local/lib --enable-debug=3 --disable-optimizations --disable-stripping

6.make

7.make install



注:参数解释

a.--extra-ldflags=-L<prefix>/lib --extra-cflags=-I<prefix>/include

如果你把库安装在了非gcc的缺省寻找路径,你必须向FFmpeg的configure脚本传递这些路径信息。

b.--enable-small

optimize for size

c.--enable-nonfree

Yes, FFmpeg recently changed the --enable-libfaac to require --enable-nonfree due to some inconsisent licensing

declarations in the faac source. You can also workaround this by not enabling AAC in the wizard. They have a

native AAC encoder in progress, but it is not ready and enabled yet.



三.支持x264 (--enable-libx264)

1.下载 x264 原始码(http://www.imagemagick.org/download/delegates/ffmpeg/x264-1024283.tar.bz2) (x264-snapshot-20100115-2245.tar.bz2这个源码编译不过,不知道为什么,有时间仔细研究研究。)

2.解压后拷贝到c:/msys/home/目录下 (c:/msys/home/x264-1024283)

3.进入c:/msys/home/x264-1024283 目录下执行: ./configure --prefix=/usr/local --enable-shared --disable-asm

4.make

5.make install



四.支持xvid (--enable-libxvid)

1.下载 xvid 原始码(http://www.imagemagick.org/download/delegates/ffmpeg/xvidcore-1.2.2.tar.bz2)

2.解压后拷贝到c:/msys/home/目录下 (c:/msys/home/xvidcore)

3.进入c:/msys/home/xvidcore/build/generic 目录下执行: ./configure --prefix=/usr/local --enable-shared

4.make

5.make install



五.支持MP3 (--enable-libmp3lame)

1.下载 MP3 原始码(http://www.imagemagick.org/download/delegates/ffmpeg/lame-398-2.tar.gz)

2.解压后拷贝到c:/msys/home/目录下 (c:/msys/home/lame-398-2)

3.进入c:/msys/home/lame-398-2 目录下执行: ./configure --prefix=/usr/local --enable-shared

4.make

5.make install



六.支持FAAC (--enable-libfaac)

1.下载 FAAC 原始码(http://www.imagemagick.org/download/delegates/ffmpeg/faac-1.28.tar.bz2)

2.解压后拷贝到c:/msys/home/目录下 (c:/msys/home/faac-1.28)

3.进入c:/msys/home/faac-1.28 目录下执行./bootstrap

4../configure --prefix=/usr/local --enable-shared --without-mp4v2

(FAAC 无需编入 mp4 容器支持,封入 mp4 容器的工作由 ffmpeg 负责)

5.make

6.make install



七.支持FAAD (--enable-libfaad)

1.下载 FAAD 原始码(http://www.imagemagick.org/download/delegates/ffmpeg/faad2-2.7.tar.bz2)

2.解压后拷贝到c:/msys/home/目录下 (c:/msys/home/faad2-2.7)

3.进入c:/msys/home/faad2-2.7 目录下执行 autoreconf -vif

注:编译FAAD需要使用autoreconf, 下载msysDTK-1.0.1.exe 安装到c:/msys.

4../configure --prefix=/usr/local --enable-shared --without-mp4v2

5.make

6.make install



八.支持gsm (--enable-libgsm)

1.下载 gsm 原始码(http://www.imagemagick.org/download/delegates/ffmpeg/gsm-1.0.13.tar.gz)

2.解压后拷贝到c:/msys/home/目录下 (c:/msys/home/gsm-1.0-pl13)

3.进入c:/msys/home/gsm-1.0-pl13 目录下执行: ./configure --prefix=/usr/local --enable-shared

4.make

注:make编译出错(make: *** [bin/toast] Error 1), 忽视这个错误,不影响。

5.cp c:/msys/home/gsm-1.0-pl13lib/libgsm.a c:/msys/local/lib

6.cp c:/msys/home/gsm-1.0-pl13lib/inc/gsm.h c:/msys/local/include



九.libamr-nb (--enable-libamr-nb)

1.下载 libamr-nb 原始码(http://ftp.penguin.cz/pub/users/utx/amr/amrnb-7.0.0.2.tar.bz2)

2.解压后拷贝到c:/msys/home/目录下 (C:/msys/home/amrnb-7.0.0.2)

3.下载26104-700.zip (http://www.3gpp.org/ftp/Specs/archive/26_series/26.104/26104-700.zip), 将这个zip包放到c:/msys/home/amrnb-7.0.0.2 目录下面

4.下载unzip-5.51-1-bin.zip (http://downloads.sourceforge.net/gnuwin32/unzip-5.51-1-bin.zip),解压后将unzip.exe到/mingw/bin下。

5.进入c:/msys/home/amrnb-7.0.0.2 目录下执行: ./configure --prefix=/usr/local --enable-shared

6.make

7.make install



十.libamr-wb (--enable-libamr-wb)

1.下载 libamr-wb 原始码(http://ftp.penguin.cz/pub/users/utx/amr/amrwb-7.0.0.3.tar.bz2)

2.解压后拷贝到c:/msys/home/目录下 (C:/msys/home/amrwb-7.0.0.3)

3.下载26204-700.zip (http://www.3gpp.org/ftp/Specs/archive/26_series/26.204/26204-700.zip), 将这个zip包放到c:/msys/home/amrwb-7.0.0.3 目录下面

4.下载unzip-5.51-1-bin.zip (http://downloads.sourceforge.net/gnuwin32/unzip-5.51-1-bin.zip),解压后将unzip.exe到/mingw/bin下。(如果步骤9中做了这个工作,这里就不用做了)

5.进入c:/msys/home/amrwb-7.0.0.3 目录下执行: ./configure --prefix=/usr/local --enable-shared

6.make

7.make install



十一.最后编译ffmpeg 0.5

1.进入c:/msys/home/ffmpeg-0.5/release

2. ../configure --disable-static --enable-shared --enable-small --enable-memalign-hack --enable-gpl --extra-cflags=-I/local/include --extra-ldflags=-L/local/lib --enable-libgsm --enable-libfaac --enable-libfaad --enable-libmp3lame --enable-nonfree --enable-libxvid
--enable-libx264 --enable-libamr-nb --enable-libamr-wb

3.make

4.make install

注: 如果出现“Out of tree builds are impossible with config.h in source dir”错误,是由于之前在ffmpeg下面执行过./configure,生成config.h,解决办法是删除掉此文件

参考http://blog.csdn.net/jwzhangjie/article/details/8731289

十二. 编译出lib 文件

以上方式默认不能编译出 .lib文件。如果希望在vc++调用ffmpeg 库,要用到相应的 .lib 文件。可以用以下方式编译。

1.在msys.bat开头添加一句话:call "C:/Program Files/Microsoft Visual Studio .NET 2003/Vc7/bin/VCVARS32.BAT"

根据自己vc7实际路径修改以上路径。在重复步骤十一。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: