日期:2014-05-16  浏览次数:20865 次

Ubuntu Linux 下 Ffmpeg 及 Mencoder 安装使用小结

2011年04月26日 下午 7:59 | 作者:littlebat

<iframe id="aswift_0" style="left: 0px; position: absolute; top: 0px;" name="aswift_0" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="300" height="250"></iframe>

?

近段时间在学习?Ffmpeg、Mencoder?音视频转换,大概在 Ubuntu 10.04、Ubuntu 10.10、Ubuntu Natty 测试版上安装和使用过。重点是针对低分辨率的普通手机视频,测试的手机为 Bird V780,主要参数为,视频编码:mpeg4、h263,音频编码:faac、amrnb,容器格式:mp4、3gp,分辨率:176×144;音乐文件格式:mp3 。下面对 Ubuntu Linux 下 Ffmpeg 及 Mencoder 安装使用作个小结。

1、安装:
安装 Ubuntu 软件仓库里的版本是很容易的,用 sudo apt-get install 命令就可以自动安装上。但是官方仓库里面的版本比较陈旧,可能缺失一些功能和存在一些 bug 没有解决,更重要的是,一些需要的编码支持没有被官方版本编译进去,如用于普通手机视频的 faac、amr 音频编码支持等。而且,两个软件官方网站均推荐使用其 svn 或 git 开发版本。所以,下面着重总结编译安装 ffmpeg 和 mencoder。

为了避免可能的冲突,在开始之前,我卸载了仓库版本的相关软件:sudo apt-get remove ffmpeg mencoder mplayer

获取 Ffmpeg 开发版本:git clone git://git.videolan.org/ffmpeg.git ffmpeg
获取 Mplayer 开发版本(包含了 mencoder):svn checkout svn://svn.mplayerhq.hu/mplayer/trunk mplayer

实际上 ./configure 配置 Mplayer 时会自动从 Ffmpeg 的开发库中下载 ffmpeg 最新开发版源码供编译 Mplayer 使用,因为 Mplayer 和 Mencoder 会调用 Ffmpeg 的库。而且,在当前的 Mplayer 编译中,如果没有特别设定,Mplayer 会把 Ffmpeg 的库编译成静态库编入 Mplayer 或 Mencoder 的二进制文件中,使这两个文件达到约14M左右。但是,我为了保险起见,编译 Ffmpeg 时就使用单独下载的源码。

通过事先的了解或在二者源码树下面执行 ./configure –help 得到配置帮助,得到编译额外编码支持库的信息,如:libfaac, libopencore_amrnb 等。你可以据此计划需要安装哪些额外编码库。

然后是根据你的需要安装额外编码库。在 Ubuntu 下,可以用 apt-get 安装那些库:如:

sudo apt-get install libx264-dev libxvidcore-dev libopencore-amrwb-dev \
libopencore-amrnb-dev libfaad-dev libfaac-dev libmp3lame-dev \
libtwolame-dev liba52-0.7.4-dev libcddb2-dev libcdaudio-dev \
libcdio-cdda-dev libvorbis-dev libopenjpeg-dev

但是,在 configure ffmpeg 时,会报告:libx264 version must be >= 0.99
显然是 Ubuntu 中的 libx264 版本低了,那么?git clone git://git.videolan.org/x264.git?得到 x264 的源码再编译安装就行了。

当然,如果 Ubuntu 仓库中的版本不能满足你的需要,你可以选择从源码安装。更多的从源码安装编解码库的信息可以参考 Mplayer 相关文档。

另外,编译 ffplay 需要 libsdl1.2-dev 库:sudo apt-get install libsdl1.2-dev

下面进行 Ffmpeg 的编译安装。经过试验,也许是由于 Ubuntu 中的一个 bug,当存在仓库版本中的 libavutil、libavcodec、libavformat 等库时,编译安装的 ffmpeg 执行失败(比如报错:ffmpeg: relocation error: /opt/ffmpeg20110404/lib/libavfilter.so.1: symbol av_expr_free, version LIBAVUTIL_50 not defined in file libavutil.so.50 with link ti