Linux下转换工具mencoder应用

Linux下转换工具mencoder应用
我在单位有三台机器,24小时开机,而且配置不低(P4-3.0E),闲着也是闲着,早想利用起来,听说过Linux下的mencoder, 一直想试试.最近试了一下将rmvb的电视剧转为mpeg2和xvid,这样转的目的是想刻成盘在我的BBK影碟机上放,效果还不错,速度也很快.转之前在网上搜了一下,有关Linux下用mencoder的文章很少.所以把我做的过程写出来,与同好交流.

安装mencoder
mencoder是和mplayer一起的,安装起来比较麻烦,可以到下面的网站下载编译好的rpm包:
http://www.mplayerhq.hu/homepage/design7/news.html
但如果想要能输出mp3音频和xvid视频,还是要下源码包自己编译,事先还要下载lame mp3的库和xvid库,需要的库有:
lame-libs-devel-3.96.1-2
lame-libs-3.96.1-2
xvidcore-devel-1.0.2-1
xvidcore-static-1.0.2-1
xvidcore-1.0.2-1
到网上找到相应的rpm包,然后用rpm -i 安装就行了.
安装好这些库之后,把mplayer的源码包解压,然后运行./configure,会自动根据你的系统情况进行配置,加上mp3和xvid支持.然后执行make进行编译.我编译时很顺利.
另外还要下载mplayer的解码codecs, 也是在上面那个网站下载,我下的是那个2005.4.12更新的all,10多兆字节,下载后解压到/usr/lib/codecs目录下.这个包里是些.dll文件.acm文件还有.so文件,有了这些codecs,目前流行的影音格式基本上都能读了.

用mencoder将rmvb转为mpeg2和xvid
我目前只用mencoder做了rmvb到mpg和avi的转换,它还能做很多事.
我转的电视剧rmvb的影音编码是:
视频 : 139 Mb, 453 Kbps, 23.0 fps, 清晰度: 512*412 (4:3), RV40 = RealVideo 9
音频 : 13.55 Mb, 44 Kbps, 22050 Hz, 2 声道, 0x0 = RealAudio 8,cook-29


将rmvb转为mp2音频mpeg2video视频的mpg文件:

mencoder 01.rmvb -oac lavc -lavcopts acodec=mp2:abitrate=64 -ovc lavc -lavcopts vcodec=mpeg2video:vbitrate=600:vpass=1 -ofps 24000/1001 -of mpeg -o 01.mpg

将rmvb转为mp3音频xvid视频的avi文件:
mencoder 01.rmvb -oac mp3lame -lameopts preset=64 -ovc xvid -xvidencopts bitrate=600 -of avi -o 01.avi

-oac 指定用哪个音频编码库
-ovc 指定用哪个视频编码库
-xxxopts 指定相应的选项参数


由于rmvb文件有个压片组的头,转之前用ER编辑器切掉了前20秒,可能是这个原因,凡是转成mp3音频的文件,开始时的几分钟声音与画面有些不同步;用mp2音频则无问题.
转出的mpg2文件与小日本转的效果差不多,我看不出区别;40多分钟的一集转完约11分钟,用小日本转大约1小时(跑mencoder的机器是P4E-3.0GHZ, 跑小日本的机器是CY4-2.4GHZ); 转成xvid编码的速度稍微慢些,约13分钟.


我用mencoder的目的是把rm, rmvb (real) 转成 mpeg, 用的是 libavcodec , 只要mplayer能读的文件通常都能转。通常的参数是这样的:
mencoder 输入文件.rmvb -o 输出文件.mpg -oac lavc -ovc lavc {详细参数}

上面的lavc就是制定压制声音和影像的codec是使用libavcodec,至于{详细参数}就要根据要压的是dvd, vcd或者svcd而选。

为了选参数方便,根据 mencoder(mplayer) 的手册
http://www.mplayerhq.hu/DOCS/HTML/en/menc-feat-vcd-dvd.html
我把里面的那个表格的内容换了一下位置,然后把相应的参数加到了表格里面,这样要压mpg的时候,只要根据需要的格式查这个表,然后从左到右的添加参速,然后在加上底下extra的部分就可以了。mencoder的手册还提供了几个高级的选项,但这些高级选项只在转dvd的时候才有用。

压mpg的时候,需要注意的参数是:
Format, Resolution, FPS, Sample Rate, Aspect, V. Codec, V. Bitrate, A. Codec, A. Bitrate,
例如 pal 的 svcd:
Format Resolution FPS Sample Rate, Aspect V. Codec V. Bitrate A. Codec A. Bitrate,
PAL SVCD 576x576 25 44100 Hz 4:3 MPEG-2 2600 kbps MP2 384 kbps

而meoncder控制这些参数的选项分别是
Format Resolution FPS Sample Rate Aspect V. Codec V. Bitrate A. Codec A. Bitrate
-of -mpegopts -vf scale -ofps -srate -af {-lavcopts aspect:vcodec:vbitrate:acodec:abitrate}

因为这几个参数Aspect V. Codec V. Bitrate A. Codec A. Bitrate,都是一个选项-lavcopts控制的,所以我把mencoder手册里面提供的表格换了一下位置,让他们能组在一起,查找方便。

这里是个做pal svcd的例子,根据表格从左到右的添加参数,最后在加上extra的buffer控制参数就可以了
mencoder 01.rmvb -o 01.mpg -oac lavc -ovc lavc -of mpeg -mpegotps format=xvcd -vf scale=576:576,harddup -ofps 25 -srate 44100 -af lavcresample=44100 -lavcopts aspect=4/3:vcodec=mpeg2video:vbitrate=980:acdec=mp2:abitrate=192:keyint=15:vrc_buf_size=917:vrc_maxrate=2500

里面要注意的是scale=576:576用:和aspect=4/3用的是/.

看起来复杂,其实这些参数只在试验的时候要调整,当你找到适合参数的时候,alias 一下就可以了。

我的mencder参数表:
http://rendercow.com/mencoder.xls

现在的问题是怎么读取rm头文件,确定rm的码率等信息,转换的时候选低码率(vcd标准1150 video和audio224好象有点大)降低转换后文件的大小。


增加x264编码支持
增加x264编码支持费了些周折,因为mplayer1.0pre7有bug,编译到一个ve_x264.c的文件时出错,
要下最新的源码编译,我下的是2005-07-28版. 还要下x264的源码生成libx264.a,
我从doom9网站下的最新的r281版:X264_rev281_src.7z
编译x264时需要nasm汇编编译器,如果系统没装,下个rpm包安装即可。

首先安装编译x264, 解压后运行sh ./configure, 然后make, 编译完成后执行:
make install
x264的安装就完成了!

然后编译安装mplayer,
步骤跟以前一样,执行configure会自动判断加上x264支持,再执行make编译就成了.

试了将一个rmvb转成x264视频mp2音频,耗时40分钟完成了转换,时间比其它编码长的多.

测试脚本:


#!/bin/sh

MP2_64="-oac lavc -lavcopts acodec=mp2:abitrate=64"

MPG2="-ovc lavc -lavcopts vcodec=mpeg2video:vbitrate=500 -of avi"

XVID="-ovc xvid -xvidencopts bitrate=500 -of avi"

MPG4="-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=500 -of avi"

X264="-ovc x264 -x264encopts bitrate=500 -of avi"



time mencoder 01.rmvb ${MP2_64} ${MPG2} -o mpg2.avi

time mencoder 01.rmvb ${MP2_64} ${MPG4} -o mpg4.avi

time mencoder 01.rmvb ${MP2_64} ${XVID} -o xvid.avi

time mencoder 01.rmvb ${MP2_64} ${X264} -o x264.avi





运行时间(user时间):
mpg2 8m13.586s
mpg4 8m23.287s
xvid 16m41.351s
x264 40m37.554s 




到现在已经转了不少rmvb, 下面谈一些问题.
1.有些rmvb解码有问题.例如我转<好想好想谈恋爱>,有好几集转出来图像是一条条的绿色线条,用mplayer放有同样问题.在windows下则一切正常.

2. 有些rmvb不能按原有的分辨率转. 例如<逆水寒>,原来的分辨率是512x384, 但执行mencoder后,显示:
VDec: vo config request - 352 x 288 (preferred csp: Planar I420)
然后就按352x288的分辨率转了.用mplayer放有同样的提示信息,也是只能用352x288的分辨率.
感觉在linux下的real解码器还是有bug

3.音频用mp3的话,转出来的文件在我的BBK993影碟机上放会有很多问题,例如没有声音,声话不同步等等. 视频用xvid解码的话,在影碟机上放大多数情况下是好的,但偶尔会出现画面瞬时剧烈抖动的现象;在计算机上放则正常.到目前为止,音频用mp2视频用mpeg2video的组合还没出现过问题,美中不足的是在相同码率下总感觉mpeg2的画质比xvid的差点. 



修改mencoder使输出的mpeg4影片能在BBK影碟机上播放。

用mencoder的lavc解码器可以压mpeg4的视频,但刻盘后却无法在我的BBK影碟机上播放,经分析发现mencoder压出的mpeg4视频,其表示视频流的字串为FMP4, 而影碟机只认xvid和divx的,
经试验如果将文件头中的FMP4改为DIVX,DX50或XVID,则在影碟机上播放正常。

修改源码:
在libmpcodecs/ve_lavc.c文件中找到下面两行:
else if (!strcasecmp(lavc_param_vcodec, "mpeg4"))
mux_v->bih->biCompression = mmioFOURCC('F', 'M', 'P', '4');

将FMP4改为DIVX,重新编译即可。 



今天从微软的网站下了个高清wm9短片:The_Magic_of_Flight_720.wmv
分别压缩成rmvb,xvid,mpeg4,x264, mpeg2, 重采样成640x352, 试了300-500kbs的低码率,
大至比较了一下,主要是影片开始的一段,主要结论:

1. x264的画质不如xvid和mpeg4.
2. xvid和mpeg4画质差不多,我看不出区别
3. rmvb比xvid和mpeg4强一点.
4. mpeg2的最差.


结论1出乎意料,也有可能是我参数选的不合适,都用的是缺省参数.


测试脚本:
#!/bin/sh
MP2_64="-oac lavc -lavcopts acodec=mp2:abitrate=64"
MPG2="-ovc lavc -lavcopts vcodec=mpeg2video:vbitrate=300 -of mpeg"
XVID="-ovc xvid -xvidencopts bitrate=300 -of avi"
MPG4="-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=300 -of avi"
X264="-ovc x264 -x264encopts bitrate=300 -of avi"

time menc The_Magic_of_Flight_720.wmv ${MP2_64} ${XVID} -vf scale=640:352 -ofps 30 -o xvid.avi
time menc The_Magic_of_Flight_720.wmv ${MP2_64} ${X264} -vf scale=640:352 -ofps 30 -o x264t.avi
time menc The_Magic_of_Flight_720.wmv ${MP2_64} ${MPG4} -vf scale=640:352 -ofps 30 -o mpg4.avi
time menc The_Magic_of_Flight_720.wmv ${MP2_64} ${MPG2} -vf scale=640:352 -ofps 30 -o mpg2.avi



运行时间:
xvid 1m56.731s
x264 3m15.652s
mpg4 1m6.293s
mpg2 1m5.601s



补充:
后来发现在命令行中加-ffourcc DIVX 选项就改变输出文件头里的fourcc标识! 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章