ffmpeg用法整理

来源:互联网 发布:java文件上传实现原理 编辑:程序博客网 时间:2024/04/29 20:20

让ffmpeg支持mp4格式

    如果让ffmpeg解码mpeg4格式的媒体文件,报错信息告诉我们,某个audio通道的mp4a格式不被支持,为支持这个mp4a格式的声音解码,需要支持AAC,到AAC网站上找,发现需要装两个东西,faad2和faac。ffmpeg对faad和faac的支持和对3gpp的支持不同,类似对lamemp3的支持,下面说下流程。
    1。到http://prdownloads.sourceforge.net/faac去下载faad2和faac,这两个东西都在这个页面上,我下载的版本是faad2-2.0.tar.gz和faac-1.24.tar.gz。
    2。编译faad2,解压到合适的地方后,先运行./bootstrap,然后运行. /configure,configure时可以指定参数,也可以不指定,我总是习惯指定自己的--prefix参数,这样干净。make以前把 faad2主目录下的Makefile修改下,找到有“rpm:    Makefile”的一行,把它下面三行前面的所有空格都改成一个TAB符,如果不改,编译会报错。然后make,然后make install。
    3。编译faac,解压到合适的地方后,也是先./bootstrap,然后./configure,然后make,然后make install。这次Makefile是正确的,所以比较容易。
    4。在faad和faac的--prefix指定的目录下,把它们include目录下的.h都copy 到/usr/include下去,把它们lib目录下的lib开头的文件都copy到/usr/lib目录下去。如果前面编译faad和faac时没有特别指定--prefix,应该是不需要这步copy的。这里注意,如果只copy libfaad.a和libfaac.a两个静态库文件,后面编译出来的ffmpeg就对它们没有动态库依赖关系,可以独立运行。
    5。编译ffmpeg,在configure时加上--enable-amr_nb --enable-faad --enable-faac参数。编译后没有动态库的依赖关系,ffmpeg可独立运行。
    在windows环境下面还没有搞定,编译faad2还有问题,前面编译lame需要用MinGW,现在编译faac又说要用cygwin,automake的aclocal又总不对,等有时间了再搞,太麻烦了,。
 

让ffmpeg支持3gpp格式

    ffmpeg缺省不支持3gpp格式,config时加--enable-amr_nb就是支持这个格式的选项,但是它会告诉你,需要去下载3gpp的包才能继续。下面说一下整个过程,比较简单。
    1。到3gpp网站去下载源码包,一般到http://www.3gpp.org/ftp/Specs目录下面去找,好像很不好找,很多目录都是空的,我就根据configure时的提示,直接下载http://www.3gpp.org/ftp/Specs/archive/26_series/26.104/26104-510.zip得了。
    2。在ffmpeg的libavcodec目录下面,建立目录amr_float目录,然后把3gpp的包中的文件都copy到这个目录下。
    3。对ffmpeg进行configure时加上--enable-amr_nb选项就可以了。
 

如何让ffmpeg支持VC1格式

    微软ASF格式的三个版本,WMV1,WMV2,WMV3分别对应MediaPlayer的版本7,8和 9,所以很多时候会称VC1为WMV3或WMV9,都是它了,有时候在代码里,也能看到称呼它为VC9的。因为微软还没有正式公开这种格式,所以当前对 VC1的支持还很不完善。本文基本是根据Multimedia Mike的一篇博客翻译和完善而来。
    1。首先要下载 SMPTE VC-1 reference decoder,这个组织是要收费的,可以从这里下载免费的。
    2。在ffmpeg目录下的libavcodec目录下面,建立目录libvc1。
    3。将VC1_reference_decoder_release6/decoder/目录中的*.c和*.h文件全部copy到libvc1目录下。
    4。将VC1_reference_decoder_release6/shared/目录中的*.c和*.h文件全部copy到libvc1目录下。
    5。将 libvc1-makefile.txt放到libvc1下的Makefile文件。
    6。将smpte-vc1.c文件放到libavcodec目录下。
    7。修改libavcodec目录下的vc9.c,将文件最后的wmv3_decoder这个AVCodec的structure,用#if 0和#endif包含起来,也就是使它失效了。
    8。修改libavcodec目录下的allcodecs.c,将register_avcodec(&wmv3_decoder)上下的注释去掉,使它发挥作用。
    9。修改libavcodec目录下的Makefile,把OBJS的列表中加入smpte-vc1.o。
    10。修改ffmpeg主目录下的Makefile文件,把-L./libavcodec/libvc1 -lvc1$(BUILDSUF)加入到FFLIBS后面。
    11。进入ffmpeg/libavcodec/libav1,执行make
    12。到ffmpeg主目录下,执行config;make;make install。config时根据实际情况带参数。
 

采用ffmpeg转码制作FLV文件的方法

    采用ffmpeg转码制作FLV文件,和转码成其它媒体类型的重要差别是一定要有lame库支持,因为 FLV的声音编码采用mp3格式,非lame这个东东不行。编译ffmpeg中加入lame库真是一场灾难,特别在windows下,很多参数都不能发挥作用,最后直接手工copy和改一些文件,总算搞定了。赶快记录下来,省得以后忘了。
   1。如果在Windows下编译,第一步当然是下载MinGW和MSYS来装上了。到http://mingw.sourceforge.net/去下载最新版的MinGW-5.0.2.exe和MSYS-1.0.11-2004.04.30-1.exe。
    2。先安装MinGW,直接运行MinGW-5.0.2.exe安装,选择目录,譬如选择D:/MinGW为安装目录。安装时需要选择gcc和make模块,安装文件本身很小,会从网上下载模块来安装。
    3。然后安装MSYS,也是直接运行MSYS-1.0.11-2004.04.30-1.exe安装。安装目录一般选择D:/MinGW/bin/1.0。,安装过程会询问刚才安装MinGW的目录,输入D:/MinGW,其它都回答'Y'就搞定了。如果不清楚,可以看这个图片效果
    4。运行MSYS,桌面上有个图标,双击就运行了,运行结果是一个模拟unix的命令窗口,后面的编译都在这种状态下进行。前面4步在linux下不需要。
    5。到http://lame.sourceforge.net/去下载最新版的lame-3.97b2.tar.gz,copy到你认为合适的地方,解压后进入lame解压出来的目录中。执行
        ./configure --prefix=PREFIX
        make
        make install
    6。就把编译出来的include下的lame目录copy到/usr/include目录下,把lib 下的几个库文件都copy到/usr/lib目录下。这里注意有个变化,如果只copy lib目录下的静态库到/usr/lib下,就是只 copy libmp3lame.a文件,编译出来的ffmpeg最终就不会对libmp3lame的动态库有依赖关系,这是因为编译首先找动态库,动态库没有才找静态库。
        如果不做这个copy,后面编译ffmpeg时无论如何指定参数,都会报错LAME not found,不知道是哪里的bug。
    7。从http://ffmpeg.mplayerhq.hu/取得最新的ffmpeg,现在自由软件都大量采用SVN了,要先装一个SVN,可以去http://tortoisesvn.tigris.org/下载windows版的SVN,去http://subversion.tigris.org/下载linux版的SVN。SVN如何编译安装这里就省略了。
    8。如果在windows下,打开解压后的ffmpeg目录下的Makefile文件,在FFLIBS的那一行后面加上-lmp3lame$(BUILDSUF)。这个也不知道是哪个bug引起的,搞了好长时间才搞出来,郁闷。Linux下不用这样。
    9。编译ffmpeg
        windows下执行
        ./configure --prefix=PREFIX --enable-memalign-hack --enable-mingw32 --enable-mp3lame --enable-gpl
        Linux下执行
        ./configure --prefix=PREFIX --enable-mp3lame --enable-gpl
         然后执行
        make
        make install
    10。大功告成,编译后的文件可单独执行,没有对动态库的依赖。
原创粉丝点击