首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

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

2013-11-30 
Ubuntu Linux 下 Ffmpeg 及 Mencoder 安装使用小结2011年04月26日 下午 7:59 | 作者:littlebatiframe id

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 安装那些库:如:

下面配置 mplayer (mencoder):

在编译安装 mplayer 之前,在 Ubuntu 下要安装 libasound2-dev ,否则会因为缺少 alsa 的声音驱动而导致播放没有声音。

经过试验,mplayer 的配置比较自动化,configure 程序会搜索相关编码库文件,如果存在则会自动启用,而不用像 ffmpeg 那样必须像“–enable-libmp3lame”那样明确指定。不过,默认配置选项编译的 mplayer 是静态链接到它自带的 ffmpeg 源码中编译的静态链接库,这导致了 mplayer 或 mencoder 的二进制文件达到了 14M 左右。这可以通过禁用 ffmpeg 静态链接编译(–disable-ffmpeg_a)和告知 ffmpeg 的头文件和库文件位置( –extra-cflags=”-I/opt/ffmpeg20110404/include” –extra-ldflags=”-L/opt/ffmpeg20110404/lib”)来达到动态链接到已经安装完成的 ffmpeg 库文件的目的。同样,我把 mencoder 安装在了非标准目录,下面是我用的配置命令:

另外,如果不需要 ffmpeg 和 mplayer 中的一些组件(如: ffplay, mplayer),可以在 configure 中设定。具体查看: ./configure –help

然后,把 ffmpeg 和 mencoder 的可执行文件路径加入 PATH 环境变量,使用 root 权限执行:

从测试结果可知:
1)、只用 mencoder 转换时,采用 lavc 中 faac (libfaac) 的音频编码 menonly2.sh 比直接采用 faac 音频编码 menonly.sh 快 12 秒;
2)、采用 ffmpeg、mencoder 两步转换的 intermkv2.sh 比只采用 mencoder 的 menonly2.sh 慢 7 秒;
3)、只采用 ffmpeg 转换 ffmpegonly.sh 比只采用 mencoder 的 menonly2.sh 慢 42 秒,比采用 ffmpeg、mencoder 两步转换的 intermkv2.sh 慢 35 秒;
4)、转换中,mencoder 加与未加 harddup 视频滤镜转换时间几乎无差别;
5)、采用 ffmpeg、mencoder 两步转换时,采用 raw 视频中间格式的 interraw2.sh 比采用结果视频中间视频格式的 intermkv2.sh 慢 76 秒;
6)、采用 ffmpeg、mencoder 两步转换时,当采用结果视频中间视频格式,ffmpeg 重新指定视频编码详细参数的 intermkv2.sh 比直接使用 -vcodec copy 的 intermkv3.sh 慢 10 秒,但是直接使用 -vcodec copy 会出现缺失关键帧错误导致定位时花屏。

因为转换视频是用于普通手机播放的低分辨率视频,从转换结果和比特率和直观观看来说看不出明显的质量差别。

初步来看,如果遇到 ffmpeg 无法识别原始文件格式但能编码成目的格式,而 mencoder 无法编码成目的格式但能识别原始文件格式时,使用二者结合转换手机低分辨率视频是可行的。在我进行 rmvb 到 3gp 的转换测试中,这种结合转换比纯粹使用 mencoder 约慢,但还比纯粹使用 ffmpeg 转换时快不少。估计是 ffmpeg 解码 rmvb 文件时的效率没有 mencoder 高的缘故吧。

其它问题

1)、在转换宽银幕电影到手机视频的过程中,为了使画面的主要内容更加清晰,可以先截去两边超宽的部分再进行转换,在 mencoder 中可以使用 crop 视频滤镜处理,例如原始为 640×360 的 16:9 ,要转换成 176×144 的 11:9,可以使用视频滤镜 -vf-add crop=440:360,scale=176:144 达到效果;

2)、在 ffmpeg 中,如果只截取中间一段转换进行转换,将 “-i 原始文件名“ 放在 “-ss 开始时间 -t 持续时间“ 的后面并且加上 “-async 1(避免音画不同步)” 可以避免搜索不需要转换的部分而浪费的大量时间。例如,在我的测试中,E7400 双核电脑上,如果转换一部2个半小时电影中2小时以后的10分钟内容,真正转换的时间只用大约1分钟,而如果把 “-i 原始文件名“ 放在 “-ss 开始时间 -t 持续时间“ 的前面,则要增加大约10分钟的定位搜索时间!详见:question about “Buffering several frames is not supported. Please consume all available frames before adding a new one.”

3)、因为多次的测试,上面的命令不一定是同一次的安装,例如有时安装在 /usr/local 下面,有时是安装在 /opt/ 下面等;而且,版本也不一定是同一版本,但命令应该是至少可以在最近的版本中通用的(2011年4月左右)。

结论:
像这种非经济驱动的开源工具,也许不一定像一些闭源的商业工具自成体系的较为完整的功能,但可以通过脚本把各种各有所长的开源命令行工具结合在一起,从而完成任务。以上内容和观点仅供参考,欢迎交流。

分类:Linux,?开源,?程序?| 标签:ffmpeg,?Linux,?mencoder,?ubuntu,?使用,?安装,?小结?|?发表评论(5 条评论)

版权所有。转载时必须以链接形式注明作者和原始出处及本声明。

热点排行