发博文
正文 字体大小:

Linux下转换工具mencoder应用[转]

(2010-01-21 16:45:40)
标签:

杂谈

分类: 茶余饭后
http://server.zdnet.com.cn/server/2008/1006/1158327.shtml

----------------------
办公室有台Linux机器,24小时开机,而且配置不低(P4-3.0E),比我现在用的CY4-2.4GHZ强多了,闲着也是闲着,早想利用起来,听说过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 $ $ -o mpg2.avi
  time mencoder 01.rmvb $ $ -o mpg4.avi
  time mencoder 01.rmvb $ $ -o xvid.avi
  time mencoder 01.rmvb $ $ -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 $ $ -vf scale=640:352 -ofps 30 -o xvid.avi
  time menc The_Magic_of_Flight_720.wmv $ $ -vf scale=640:352 -ofps 30 -o x264t.avi
  time menc The_Magic_of_Flight_720.wmv $ $ -vf scale=640:352 -ofps 30 -o mpg4.avi
  time menc The_Magic_of_Flight_720.wmv $ $ -vf scale=640:352 -ofps 30 -o mpg2.avi
  运行时间:
  xvid 1m56.731s
  x264 3m15.652s
  mpg4 1m6.293s
  mpg2 1m5.601s
  补充:
  后来发现在命令行中加-ffourcc DIVX 选项就改变输出文件头里的fourcc标识!

阅读 评论 收藏 转载 打印举报
已投稿到:
  • 评论加载中,请稍候...

       

    验证码: 请点击后输入验证码 收听验证码

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 不良信息反馈 电话:4006900000 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有