本站首页    管理页面    写新日志    退出


«September 2025»
123456
78910111213
14151617181920
21222324252627
282930


公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:1304
评论数量:2242
留言数量:5
访问次数:7619757
建立时间:2006年5月29日




[视频处理]FFmpeg 笔记整理
软件技术

lhwork 发表于 2007/2/6 10:45:35

让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。大功告成,编译后的文件可单独执行,没有对动态库的依赖。


阅读全文(10901) | 回复(1) | 编辑 | 精华
 


回复:FFmpeg 笔记整理
软件技术

qq(游客)发表评论于2007/11/22 11:55:48

拍摄时间:11月19日 拍摄地点:杭州狮虎桥路 拍摄者:YOYO


个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


» 1 »

发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.047 second(s), page refreshed 144785660 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号