Friday, April 11, 2008

rm/rmvb轉AVI: 非懶人轉檔教學

零. 前言

覺得rm/rmvb檔案很難搞,不方便撥放嗎?由於ReaVideo/RealAudio是Real公司的封閉格式,在許多方面限制多多,想在手機或支援AVI檔案的DVD player上播放,是相對困難。本篇教學以最基層的軟體搭配,以解構的方式說明轉檔過程,將rm/rmvb檔轉換為常見的「Xvid視訊+MP3音源之AVI檔案」。

之所以會稱為非懶人轉檔教學,是因為已經存有不少可將rm/rmvb轉為AVI的轉檔軟體,如winmenc,讓使用者click幾下就能做轉檔,但這類軟體本身不是encoder,而是frontend GUI,其僅是提供方便的使用者介面,對於底層真正進行轉檔的工具軟體做控制。

一. 採用工具:

1. Xvid:

http://www.free-codecs.com/download/Koepi_XviD.htm

跟競爭對手Divx比起來可說平分秋色,甚至表現更好,是常見的MPEG-4視訊編碼之一,更是Open Source編碼,好處多多。

2. LAME ACM MP3 Codec(LAME):

http://www.free-codecs.com/download/LAME_ACM_Codec.htm

現存最受廣泛運用的Open Source MP3編碼器。

3. Real Alternative(RA):

http://www.free-codecs.com/download/Real_Alternative.htm

用以做RealVideo與RealAudio之解碼工作。

4. Media Player Classic(MPC):

http://www.free-codecs.com/download/Media_Player_Classic.htm

自由度相當高的DirectShow-Based播放軟體,跟Real Alternative搭配再好不過了。配合其他DirectShow濾鏡,更可撥放各式視訊/音訊檔案,且其能提供相當多關於影片的資訊,在轉檔時相當有用,基本上微軟的Windows Media Player可以扔了。

5. VirtualDub MPEG-2(VD):

http://home.comcast.net/~fcchandler/stable/index.html

非常好用的視訊編輯器,可以搭配相當多的視訊/音訊編碼器,本身亦支援不少處理影像用的濾鏡。要轉檔、要內嵌字幕,你一定不會缺乏這軟體。

6. AviSynth(AS):

http://sourceforge.net/project/showfiles.php?group_id=57023

非常強大的視訊處理軟體,但是以script檔案方式運作,使用上稍嫌麻煩。功能很多,雖在本教學上所佔份量不多,但卻是負責相當重要的環節,詳見後文。

二. 前置作業:


如果你已經裝了K-Lite這一類的codec pack,基本上你可能已經有了: Xvid、RA與MPC。若沒有請至以上的網址抓取。RA本身也包含了MPC,安裝時請不要重複安裝。AS目前最新版是2.5.7,抓檔時別抓錯了。在轉檔前請先確定各軟體已正常安裝,確定MPC可以「藉由RA」播放rm/rmvb檔案。這點可以在MPC中播放rm/rmvb檔案時以下列方式確認:

此外也請先確認要轉檔的rm/rmvb檔案之fps是多少,這很重要,可以從MPC之File=>Properties選單得知:

三. 轉檔步驟:

1. Avisynth frameserving:

請先以Windows之Notepad建立一個「純文字檔」在其內鍵入一行AS的指令:

DirectShowSource("R:\[I.G&CASO][Lucky_Star][GB][15].rmvb",
fps=23.976,convertfps=true) 

要一整行打完,別換行。DirectShowSource可讓AS呼叫RA解碼器將要轉檔的rm/rmvb檔案解碼,還原出該檔案的視訊/音訊,再將其「餵給」其他軟體,如編碼軟體,或是播放軟體。

R:\[I.G&CASO][Lucky_Star][GB][15].rmvb當然就是我要轉檔的檔案完整途徑。(別張揚....XD)請盡量用英文檔名,不要有奇怪的字元或簡體字之類的。

fps=23.976當然就是指定本影片應有的frames per second,而很多rm/rmvb檔案常常是變動式的fps,故convertfps=true可確保經由AS手續後,解碼出來的影像可以保有恆定的fps值,以免產生影音不同步現象。

(你問我在MPC中看的明明是23.98,為何這裡要打23.976?因為MPC把小數三位四捨五入了。至於為何正確值是23.976?我只能說,這是經驗談。 XD)

將本文字檔以ANSI編碼儲存為:檔名.avs,在此以test.avs為例。存檔後,以MPC開啟test.av(神奇吧)確定AS正常運作:

2. VirtualDub前置作業:

確保test.avs可用MPC播放後,用VD開啟test.avs,應該會看到類似畫面:

之所以會有兩個畫面,是因為一個是「濾鏡處理前」,另一個則是「濾鏡處理後」。不過既然我們不對影像做修編,故這無任何影響。請自選單中選擇Video=>fast recompress,因為我們只是轉檔,不上濾鏡。再選擇Audio=>Full processing mode,等下要把音訊轉成MP3。

3. VirtualDub轉檔:

接下來就是正式的轉檔工作,先從簡單的音訊開始。選擇Audio=>Compression,再選擇LAME MP3,可從右邊看到可用的MP3格式:

要用128、160或192kbps請自行決定,但建議選用CBR(Constant Bitrate),對於AVI的相容性會比較好。視訊方面,選擇Video=>Compression,再選擇Xvid MPEG-4 Codec,按Configure:


基本上我建議初學者不要更動任何Xvid的設定值,因為這非常有搞頭,故在此採用Single Pass之單次壓縮,並指定以Target quantizer方式運算。quantizer越小,檔案越大,畫質越好,反之則否,請自行斟酌。通常4就可以達到很好的效果了,畢竟破壞性轉檔只有越轉越爛的啦。

若想準確的控制檔案大小,那就得採用Two Pass了,但這牽扯到其他設定,於此不多作說明。指定了視訊及音訊的壓縮方式之後,就可正式開始轉檔。從VD選單選擇File=>Save as AVI,指定AVI檔案名稱,便可開始。VD會告知你轉檔進度:

要是你把Show input video與Show output video勾選了,卻沒看到任何影像畫面,請不要擔心,因為在這Video是以Fast recompress處理。若是以Full processing mode作業,才會顯示出影像畫面,不過我們沒對影片掛上任何濾鏡,故沒有任何影響。轉檔理論上會耗去幾十分鐘至上小時不等,雙核CPU使用者這時可以開WoW打發時間什麼的。

四. 成果

轉檔完成,我們把一個108MB的rmvb影片,變成147MB的Xvid+MP3的AVI檔案了。(還變大咧 囧)有圖有真相:

五. 參考文獻:

1. Avisynth DirectShowSource: http://avisynth.org/DirectShowSource

關於DirectShowSource指令的參數說明。

2. Doom9 Xvid Guide: http://www.doom9.org/index.html?/xvid-vdub-11.htm

影音編碼討論大站Doom9對於Xvid之內部參數設定解說。

2 comments:

zinklink said...

你好,我在新增一純文字文件輸入AS指令後,把.avs檔案在MPC中開啟那出現此警告訊息 http://tinyurl.com/3korr3 看起來似乎是有video 的decoder找不到不同聲音可以正常的播放,換了其它rmvb檔也有同樣的問題,不知道是哪還步驟有誤?我已知看個過你CCCP的教學文重新安裝了codec。 http://www.funp.net/329071這有我的CCCP的log和avs檔。

能發現到你的網站真的很不錯,探討影片等一些技術,這些東西我老早就想知道了,不過總是獲得的資料不太齊全,這下終於得到解答了,太高興了!

cation234@ptt.cc said...

你這問題比較像是Avisynth沒有安裝好 請試著重新安裝看看 並到FFDSHow Video Decoder Configuration的Codecs那邊 看看Avisynth檔案是否有指定交由Avisynth處理