Monday, April 28, 2008

從VOB檔案抽音軌並轉為MP3

零. 前言

本文是為了回應在之前的文章「如何將DVD中的音軌轉成MP3?」當中,有站友提出的問題:「如果拿到的是別人已經轉成的VOB檔案,而非DVD影片,那仍可以把音源分離嗎?」

首先咱們先面對一個事實,由於VOB檔案是DVD影片中的標準封裝格式,如果你有某部片子的VOB檔,卻沒有該片子的DVD,那麼有非常大的機會是:你用很歪道的方式拿到該影片。是吧,是吧?(鼻孔瞪)所以,面對歪道的情況,在這就提出歪道的方法解決。

在台灣的三區DVD中,通常你可以看到以下三類聲音格式:

  1. 雙聲道或5.1聲道的的Dolby Digital,也就是AC-3。
  2. 雙聲道的LPCM,也就是未壓縮的Linear Pulse Code Modulation。
  3. 5.1聲道的DTS。
這三類音源在本教學文中的處理方式基本上一模一樣,僅差在為了餵5.1聲道檔案給MP3編碼器時,需要將5.1聲道轉成雙聲道的額外步驟而已。

一. 使用工具

1.1 DGMPGDec: http://neuron2.net/dgmpgdec/dgmpgdec.html

DGMPGDec原本是設計用來精確截取MPEG1/2影像,再餵給Avisynth處理影片用的程式,但神奇的是,它具有抓音源的功能,是本文歪道的重點。截稿前DGMPGDec最新版是1.49。

1.2 foobar2000: http://www.foobar2000.org

1.3 foobar2000的AC-3解碼器: http://kode54.foobar2000.org/foo_ac3.zip

1.4 foobar2000的DTS解碼器: http://www.saunalahti.fi/~cse/foobar2000/foo_input_dts.zip

1.5 LAME MP3編碼器: http://www.free-codecs.com/download/Lame_Encoder.htm

foobar2000雖然是音樂播放器,但轉檔功能一點也不差。外掛的解碼器可以讓foobar2000認得AC-3與DTS格式,再利用LAME轉成MP3。至於LPCM,foobar2000可以直接辨識。

二. 前置作業

LAME.exe需放置到foobar2000的主程式根目錄下,而foo_ac3.dllfoo_input_dts.dll則放到foobar2000的components資料夾。DGMPGDec直接解壓縮即可。

三. 作業流程

本次的示範教學片依舊是吸血鬼獵人D,台灣第三區正版片:

而示範檔案則是用DVD Decryptor擷取出來的VOB檔案,其中同時包含了雙聲道的AC-3與5.1聲道DTS音軌,方便同時說明。該VOB檔是影片最後的Cast段落:

  • 用工具軟體Insurgent可以檢驗出,本VOB檔案同時包含了雙聲道的AC-3與5.1聲道的DTS。雖然畫面上DTS的部分資訊被截掉了,Channel數沒有顯現出來。Insurgent是CCCP編碼包團隊附贈的小程式,可以讓你充分了解媒體檔案的內容資訊,非常好用。
在確定VOB檔的內容後,啟動DGMPGDec,雖然它的執行檔叫做DGIndex.exe。該軟體介面相當簡潔,我連圖都懶得抓了,直接從File->Open找尋要抽音軌的VOB檔案,並於File List按OK確定。

接下來是正式抽音軌的動作:什麼設定都不用做,直接選File->Demux Audio Only,DGIndex就開始抓音軌了:

  • DGIndex的Information視窗顯示的本VOB檔案中正在受操作的音軌數及格式。Video部分當然是空空如也,因為我們是Demux Audio Only。
擷取完成後,來到VOB檔所在資料夾一瞧,DGIndex確實幫我們抓出了AC-3與DTS檔案:

再把這兩個檔案扔到foobar2000裡頭,裝了AC-3與DTS decoder的foobar2000應該可以如以下兩張圖般,正確辨識出AC-3與DTS檔案:

  • AC-3與DTS檔案的聲道數在此皆正確顯示出來。由foobar2000左邊的頻譜分析圖也可以看出來,播放雙聲道AC-3檔案時,分析圖只有兩個;播放5.1聲道的DTS時,則有六個。AC-3在此被辨識為ATSC A/52,因為這才是Dolby Digital的正式標準名稱。
這時要轉存MP3就很簡單了,分別在要轉碼的檔案上按滑鼠右鍵,選Convert->Convert to...再選MP3(LAME),選音質,就可以輸出MP3了。在此請注意!!當轉碼5.1聲道的DTS檔案,或是AC-3時,務必啟動foobar2000的DSP,啟動Convert 5.1 to stereo,因為LAME MP3編碼器不認得5.1聲道格式。正確來說,目前沒有一個MP3編碼器可以使用5.1聲道。

以上的說明雖是針對雙聲道的AC-3與5.1的DTS,若你遭遇的雙聲道的LPCM與5.1的AC-3,則步驟完全一樣,請自行舉一反三。

四. 作業成果


最後依然是有MP3有真相:按我下載。在此咱們發現了一個驚人的事實:在吸血鬼獵人D這張DVD中,對應AC-3與DTS的片尾曲,竟然不一樣~

Friday, April 25, 2008

DivX、Xvid與MPEG-4

DivXXvid應屬目前網路上流通的影片中,最常被使用的兩種編碼之一。至於這兩種編碼的關係到底是什麼?簡單來說,這兩種編碼都遵循並實作了MPEG-4 Part 2的規範。MPEG-4是MPEG機構繼MPEG-2之後所制定的標準,總計有23個章節,Part 2屬於「Visual」部分。其他如Part 3制定的AAC音訊編碼、Part 14制定的MP4封裝容器(誤和MPEG-4本身搞混),以及制定目前最新H.264/AVC編碼的Part 10等等。

由於DivX與Xvid遵循的是同一套標準,所以理論上它們是同樣的東西。但MPEG-4 Part 2標準本身相當寬鬆,所以明確的說,DivX跟Xvid對於MPEG-4 Part 2的關係是「相同標準,不同實作」。這可以用MP3音樂做說明:不論是MP3核心開發者Fraunhofer-Gesellschaft的L3enc編碼器,或是Open Source的LAME MP3編碼器,乃至於微軟替Windows Media Player內建的MP3編碼器以及蘋果電腦iTunes的MP3編碼器,通通都是針對MPEG-1 Layer 3標準的實作,所以這些編碼器壓製出來的音樂,都是符合標準的MP3檔案。但由於是「不同的實作」,因此不同編碼器壓製出來的音樂在同樣的設定之下,例如:128kbps constant bit-rate,依舊會有些微差距。這就是為何許多真正MP3的愛用者會選擇LAME MP3編碼器的原因,因為LAME壓出來的MP3音質,硬是比其他MP3編碼器來得好。(iTunes再見,Windows Media Player再見)

至於為何會存有DivX與Xivd這兩種有點像又不太像的東西?關於DivX與Xvid的恩恩怨怨,相信你Google一下就可以看到不少東西了,在此簡單帶過:當年DivX的部分核心成員背叛了Open Source界,瓢竊了許多人的辛苦,成立DivX商業公司圖利。這使得其他成員出走,開發Xvid對抗DivX,繼續遵循Open Source的傳統,將程式原始碼完全公開。這正是為何Xvid選擇了跟DivX相反的名字,而事實證明,Xvid確實比DivX來得好,不論在畫質與穩定度皆然。DivX在5.2.0版本之後,甚至跟自身以往的版本發生了相容性問題。所以呢,愛備份DVD的人,請愛用Open Source界的Xvid,保證讓你得到比DivX畫質更高的影片。

至於另一個遵循MPEG-4 Part 2標準的3ivx編碼,雖然在網路上可以看到少部分的影片流通,不過還是不敵DivX與Xvid,在此就不多說明了。燒錄軟體公司Nero針對自家軟體,提供使用者可以備份影片以及轉碼用的Nero Digital,實際上也遵循了MPEG-4 Part 2(以及Part 3的AAC音訊)。所以你要是懂一些程式設計,並把MPEG-4 Part 2標準讀通的話,也可以自創一套編碼,叫做…CativX? XD

Thursday, April 17, 2008

影音封裝格式: (下)常見格式簡介

基本上針對各個封裝格式都可以長篇大論一番,在此僅對電腦平台上常見的格式做簡單說明:

1. AVI(Audio Video Interleave):

拜微軟之賜,這絕對是目前流通率最高的格式。為了對抗蘋果電腦的Quicktime影音架構,微軟於1992年提出了Videos for Windows架構(VfW),以外掛的方式替自家的Windows 3.1增加影音功能,並於Windows 95後完全整合成作業系統的一部分,AVI便是VfW中制定的封裝格式。

基本上AVI格式沒有強制限定包在其中的編碼為何,所以AVI可以包含早期的CinepakIntel Indeo等影片,乃至於微軟自家的Windows Media Video與正紅的DivX、Xvid影像編碼,音訊方面從未壓縮的PCM到MP3、Dolby Digial 5.1音軌(AC3)與Windows Media Audio皆可。但這不代表AVI什麼都能吃,在壓縮上會用到b-frameH.264/AVC視訊編碼就受限於AVI先天不支援b-frame而無法完整發揮能力,雖然你依舊可以藉由小小的hack將b-frame塞到AVI裡頭,但就是比不上放在原生支援b-frame的MP4中來得漂亮。而AVI對於由Xiph.org基金會力抗MP3而發展的Vorbis音訊的支援度,更是問題多多。

雖然AVI很老了,但正因歷史悠久,所以在各平台上都有良好的支援,幾乎沒有哪台電腦是不能播放、剪輯AVI。而在2000年左右崛起的DivX、Xvid等符合MPEG-4 Part 2的影像編碼,更讓AVI再度活絡起來,許多家電公司為了提高DVD播放器的銷售量,也發展了可以支援DivX格式之AVI檔案的DVD播放器,省去了得將影片轉碼成標準DVD用MPEG-2編碼的麻煩。相信AVI的壽命還是很長的。

2. MP4

MP4是MPEG-4 Part 14標準制定的封裝格式,主要用來包裝各種遵循MPEG-4標準的影音編碼,包括DivX、Xvid、3ivx與H.264/AVC等視訊,音訊則以MPEG-4 Part 3規範的AAC(Advanced Audio Coding)為主。話雖如此,MP4依舊可以封裝MPEG-1、MPEG-2等較早的格式,不論視訊或音訊皆然,因此理論上你可以把MP3音樂包到MP4容器裡頭。

所以在這產生一個很多人常常搞混的重點:MP4不是MP3的後繼者,AAC才是。MP3檔案僅是單純的音樂資訊,本身沒有封裝的功能,MP4則單純是封裝格式,它可以包著AAC音訊,更可以包著MP3,雖然這麼做很無聊,不過我們還是展示一下這件無聊事:

  • Media Player Classic正在播放一個用MP4包起來的MP3音樂。畫面下方可看到正在解析MP4格式的Haali Media Splitter,平時播放單純的MP3時這玩意絕對不會跑出來;在它左方的則是解碼MP4中音訊的ffdshow audio decoder。由ffdshow提供的資訊頁可看出它處理的是MP3音樂。這可不是單純將MP3檔名改成MP4就好,而是把MP3音樂扔到YAMB程式中包裝而成的。
還是不相信嗎?就下載回去看看吧。

說到MP4就不得不提一下蘋果電腦的Quicktime架構。Quicktime制定了MOV封裝格式,在Quicktime 6以前,蘋果電腦一直走著自己的路線,但MPEG-4標準在1998年左右制定時,蘋果電腦漸漸朝MPEG-4靠攏,並將MOV格式文件公開,使MOV成為MPEG-4認可的封裝格式,並演化成MP4,成為業界中通用的標準。所以現在相當多的手機與可攜式多媒體播放器,都可以認得並播放MP4檔案,這也是為何蘋果電腦的iTunes播放軟體與iPod隨身聽大力支援MP4。

3. Ogg(好暴力):

MP3音樂雖然用途廣泛,但實際上任何一家生產與MP3相關軟硬體的公司,都需要支付MP3權利金,特別是付費給MP3的主要發展者:德國的Fraunhofer Gesellschaft機構。為了力抗MP3近乎壟斷數位音樂市場的局面,完全走開放原始碼的Xiph.org基金會於1998年開始發展Vorbis壓縮格式,並同時設計了Ogg格式以封裝Vorbis。此外,Vorbis亦可封裝Xiph.org自行發展的Theora視訊,以及針對壓縮人聲做最佳化的Speex編碼,而在2003年被Xiph.org納入體系的無損音訊壓縮FLAC,也可以包裝在Ogg裡頭。但在網路上最常見的,仍屬包裝Vorbis音訊的Ogg,所以Ogg跟Vorbis時常被互換著稱呼,但這實際上是不正確的,至少也該稱它為Ogg Vorbis,這是Xiph.org的官方稱法。

由於Ogg Vorbis格式具有完全的開放性,使用上不需支付任何權利金,所以被很多電腦遊戲採用,也有少數的數位隨身聽產品支援。些許Linux作業系統在預設上更是「不支援」MP3播放、壓製,反而對Ogg Vorbis的支援極好。而由於Ogg格式可在網路上採用串流方式播放,使用foobar2000+oddcast+Icecast組合的網路電台是不計其數。

Ogg在Windows平台上也有很好的支援,第一個預設直接支援Ogg格式的播放器就是Winamp,由Winamp前核心成員Peter Pawlowski編寫的foobar2000也對Ogg支援良好。雖然網路上也可以找到走DirectShow路線的Ogg filter,讓Windows Media Player播放Ogg,但在此還是建議使用專門播放音樂的foobar2000。

4. OGM(Ogg Media):

目前OGM的發展停頓了,但它依舊在外國的影音社群中少量的流通著。OGM基本上是Tobias Waldvogel這位老兄將Ogg做了些許破解後的產物,所以OGM除了能夠包含Xiph.org發展的所有編碼以外,更可同時包含多軌的視訊(DivX、Xvid等)、多軌音訊(MP3、AC3、AAC等),多軌字幕檔(srtssa等),並且支援章節段落選擇,使得OGM一時之間成為使用上極具彈性的封裝格式。

  • 上圖展示正在播放的OGM卡通檔案。由右下方工具列的圖示,依序是:解碼Xvid視訊的ffdshow video decoder,解碼Vorbis音訊的ffdshow audio decoder,顯示srt英文字幕檔的VobSub(現已改名為VSFilter),以及解析OGM檔案的Haali Media Splitter。由Splitter的功能清單可看出,本OGM檔案實際上包裝著兩個Vorbis音軌,分別是日語發音以及英語發音,隨時可以切換(誰會想看英語發音的美少X戰士啦),字幕檔也可依需求關掉或打開,所以理論上要再包進一個日文字幕檔也不是難事。此外,Chapter選項顯示本卡通有15個段落,直接選取就可快速跳躍,不需要自行拉影片時間軸。基本上這已經類似於DVD的結構了,單獨一個OGM檔案,直接到位。
但OGM雖以開放式的Ogg為基底,卻沒有開放自身原始碼,也不是自由軟體,更走出了Ogg的規格之外。關於這一點,Xiph.org的人可是很火:http://xiph.org/container/ogm.html。「OGM不是Ogg,但很多人以為它是Ogg,並寫信來要我們提供支援」上面的網頁如是說。雖然Tobias稍後將OGM的程式捐贈給Xiph.org,並成為了Xiph.org的一份子,但當更強大的Matroska格式崛起後,OGM便逐漸被淡忘了,連Xiph.org都不太想理它。OGM R.I.P。

5. MKV/MKV(Matroska):

Matroska於2002年開始發展,屬於開放軟體,所有的程式碼都是公開的,並有完善的文件說明。簡單來說,MKV運作起來與OGM極為相似,可謂有過之而無不及,並能封裝比OGM更多的編碼種類,多到在這裡的篇幅塞都塞不下,有興趣請參考Matroska的官方說明。不過目前最常見的,仍屬MPEG-4影像與Vorbis、AAC與AC3音訊為主,此外MKV亦可封裝非影音編碼類的檔案,常見的應用之一,就是把SSA、ASS字幕檔所用到的字體檔案一併打包進去。沒錯,就是華康XX體那一類的東西,如此一來就算使用者的電腦裡沒有安裝該字型,影片播放時字幕也可以漂漂亮亮的。

  • Matroska檔案依舊可用Haali Media Splitter解析,這是Matroska官方推薦的分離器。上圖的影片是從DVD中rip出來的,雖是以標準NTSC解析度720*480壓製的H.264影片,與DVD中的原始解析度一樣,但播放起來卻是16:9的853*480。這是因為MKV檔案在打包時可以任意指定播放比例,這與採用DVD播放器接電視放片子有異曲同工之妙。搭配由VobSub從DVD裡頭抓出來的字幕檔,讓使用者自行備份的影片與DVD上的近乎一模一樣。
某些Matroska檔案中僅包含音樂而沒有影片,通常會被改稱為MKA檔案,實際上它與MKV的結構完全相同,使用上無異。以MKA檔案打包無損壓縮的True Audio音樂,搭配章節分段的CUE檔,在日本是非常風行的。

MKA_Demo
  • 利用單一個Matroska備份一整張CD唱片。上圖顯示CoreWavPack decoder正在解碼由無損格式WavPack壓縮的音樂,由於紀錄音樂曲目章節資訊的CUE檔也被包裝進來了,亦可在Haali Media Splitter的選單上看到可以直接選取的曲目。在此播放的是日裔指揮家小澤征爾指揮Boston交響樂團,演奏法國近代印象派音樂家Maurice Ravel的作品。
Matroska在使用上極具彈性與便利性,在國外的字幕組社群中相當受歡迎,但由於它是網路上Open Source社群開發的產物,商業軟體對它的支援奇差無比,再加上可以包裝非影音檔案的天性,幾乎沒有剪接軟體可以直接對Matroska做剪輯。Matroska比較像是:作為最終端,專門在電腦上播放的「成品」。

6. RM/RMVB(RealMedia)

RealMedia是RealNetworks公司為自家RealVideoRealAudio制定的封裝格式。RealNetworks公司於1990年代中期崛起,當時寬頻網路尚未普及,故RealNetworks致力於串流媒體的發展:讓一份檔案可以邊傳遞邊播放,不需要完全下載後才能開啟,因此促成了RealMedia的誕生。雖然要把RealMedia檔案完整下載也不成問題。早期的RealMedia僅能為固定流率,故副檔名為RM。RMVB則是後來加入了變動流率(variable bitrate)技術後的名字。

由於RealMedia是商業公司的封閉格式,以往僅有ReakNetworks公司自家的RealPlayer可以播放。但RealPlayer曾有設計不周詳,造成使用者的電腦在網路上被開漏洞的不良紀錄,以及軟體本身撰寫不佳,效能低落,甚至搞爛作業系統的慘劇,使得RealPlayer聲名狼藉好一陣子。因此某K-Lite編碼包的作者群開發了Real Alternative解碼器,讓使用者不需要安裝RealPlayer,就可用Windows Media Player或Media Player Classic播放大部分的RealMedia檔案。雖然RealNetworks公司對此提出了多次警告,但大家還是用得不亦樂乎。

Real_Demo
  • 正在搭配Real Alternative運作的Media Player Classic,雖然表面上不太容易看出來。
在國外的影音社群中,RealMedia的可見度非常低,因為它搭配的RealVideo與ReakAudio實在是無法跟其他編碼相提並論,反倒是在對岸的社群中相當受歡迎,有著為數極多的日劇、卡通流通著,少數大陸製的可攜式多媒體播放器更可直接播放RealMedia。

本文僅簡介了電腦上較常見的六種封裝格式,欲了解更多相關資訊請參照本Wiki文件

Wednesday, April 16, 2008

影音封裝格式: (上)概說

上次概略介紹了影音編碼(請參照影音編碼概說),這次則針對影音封裝格式做簡介。所謂的封裝格式,簡單的說,就是影音資料的載體,或稱「容器」(container)。與編碼不同的是,編碼負責表示資料,容器則將資料打包,方便傳遞、播放。例如:Windows平台上常見的未壓縮WAV音訊檔案,其實僅是一種封裝格式,其內部包含的資料,是採用PCM(Pulse-Code Modulation)型式表示的音訊。同樣的,在蘋果電腦的Mac OS中,PCM資料則是用AIFF檔案封裝,在昇陽電腦的系統上則是採用AU/SND檔案格式。所以WAV、AIFF與AU/SND檔案雖是因應不同作業系統而產生的格式,骨子裡它們根本是一樣的東西。Windows平台只要有適當的軟體,一樣可以認得AIFF與AU/SND檔案,進而播放裡頭的PCM音訊。

封裝格式不見得只能存放一種類型的資料,通常可以允許多種不同的型式的資料同時存於其中,這正是它的方便之處。例如:電影DVD上的VOB檔案是一個載體,裡頭包含了用MPEG-2標準壓縮的影像,用Dolby DigitalDTS格式壓縮的5.1聲道音軌,以及多國語言的字幕。所以一個單獨的VOB檔案,就可以同時傳遞多種資料,省去檔案太分散的麻煩,方便DVD播放器與電腦讀取。

在此再次強調:container與codec是截然不同的東西:被編碼資料的是包在container中的。因為封裝格式是藉於播放軟體(或硬體)與影音資料之間的中介層,要讓電腦撥放一個檔案,首先電腦需藉由適當的中介軟體辨識出該檔案的封裝格式為何,並讀取出其中的影音資料,送交個別的解碼器還原後,再行呈現。這當中的中介軟體,或稱「分離器」,通常有parser、splittter或demuxer等多個名字。因此,影音檔案之畫質、音質好壞,不是由封裝格式決定的,而是由其內部封裝的編碼壓制品質而定:AVI影片跟MKV影片的畫質無從比較,只有它們內部包裝的DivX或Xvid等編碼才能決定。

那麼,影音檔案一定得包在封裝格式中,才能播放嗎?答案是否定的。以MP3為例,單獨的MP3檔案本身就包含了可以播放的資訊,MP3檔案就是MP3檔案,裡頭不會再放其他的東西了;FLAC音訊不論是放在MKV(Matroska)或Ogg中,抑或抽出來成為獨立的FLAC檔案,也是可播放的。但MKV可以搭配章節檔案將一首曲子做分段,方便使用者直接選曲,而Ogg則可在網路上藉由串流(streaming)方式播放,十分適用於網路電台。因此,選用容器與否,要看用途而定。

目前可見的封裝格式不下十來種,在下篇中將針對較常見的格式做簡介。

Monday, April 14, 2008

影音編碼概說

相信會在網路上下載影片,或是自己嘗試過剪輯、輸出影音資料的各位,一定聽過編碼這玩意吧?曾經遭遇過拿到手的影片,播放起來卻是有影無聲、有聲無影,甚或完全無法播放的困境?通常最大的原因,就是電腦中缺乏了該檔案所需的編碼(英文稱為codec,別再偷懶打成code了)。所謂的編碼,一般來說有兩種解釋:compressor與decompressor,或是coder與decoder。我比較傾向採用coder與decoder做解釋,因為codec不一定會將資料壓縮(compress),雖然壓縮也是編碼的任務之一。

編碼之所以被發展,主要有以下原因,第一:將資料的表示方法標準化。這很容易理解,就如同摩斯電碼將A至Z每一個字母以獨特的訊號表示,正因為它被標準化,哪怕它已經是古老且被停用的編碼了,摩斯電碼走到世界各國仍是通用的。在這個例子中,摩斯電碼並沒有將所要傳遞的資料「壓縮」,反而將資料量膨脹了,但卻能確保從發送端傳遞出去的(coder),與接收端收到的(decoder),是一模一樣的資訊。

第二個原因,同時也是影音編碼的主要目的,則是將資料量壓縮。舉一個同樣很古老的例子,黑膠唱片在當年碰到很大的問題:由於聲音資訊在黑膠唱片上是以刻痕方式表示,聲音的頻率越低,則刻痕越寬,反之則越窄。這對唱片業造成很大的障礙,因為一張黑膠唱片的面積大不到哪去,若音訊刻痕不做處理,一張黑膠唱片的可錄音時間可能會因低頻太多而大大縮短,或因高頻部分使得刻痕太細,產生製造上的困難。為解決此問題,早期各大唱片公司各有各的編碼方式,將音訊編碼、壓縮之後,再行刻片,大大縮小了刻痕的尺寸,並延長唱片的播放時間。而美國唱片工業協會(Recording Industry Association of America,簡稱RIAA)在1958年則將編碼方式統一化:刻片時將低頻減弱、高頻增益,使得唱片上的刻痕寬度不至於有過大的變化,減輕唱針的負擔。播放唱片時,再經由解碼器還原出原本的音訊。這就如同DVD中的5.1聲道音軌多為Dolby Digital的AC3壓縮,或是其競爭對手DTS公司的編碼,因為5.1聲道相較於雙聲道來說,資料膨脹了不少,故有必要編碼壓縮。

同樣的應用亦出現在更多的場合:用手機拍短片?那應該免不了用上H.263AMR。絕大多數會把CD唱片備份在電腦中的人都會選擇MP3,Open Source軟體死硬派可能會選擇VorbisMusepack,而追求音質的人必定會使用封存音樂專用的APEFLACTrue Audio編碼。要播放超高畫質的藍光光碟?鐵定要搞定H.264編碼。用DV拍攝的片子想燒成DVD?先拿到MPEG-2編碼器再說。喜歡透過某些管道(?)在網路上看免費的日劇或電影?明白DivxXivdRealvideo對你絕對有幫助。不論是單純的媒體播放,或是更複雜的影音製作、剪輯,皆與編碼脫離不了關係。

這麼廣泛的應用看似很複雜,其實並不然。選對工具、用對方法,自然可以事半功倍,這正是你現在正看本AV站的原因(喂)。相信本文讓你大致了解編碼的用途,往後我們將探討並說明編碼的實際運用。

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之內部參數設定解說。

日本沒有VCD

日本市面上沒有VCD,就算有,也是極端少數。雖然日本重要的電氣公司Sony、松下與JVC一同參與了1993年的VCD標準制定(剩下一個是荷蘭的Philips),但VCD在日本本土一直不成氣候,連VHS錄影帶都取代不了,甚至當年號稱結合電視遊樂器與DVD播放器一體的PlayStation 2都無法播放VCD,這是由於以下原因:

1. VCD的畫質很差

VCD的影像是採MPEG-1標準壓制,但MPEG-1是眾所皆知的爛,壓制不好的VCD,畫面上常帶有所謂的block artifact,由於MPEG壓縮(包括MPEG-1與後來DVD用的MPEG-2),是將整個畫面分割成許多細小的方塊區域,再分別壓縮,故很容易造成畫面變成一格一格的,相信用電腦看VCD的人都會注意到這一點。再者,VCD的解析度不高,以日本與台灣採用的NTSC電視規格為例,解析度僅有352*240,比類比磁帶VHS好不上哪去,畫質甚至比以類比方式儲存影像的Laserdisc還差。

2. VCD的音訊表現普普

VCD的音訊採用MPEG-1 Layer 2壓縮,在音質方面表現普通,且僅能為雙聲道,而早在1978年便現身且經過多次演化的Laserdisc卻可以存放多聲道的Dolby Digital或DTS音軌,不過由MPEG-1 Layer 2(MP2)繼續改良而成的MPEG-1 Layer 3(MP3)在往後掀起的風潮,又是另一個故事了。

3. 標準制定的時機不好

VCD的標準於1993年制定完成,但DVD的標準制定很快的在1995年12月就完成了。再者,由於Laserdisc在日本風行已久,VCD的生存空間很明顯受到擠壓,而Laserdisc更是在1997年後被DVD完全取代,使得VCD在日本成為連過渡性產品都不如的玩意,反倒在盜版猖獗的其他亞洲各區大量流通,因為VCD沒有防拷貝機制,要複製相當容易。

基於以上各點,VCD在日本的能見度幾乎是零,因此要是哪天各位在路邊看到賣迷片的商家標榜所謂「航空版VCD」(?),或是在網拍上看到「正版日劇VCD」一類的玩意,那鐵定是假的。

Thursday, April 10, 2008

AVI檔案減肥壓縮DIY教學

零. 前言

手頭上有檔案大小很大的母片嗎,或單純只想要將AVI檔案瘦身,以方便儲存與散佈?本教學利用Xvid的Two-pass壓縮,搭配VirtualDub與LAME MP3,以土法煉鋼方式將影片壓縮至自行指定的大小。正因為是土法煉鋼,表示自由度很大,可以依照自己的需求對影片大小以及編碼壓縮上,做細部的調整。

一. 採用工具:

1. VirtualDub-MPEG2(VD):

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

原始的VirtualDub不能處理MPEG2檔案,所以我比較喜歡用這一個。基本上本教學文同樣適用於DVD的VOB檔壓縮備份,只不過DVD影片在轉存上需要額外的處理,這些暫且不在本文內討論。

2. Xvid MPEG4 Codec:

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

視訊壓縮用。

3. LAME ACM MP3 Codec:

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

音訊壓縮用。

4. (選用) AC3 Decompressor:

http://www.free-codecs.com/download/AC-3_ACM_Decompressor.htm

假如你要壓縮的AVI母片在音訊部分是AC3編碼,也就是Dolby Digital,那有必要安裝本解碼器,讓VirtualDub可以認得AC3。

5. Media Player Classic:

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

沒啥,單純是我最愛用的播放軟體。

二. 前置作業:

在此採用的樣本檔案,叫做Test_File.avi,視訊為Lossless H.264,音訊則是CBR的MP3。這是我自己從卡通DVD中rip下來並做了處理的樣本AVI檔案,大小為762MB。如果你的母片視訊是Divx或Xvid等編碼,本文同樣適用。重點在於:只要是你的電腦可以播放的AVI檔案,便可依照本文重新壓縮。

用VD打開Test_File.avi之後,從選單選擇Video->Fast recompress。音訊方面若「不壓縮」,則選擇Audio->Direct stream copy。若「要壓縮」則選擇Audio->Full processing mode。

三. 壓縮流程

1. 音訊部分:

若不壓縮音訊,則可跳過本步驟。在此不建議對音訊再行壓縮,因為音訊部分對於影片檔案的大小影響遠小於視訊部分。若要壓縮,則選擇Audio->Compression,從codec清單選擇Lame MP3,並選擇資料流量,建議選擇CBR,對於AVI的相容性較高。

2. 視訊部分:

這裡才是本教學文的重點,請一步一步慢慢來。

2.1 1st pass:

首先選擇Video->Compression,從codec清單選擇Xvid MPEG-4 Codec,然後按Configure,把Encoding type調成Twopass - 1st pass,再按OK:

OK後,選擇VD清單File->Save as AVI,指定儲存檔名,例如: 1st_Pass.avi。記得把下圖中紅框部分勾起來,會比較方便:

按儲存後退出。所謂的1st pass,Xvid編碼器不會對影片作真正的壓縮,而是會先將片子分析一遍,紀錄影片各個frame之間的關聯性與資料量,並將統計結果儲存在一個叫做video.pass的檔案中,供給2nd pass壓縮時參考用。

2.2 2nd pass:

再度選擇Video->Compression,依舊從codec清單選擇Xvid MPEG-4 Codec。按Configure後,將Encoding type調成Twopass - 2nd pass,把下頭那個按鈕調成Target size(kbytes),並在方框內輸入想要的檔案大小:

請注意,檔案大小是用Kilo Bytes表示。

例:我要把片子壓成200MB,那麼我該填入: 200*1000 = 200000

(還是200*1024 ?管它的啦 :p)

則Xvid會盡可能的把片子壓成200MB的大小,通常誤差率很低,因為有1st pass的統計檔案video.pass作參考。但請注意,這裡是指定「視訊」的大小,因此「音訊」部分沒有考慮進去。要是你很在意音訊的大小,那可以按那個calc按鈕,自行計算看看視訊和音訊的大小,這部分就不多談了。不過要是知道影片的長度,又知道是用多少kbps的MP3壓縮,計算機打一打就知道音訊的切確大小了。其他Xvid的細部設定就先不多談,基本上預設的設定已經很夠用了。

按OK退出後,再度選擇VD清單File->Save as AVI,指定儲存檔名,例如 : 2nd_Pass.avi(別把1st_Pass.avi給蓋過去了)。同樣的,把「Don't run this job now....」那個方框打勾,按儲存退出。

2.3 開始壓縮:

這時從VD選擇File->Job control,可以看到:

負責1st pass與2nd pass的工作都被放到駐列裡頭,等待開工。按下Start就可開始壓縮作業。想要看壓縮進度,可從VD選擇Options->Show status windows。再次注意這是Two pass的壓縮 Xvid要將影片處理兩次後才算真正完工,所以這時候可以喝茶看報去了。

四. 壓縮結果

經過處理後,我們順利的將原本大小為762MB的Lossless H.264+MP3的AVI原始母片,壓縮成了210MB的Xvid+MP3的AVI檔案了:

雖然不是恰好在200MB,可是考慮Xvid的壓縮誤差,與一開始排除在外的音訊大小,應該是相當符合預期的結果了。這種土砲壓縮方式雖然比WinMEnc或Winavi等包裝好的軟體來得麻煩,可是自由度相當高,要轉壓成DivX、WMV9、或是H.264、都是可以舉一反三的。

五. 參考資料

1. Doom9 Xvid Guide: http://www.doom9.org/index.html?/xvid.htm

關於Xvid Encoder的內部細部設定,可以參考這裡。

Wednesday, April 9, 2008

如何將DVD中的音軌轉成MP3?

零. 前言

本教學文以DVD Decrypter擷取DVD中的音軌,並以foobar2000轉存成為MP3,搭配Audacity做必要的處理工作。

一. 使用工具

1.1 DVD Decrypter: http://www.free-codecs.com/download/dvd_decrypter.htm

用以擷取DVD中的音軌。其實連影像部分也能擷取,不過本文的重點僅放在音訊的處理上。由於大多數的DVD都有防拷貝的保護機制,因此有熱心人士完成了這個軟體,讓DVD的擁有者得以將DVD中的內容做完全的備分,但這當中自然牽涉到許多版權問題。由於DVD Decrypter在一年多以前受到多家商業公司的威脅,已經停止維護了。目前最後版本是3.5.4.0,或許無法對較新的DVD做擷取,可能得搭配更黑的AnyDVD使用,不過我到目前為止還沒碰過問題就是了。(別問我AnyDVD是啥啊,自己Google XD)

1.2 foobar2000: http://www.foobar2000.org/

1.3 foobar2000的AC3解碼器: http://kode54.foobar2000.org/foo_ac3.zip

1.4 LAME MP3編碼器:
http://www.free-codecs.com/download/Lame_Encoder.htm

foobar2000搭配上第三方的AC3 decoder與LAME MP3 encoder,可以直接將DVD Decrypter轉出來的AC3音軌轉碼成MP3。

1.3 (選用) Audacity: http://audacity.sourceforge.net/

通常DVD的音軌音量相對得小,要是嫌轉出來的檔案聲音太小,或是要剪輯音軌,可以用本軟體,編輯後可搭配LAME直接輸出MP3。

二. 前置作業

本次的示範DVD是2001年的日本動畫電影大作,吸血鬼獵人D,Vampire Hunter D: Bloodlust:

保證原版三區DVD片,絕無虎爛(?)。

2.1 foobar2000:

安裝好以後,將AC3 decoder,也就是foo_ac3.dll,扔到foobar2000程式目錄底下的components資料夾裡頭。至於lame.exe直接放到foobar2000程式目錄下就好,foobar2000會自己偵測到它。

2.2 DVD Decrypter:

放入DVD片並啟動後,選擇Mode->IFO,應該可以看到類似以下畫面:

Decrypter會在Input區自動選取片子時間長度最長的區段,因為這通常就是影片的正片,其他的自然就是DVD選單,還有幕後花絮之類的。在Input視窗中按滑鼠右鍵,選擇File Splitting->None 可以省去不少麻煩。

請注意除非你真的自行確認過DVD中各影片的長度,不然基本上在此是無法直接得知所選的部分到底是DVD中的哪一段,有時得用試誤法才行。

三. 擷取開始

3.1 DVD Decrypter: Chapter Selection

請注意到Input區塊下方的Chapter XX那一欄 自然就是影片的各個章節,Decrypter預設是全選,但我建議先把片子看一次,確認要擷取的音軌是在哪一個章節後,再從這裡選擇,可能還得扳扳手指算章節,這當然是土法煉鋼,但可以省去不少之後為了挑選所要的音軌,還得自行剪輯的功夫。在這我要擷取正片最後Cast處的音樂,所以我勾選了最後一個Chapter 18:

可以在Chapter處按滑鼠右鍵,選擇Select None,再自行勾選所要的部分。至於右邊的Cell XX千萬別亂動,保持勾選放著不動就好。

3.2 DVD Decrypter: Stream Processing

視窗切到Stream Processing:

在此影片有哪些音軌與字幕軌,一目了然。本次的示範DVD片有:杜比AC3雙聲道日語發音、杜比AC3 5.1聲道英語發音、DTS 5.1聲道日語發音、以及搭配日語與英語的中文字幕各一。依我們僅需轉存MP3的用途。基本上擷取雙聲道的就很夠用了,通常一片標準的DVD中一定會有雙聲道音軌,所以把Enable Stream Processing勾起來,僅勾選AC3/2ch/Japanese就好,連Video部分都不用了。記得下頭的Demux務必要勾選,Map to啥的不要管它。請注意要Demux的是你要抓出來的音軌,請不要把選擇游標停在你不要的音軌後再選Demux,如此一來就會處理錯目標,抓出來的便是不能直接處理的VOB檔案:

圖上寫得很清楚喔,是我要的Audio被Demux。確定以上步驟完成後,按那個大大的圖示開始擷取音軌。完成後到目標資料夾一瞧,AC3檔案確實抓出來了:

如果你發現你的DVD中,雙聲道的部分是LPCM,那更好處理,因為抓出來的會是未壓縮的WAV檔案,連foobar2000都用不著,就可以用你自己最喜歡的轉檔軟體轉成MP3了。

四. 後處理

4.1 foobar2000轉碼: AC3->MP3

假如擷取出來的音軌恰恰就是你要的,不需要做音量調整或是剪輯,那直接把AC3檔案丟到foobar2000裡頭,在檔案上按滑鼠右鍵,選Convert->Conver to,再選LAME MP3、選音質,就可以直接壓成MP3了:

4.2 (選用) Audacity編輯

若是覺得AC3檔案的音量太小,或需要剪輯,可以先用foobar2000把該檔案轉成WAV檔,再扔到Audacity裡頭:

看得出來這AC3的音量實在小得可以,所以把整段音源選起來,再利用Effect->Amplify放大。請注意Amplification那一項是用dB值計算的,預設值會讓音訊中最大聲的部分衝到不至於爆音的最大音量,所以建議把New Peak Amplitude往負值調個0.5左右,以免音量過大。這方面請自行摸索,要剪輯就自己剪。由於Audacity也可以輸出MP3,只要把LAME的lame_enc.dll解壓縮出來,從Audacity之Edit->Preferences->File Formats那欄,用Find Library去找lame_enc.dll,並設定輸出流量,就可以利用File->Export As MP3輸出MP3檔案了。

五. 有MP3有真相

最後轉好的MP3檔案在這:按我下載