发新话题
打印

ffmpeg编译大全

ffmpeg编译大全

ffmpeg编译大全 
□17pod 发表于 2006-8-24 23:53:00
随首互联网视频共享的网站逐步火爆,成熟的fms2+ffmpeg形式的在线录播体系也逐渐浮出水面。
fms负责在线录制,播放,ffmpeg则在后台处理上传的资源转换成一定的格式。
为了让ffmpeg支持的格式尽量多,所以特把我的编译笔记分享一下
环境:redhat as4
1。首先获取ffmpeg
很多人找不到怎么下载,其实之前ffmpeg可以通过cvs下载,不过最近他已经换成了更加强大的svn
如何使用SVN我这里不再介绍,网上还有大量的安装和使用的文章可以借鉴,这里简单罗列几个SVN辅助的软件:
SubVersion,从 http://subversion.tigris.org/ 下载,支持linux,我们这里就装这个
TortoiseSVN,从 http://tortoisesvn.tigris.org/下载,是很不错的SVN客户端程序,为windows外壳程序集成到windows资源管理器和文件管理系统的Subversion客户端,用起来很方便,commit动作变得就像Winrar右键压缩一样方便。

ok,那我们先装subversion,记住最好之前装过apr和apr-util,在apache.org网站能下到
wget http://subversion.tigris.org/downloads/subversion-1.3.2.tar.gz
tar zvxf subversion-1.3.2.tar.gz
cd subversion-1.3.2
./configure --with-apr=/usr/local/apr-httpd --with-apr-util=/usr/local/apr-util-httpd/
make
make install

到此,我们就可以通过svn命令获取最新的ffmpeg了
svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg
你会发现在你所在的目录,自动出现一个ffmpeg的目录,就是你下载的源代码。

我们还不能这么快编译ffmpeg,应该如果要让ffmpeg支持更多格式的转换,还需做一些前期工作

2.支持mp3,linux当然是lame,下载解压
cd lame-3.96.1
./configure --enable-shared --prefix=/usr
这里推荐尽量装在/usr下,默认是装在/usr/local下。这样ffmpeg编译都能顺利的找到库文件

3.支持Ogg Vorbis:
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/ar ... 6.204/26204-510.zip
解压以后把里面的文件都拷贝到libavcodec/amrwb_float
wget http://www.3gpp.org/ftp/Specs/ar ... 6.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/ar ... 6.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
补充2:
有朋友说在当在cpu是x86的情况下,不能编译过去,我这里没发生过这情况,如果你真编译不过去,可以试着加上cpu=cpu
ok,一个强大的ffmpeg编译好了,不过目前官方的ffmpeg还不支持WMV9和RMVB,不过网上有很多解决方法,大家去自己找找。

TOP

再转一文:
redhat下ffmpeg+mencoder安装笔记
2007-04-18  12:27
最近由于工作涉及到转换视频格式,研究了一下相关软件。如果只需要转到flv,装mencoder和codecs就可以了,如果还需要截图或者其他功能,就要装ffmpeg和相关解码包。ffmpeg支持的格式没有前者多,但是速度比较快,参数也很简单。另外我们还需要转换到rm,找了很久都没找到基于前述两种软件的解决方法。在对转换速度不具特殊需求的情况下,我使用Helix Producer forlinux来解决该问题,这同时也是real的人所建议的。

在Ubuntu下测试的时候,只需要一句话就装完了。

sudo apt-get install w32codecs mplayer ffmpeg

下面记录了redhat as4下的安装过程。



安装apache的runtime模块apr和apr-util,这样才能安装svn:

http://apr.apache.org/
先装apr,再装apr-util的时候要用 --with-apr=apr源码路径



安装subversion,这样才能装接下来的软件。
wget
http://subversion.tigris.org/downloads/subversion-1.3.2.tar.gz
tar zvxf subversion-1.3.2.tar.gz
cd subversion-1.3.2
./configure --with-apr=apr的源码路径 --with-apr-util=apr-util的源码路径




安装faad2包:
http://www.audiocoding.com/modules/mydownloads/
解压后如果configure出错,需要如下修改


echo > plugins/Makefile.am


echo > plugins/xmms/src/Makefile.am
sed -i '/E_B/d' configure.in
autoreconf -vif
./configure --prefix=/usr --with-mp4v2 --enable-shared


安装faac:
下载地址同上,如果bootstrap出错,需要如下修改(因为Unix格式问题)
sed -i 's/\r//' bootstrap
sed -i 's/\r//' configure.in

./bootstrap
./configure --prefix=/usr --with-mp4v2 --enable-shared




安装mp3lame:
http://lame.sourceforge.net/download.php

./configure --enable-shared --prefix=/usr



安装xvid,ffmpeg貌似带了的,实际是个wrap
wget
http://downloads.xvid.org/downloads/xvidcore-1.1.0.tar.gz
tar zvxf xvidcore-1.1.0.tar.gz
./configure --prefix=/usr




安装x264
svn co svn://svn.videolan.org/x264/trunk x264

./configure --prefix=/usr --enable-shared




安装liba52:
http://liba52.sourceforge.net/

安装libdts:
http://download.chinaunix.net/download/0006000/5785.shtml


由于项目不需要支持3gp,没有装3gp的解码包,见参考链接。


都装齐了就可以编译ffmpeg:
svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg

./configure --prefix=/usr --enable-gpl --enable-shared--enable-libmp3lame --enable-libogg --enable-libvorbis --enable-xvid--enable-liba52 --enable-liba52bin --enable-libdts --enable-pp--enable-libfaad --enable-libfaadbin --enable-libfaac --enable-x264--enable-pthreads --disable-ffserver --disable-ffplay



使用的时候很方便,一般来说:

ffmpeg -i 源文件 -o 目标文件 [-codec 编码方式] [-b 码率]就可以了,码率默认200k,编码默认为目标扩展名类型。



下面安装mplayer/mencoder:
svn checkout svn://svn.mplayerhq.hu/mplayer/trunk mplayer


安装mencoder需要的codecs:
http://www1.mplayerhq.hu/MPlayer/releases/codecs/
(现在最新的是mplayer-codecs-20061022-1.i386.rpm)安装到usr/local/lib/codecs




安装Helix DNA Producer

https://helix-producer.helixcommunity.org/downloads



转flv的参数:
mencoder zhou.rm -o ps2.flv -of lavf -oac mp3lame -lameoptsabr:br=32:mode=3 -ovc lavc -lavcoptsvcodec=flv:vbitrate=150:mbd=2:mv0:trell:v4mv:cbp:last_pred=3 -srate22050 -lavfopts i_certify_that_my_video_stream_does_not_use_b_frames-vf scale=350:-3 -sws 2




由于producer for Linux只认识uncompress的视频文件,所以转rm要先中转:
mencoder ps2.mpeg -ovc raw -oac pcm -o ps2.avi
producer -i ps2.avi -o ps2.rm

TOP

如果你在转换mp4、3gp等一些文件时出现以下提示,转换不了,
FAAD library: cannot resolve faacDecGetErrorMessage in libfaad.so.0!

怎么办?
解决办法如下:
引用:
That means ffmpeg could not load faacDecGetErrorMessage symbol from libfaad.so.0 library. First you should comfirm that libfaad.so.0 library is located in the path which are defined by the LD_LIBRARY_PATH environment variable.  Second, this problem may caused by the changes of faad2 upgrading. You can edit this file libavcodec/faad.c:

line 222:

    do { static const char* n = “faacDec” #a; \

Modify it as below:

    do { static const char* n = “NeAACDec” #a; \
出处在:
http://blog.kingtch.com/2007/04/ ... sage-in-ffmpeg.html
翻译一下:
ffmpeg不能正确加载libfaad.so.0库,首先请设置正确LD_LIBRARY_PATH环境,让它能够找到这个库文件(我是用export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib:/usr/local/lib:/opt/lib:/lib 设置的),
然后,请这个问题可能是faad2做了升级等改动,你可以编辑libavcodec/faad.c这个文件(现在是libavcodec/libfaad.c ):
第222行(现在是221行):

    do { static const char* n = “faacDec” #a; \

编辑这一行为:

    do { static const char* n = “NeAACDec” #a; \
好了,重新编译ffmpeg吧,你可以解决这个问题了!

TOP

今天编译了一下,遇到一个问题,
运行ffmpeg时,出现提示:
error while loading shared libraries: /usr/lib/libavutil.so.49: cannot restore segment prot after reloc: Permission denied
我是root啊,说我没权限,上网查了一下,用这个命令:
chcon -t texrel_shlib_t /usr/lib/libavutil.so.49
然后再运行ffmpeg看看,如果还有其它的库文件出现同样提示,如法炮制,最终能成功运行ffmpeg了。
长风万里送秋雁,对此可以酣高楼

TOP

发新话题