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標識! 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章