科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网服务器频道Linux下转换工具mencoder应用

Linux下转换工具mencoder应用

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

办公室有台Linux机器,24小时开机,而且配置不低(P4-3.0E),比我现在用的CY4-2.4GHZ强多了,听说过Linux下的mencoder, 一直想试试.最近试了一下将rmvb的电视剧转为mpeg2和xvid,这样转的目的是想刻成盘在我的BBK影碟机上放,效果还不错,速度也很快。

来源:CP整理 2008年10月6日

关键字: 格式转换 Mencoder Linux

  • 评论
  • 分享微博
  • 分享邮件

  办公室有台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 ${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标识!

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章