windows下编译ffmpeg

http://blog.csdn.net/wtxidian/archive/2007/07/07/1682118.aspx

 

本文的内容几乎全部来自于FFmpeg on Windows,但是由于国内的网络封锁,很难访问这个域名下的内容,因此我一方面按照我自己的理解和实践做了翻译,另一方面也是为了能提供一个方便的参考方法。

注:

  1. 对于compile和build这两个词,本文统一的使用编译这个词,根据上下文读者应能区分语义上的差别。
        本文的目的是提供一切与FFmpeg在Windows下的相关帮助。它最初是一个针对用MSys+MinGW系统编译的手把手的教程,现在也增加了如何在你的项目中链接FFmpeg所产生的库(C++,C#)。   
          我们不讨论Cygwin,因为它的工作方式基本上与Unix系统相一致。 开始之前,首先要明确以下几点:

    1. 由于MSVC++并不严格的遵循C标准,因此FFmpeg不能使用MSVC++来编译,而且将来也不会支持。所以整个编译过程必须使用MSys+MinGW系统来完成。
    2. 如果你选择编译动态链接库(dll),这些库将和其他的动态链接库一样在使用上没什么差别。你可以使用MSVC++来链接这些库进入到你的程序,只有这种情况下MSVC++是被支持的。
          介绍本指南是十分冗长的。如果你已经以前曾有过编译开源软件的经验,你可以尝试读一下 这篇。它要简短的多,只需要一些小的微调就能正常工作。
           但是 如果你遇到了任何问题,在你向ffmpeg的邮件列表报告错误时请先 仔细的通读本文,它是非常直观的,不少地方的细节甚至可能过于详细了。我们试图涵盖一切可能出错的地方,如果你精确的遵照文中的方法,你不会在Windows环境下的FFmpeg上有任何问题。 尽你的努力去解决你所遇到的问题,绝大多数的FFmpeg开发人员不使用Windows,所以他们帮不了你什么。

          预备这里的内容可能和本文没有什么关系,但是我不想留下任何可能出错的地方。对于绝大多数人来说,这一部分可以跳过。 你需要一个解压的工具软件支持“*.tar.gz”和“*.tar.bz2”文件。你将需要把这些压缩包解压缩到指定的目录下。如果你已经有这样的程序了,并且知道如何解压到特定目录下,请阅读 准备MSys+MinGW系统。 这里我将演示如何使用7-Zip或WinRAR来解压缩。推荐使用7-Zip,因为它是开源且免费的。
        准备MSys+MinGW系统获取最新的MSys+MinGW系统。注意以下几个包的版本要求:
        • 不要使用2.0.4的bash,这个是有缺陷的,2.05b的bash用来编译FFmpeg没有问题,但是更推荐3.1版本。
        • 使用msys-1.0.dll-SNAP-1.0.11-2006.04.23
        • 不要使用binutils-2.15.91-20040904-1,它无法正确的链接。
              如果你已经安装配置完毕,那么请阅读下一部分 用SVN方式获取FFmpeg,否则的话请依次执行下面的步骤。
                用SVN方式获取FFmpeg如果你已经知道如何获取FFmpeg的源代码,那么请阅读下一部分 编译。 由于FFmpeg的源代码存放在SVN仓库里,你必须使用命令行程序或是图形界面程序来访问。我个人推荐TortoiseSVN,因为它和Windows资源管理器结合的非常棒,所以我只介绍使用 TortoiseSVN的方法。 编译
              链接
                编译FFplay你必须事先安装了 SDL-devel
                1. 解压该软件包。
                2. lib下的所有文件复制到C:/msys/mingw/lib
                3. include下的所有文件复制到C:/msys/mingw/include
                4. bin下的i386-mingw32msvc-sdl-config复制到C:/msys/mingw/bin,并重命名为sdl-config
                5. bin下的SDL.dll复制到C:/msys/mingw/bin


                  SDL.dll必须在ffplay.exe德PATH路径中,程序才能启动。在MSys环境下mingw/bin在PATH环境变量中,因此运行ffplay.exe不会有问题。但如果你想在MSys外部运行,则应SDL.dll复制到和ffplay.exe同一个目录下。

                  现在你可以按照前面的方式静态或动态重新编译FFmpeg,在运行configure脚本后,它将正确的找到SDL和ffplay。

                  对第三方库的支持

                      你必须 完全的理解编译动态库部分。

                       在向FFmpeg的二进制文件中添加其他的库时,你必须首先考虑库是以静态还是动态的链接到FFmpeg中。不要把这个和FFmpeg本身是静态/动态链接库搞混,你可以把静态的将第三方库链接到FFmpeg中,但是FFmpeg的库本身是动态加载的dll库。

                      考虑这种情况:你想要更换xvidcore却不希望重新编译FFmpeg,那你就应该把xvidcore编译成动态链接库。

                      其次你要考虑的是这些第三方库被安装到MSys系统中的什么位置上。

                       对于绝大多数的是库,如果你把它们安装到缺省路径,你就得向FFmpeg的configure脚本传递额外的参数,这样才能在编译的时候找到这些库。

                      如果你把这些库安装到gcc的缺省 includelib路径下,就不需要额外指定这些参数了。如果你希望把动态库和静态库分开保存,那就不得不指定路径。这样的路径被称为你所安装的库的 prefix。 如果你把库安装在了非gcc的缺省寻找路径,你必须向FFmpeg的 configure脚本传递这些路径信息。

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

                  类似这样:

                  ./configure --enable-memalign-hack --enable-mp3lame  -–extra-ldflags=-L/usr/local/lib  --extra-cflags=-I/usr/local/include

                  在MSys下gcc的缺省路径是 /mingw另外,如果你把这些库的dll安装后,确保你的应用程序能在PATH环境变量中找到相应的dll。 我将展示下面这些库的安装:

                   来源:http://blog.csdn.net/jonfei/archive/2007/03/21/1536530.aspx

                   

                   


                  as4自带相应的rpm包,你可以安装一下如下rpm包
                  libvorbis, libvorbis-devel,libogg, libogg-devel
                  4.支持xvid x264,现在最流行的两种高质量的压缩格式
                  xvid的编译安装
                  wget http://downloads.xvid.org/downloads/xvidcore-1.1.0.tar.gz
                  tar zvxf xvidcore-1.1.0.tar.gz
                  ./configure --prefix=/usr
                  make
                  make install
                  x264的获取同样是采用svn方式,看来svn取代cvs不远了
                  svn co svn://svn.videolan.org/x264/trunk x264
                  cd x264
                  ./configure --prefix=/usr --enable-shared
                  make
                  make install
                  5.AC3和dts编码的支持
                  as4系统似乎已经支持ac3编码,编译的时候只要加--enable-a52 --enable-gpl参数就行
                  libdts编译参数
                  ./configure --prefix=/usr
                  make
                  make install
                  6.mpg4 aac格式支持,由于服务器还针对手机用户服务,所以,类似aac,mpg4铃声格式的支持,我们也得做。这里我们安装faad2和faac就行
                  下载请到http://www.audiocoding.com/modules/mydownloads/
                  FAAD2的编译
                  cd faad2
                  autoreconf -vif
                  ./configure --prefix=/usr --with-mp4v2 --enable-shared
                  make
                  make install
                  faac的编译
                  cd faac
                  chmod +x bootstrap
                  ./bootstrap
                  ./configure --prefix=/usr --with-mp4v2 --enable-shared
                  make
                  make install
                  7.支持3gp格式,这也是现在好多手机支持的格式,因为手机用户是我们的主要用户,所以也得支持编译
                  编译的时候加上--enable-amr_nb --enable-amr_wb参数就行,根据编译系统的提示,所以我们得下载一些编译3gp所需得文件。
                  wget http://www.3gpp.org/ftp/Specs/archive/26_series/26.204/26204-510.zip
                  解压以后把里面的文件都拷贝到libavcodec/amrwb_float
                  wget http://www.3gpp.org/ftp/Specs/archive/26_series/26.104/26104-510.zip
                  解压以后把里面的文件都拷贝到libavcodec/amr_float
                  好了,基本ffmpeg支持的格式,我们基本都做好前期准备了,下面是ffmpeg的编译
                  ./configure --prefix=/usr --enable-gpl --enable-shared --enable-mp3lame --enable-amr_nb --enable-amr_wb --enable-amr_if2 --enable-libogg --enable-vorbis --enable-xvid --enable-a52 --enable-a52bin --enable-faadbin --enable-dts --enable-pp --enable-faad --enable-faac --enable-x264 --enable-pthreads --disable-ffserver --disable-ffplay
                  make
                  make install
                  补充1:
                  关于3gp的编译,如果大家要编译--enable-amr_nb-fixed,那就不能跟--enable-amr_nb同时编译,我不大清楚这两者到底有什么区别,似乎fixed是修正版,管他呢,编译的方法:
                  wget http://www.3gpp.org/ftp/Specs/archive/26_series/26.073/26073-510.zip
                  解压以后把里面的文件都拷贝到libavcodec/amr目录下
                  修改libavcodec/amr/makefile 找到CFLAGS = -Wall -pedantic-errors -I. $(CFLAGS_$(MODE)) -D$(VAD) 换成CFLAGS = -Wall -I. $(CFLAGS_$(MODE)) -D$(VAD) -DMMS_IO
                  整体编译参数就是
                  ./configure --prefix=/usr --enable-gpl --enable-shared --enable-mp3lame --enable-amr_nb-fixed --enable-amr_wb --enable-amr_if2 --enable-libogg --enable-vorbis --enable-xvid --enable-a52 --enable-a52bin --enable-dts --enable-pp --enable-faad --enable-faadbin --enable-faac --enable-x264 --enable-pthreads --disable-ffserver --disable-ffplay
                  make
                  make install

                  ./configure --prefix=/usr --enable-gpl --enable-shared --enable-mp3lame  --enable-xvid --enable-a52 --enable-a52bin  --enable-pp  --enable-pthreads --disable-ffserver --disable-ffplay --disable-mmx
                  ok,一个强大的ffmpeg编译好了,不过目前管方的ffmpeg还不支持wma9和rmvb,不过网上有很多解决方法,大家去自己找找。
                  1.安装完成以后,使用如下命令测试:生成图片文件
                  ffmpeg -an -y -t 0:0:0.001 -i test.flv -f image2 test%d.jpg
                  生成flv文件
                  2.ffmpeg -i test.mpg -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 test.flv

                  • 0
                    点赞
                  • 0
                    收藏
                    觉得还不错? 一键收藏
                  • 1
                    评论

                  “相关推荐”对你有帮助么?

                  • 非常没帮助
                  • 没帮助
                  • 一般
                  • 有帮助
                  • 非常有帮助
                  提交
                  评论 1
                  添加红包

                  请填写红包祝福语或标题

                  红包个数最小为10个

                  红包金额最低5元

                  当前余额3.43前往充值 >
                  需支付:10.00
                  成就一亿技术人!
                  领取后你会自动成为博主和红包主的粉丝 规则
                  hope_wisdom
                  发出的红包
                  实付
                  使用余额支付
                  点击重新获取
                  扫码支付
                  钱包余额 0

                  抵扣说明:

                  1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
                  2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

                  余额充值