HOWTO Making MPEG4 Video

From KuWiki

Jump to: navigation, search

Contents

準備

軟體

知識

訊源

DVD

擷取

一般市售的DVD都有使用CSS保護,不過我們可以利用DeCSS來破解此機制,推薦使用SmartRipper這套軟體來做這項動作。

解碼

由於我們接下來需要利用AviSynth這套強大的影像處理軟體,因此必須把DVD的影像(MPEG2)餵給她吃才行,推薦使用DGMPGDec來做MPEG2的解碼。

DGMPGDec裡面包含一個叫做DGIndex的程式,它是從DVD2AVI這套軟體發展過來的,我們可以利用它來分離音軌並產生d2v專案檔,接下來簡單介紹DGIndex的使用步驟。

  1. 啟動DGIndex(.exe)。
  2. 確認主選單Audio->Output Method->Demux All Tracks已被選取。
  3. 按下主選單File->Open,然後開啟要處理的檔案(通常檔名為vob),檔案可以多選。
  4. 如果只想要處理的部分的影片片段,可以利用下方的按鈕"["和"]"來選取要處理的部份。
  5. 最後按下File->Save Project輸出d2v檔和音訊檔案。

影像處理

IVTC

雖然"大多數"的DVD訊源都是Interlace的影像,但還是有少數的DVD不屬於此類,如果幸運的遇到這種類型的DVD則不須此步驟。

很不巧的,大多數的DVD訊源都是Interlace的影像,因此首先我們需要做的就是De-interlacing或是IVTC,如果你確定你的影片是3:2 pulldown過的影像,那麼你就可以使用IVTC,至於如何做判斷,你可以詳讀這篇文章,以下介紹利用Decomb這個AviSynth的plugin來做IVTC。

Field的順序

首先我們必須判斷該影片是Top Field First(TFF)或是Bottom Field First(BFF),請建立一個副檔名為AVS的純文字檔案,其內容如下:

MPEG2Source("dvd.d2v")         # 載入訊源,以DVD為例。
AssumeTFF().SeparateFields()   # 假設影像是TFF,並把fields拆開。

接下來用VirtualDub開啟它,並試著播放該影像然後用你的肉眼觀察,如果影像沒有像跳針一樣跳來跳去,那該訊源應該就是TFF,否則它就應該是是BFF。如果你不是很相信自己的眼睛,可以把上面那段碼改成:

MPEG2Source("dvd.d2v")         # 載入訊源,以DVD為例。
AssumeBFF().SeparateFields()   # 假設影像是BFF,並把fields拆開。

然後再度以VirtualDub開啟並播放它,觀察影像會不會像跳針一樣,如果不會就是BFF,否則就應該是TFF。

重組影像

Telecide()這個function會把fields重新組成frames,請建立一個副檔名為AVS的純文字檔案,其內容如下:

AssumeTFF()         # 如果你的影像是BFF的則必須改成AssumeBFF()
Telecide(guide=1)   # NTSC系的國家(美國、日本、台灣)的DVD大多可採用這樣的參數。
請參考Decomb的說明文件以了解Telecide()的詳細用法。

3:2 pulldown

NSTC的影像需要再利用Decimate()這個function把30fps轉成24fps的原始影像,所以最後我們AVS檔的內容大概會像是下面這個樣子:

MPEG2Source("dvd.d2v")  # 載入訊源,以DVD為例。
AssumeTFF()             # 如果你的影像是BFF的則必須改成AssumeBFF()
Telecide(guide=1)       # NTSC系的國家(美國、日本、台灣)的DVD大多可採用這樣的參數。
Decimate()              # 30fps -> 24fps

如此IVTC就完成了。

縮放

如果你打算用Matroska(MKV)來當作輸出的格式,由於這個格式可以儲存影片的比例的資訊,因此以下的動作可以不必做。

NTSC的DVD影像都是以720x480的解析度壓制的,不過實際上卻沒有影像的實際比例是720x480(至少我還沒遇過),大多數的影像都是4:3或是16:9,所以你需要重新把影像縮放到適當的大小以及比例。

以下介紹AviSynth的縮放功能:

  • 4:3
Lanczos4Resize(640, 480)  # 縮放成640x480,你也可以選用800x600等,重點是比例要正確。
  • 16:9
Lanczos4Resize(704, 396)  # 縮放成704x396。
雖然只要比例正確大都可以被接受,但是有許多影像處理的功能會有一些限制,所以強烈建議無論是長或是寬都盡量設定成4的倍數。

裁切

有些訊源的四周會有黑邊,可以利用Crop()來把他們切掉。

Crop(4, 4, -4, -4)        # 左、上、右、下各切掉4個pixel。

完整的例子

MPEG2Source("dvd.d2v")    # 載入訊源,以DVD為例。

# 裁切
Crop(4, 4, -4, -4)        # 左、上、右、下各切掉4個pixel。

# IVTC
AssumeTFF()               # 如果你的影像是BFF的則必須改成AssumeBFF()
Telecide(guide=1)         # NTSC系的國家(美國、日本、台灣)的DVD大多可採用這樣的參數。
Decimate()                # 30fps -> 24fps

# 縮放
Lanczos4Resize(640, 480)  # 縮放成640x480,你也可以選用800x600等,重點是比例要正確。
雖然沒有硬性的規範,但建議以上面這個順序(裁切->IVTC->縮放)來處理。

壓製

視訊

在此你可以選用各種不同的codec來壓製,像是DivXXviDx264,甚至是Microsoft WMV9,都可達到不錯的效果,以下以XviD和x264這兩個codec為範例,因為這兩個codec都是開放原始碼的自由軟體。

XviD

  1. 首先你需要VirtualDub和XviD codec。
  2. 執行VirtualDub。
  3. 從主選單File->Open video file開啟來源檔案(如:dvd.avs)。
  4. 按下主選單Video->Fast recompress,因為我們不需要使用到VirtualDub的影像處理功能,而且只有在這個模式下VirtualDub才支援YUV色空間。
  5. 按下主選單Video->Compression,在彈出的視窗的左邊的區域找到"XviD MPEG-4 Codec"並選取它,然後按下視窗右方的Configure按鈕。
  6. 在彈出的視窗可設置XviD的壓置過程的參數,在此不多做介紹。請將"Encoding type:"設定成"Twopass - 1st pass"然後按下OK。
  7. 在選擇codec的視窗按下OK。
  8. 按下主選單File->Save as AVI,鍵入要存成的檔名,並在"Don't run this job now..."前的核取方塊打勾,然後按下儲存。
  9. 按下主選單Video->Compression,在彈出的視窗的左邊的區域找到"XviD MPEG-4 Codec"並選取它,然後按下視窗右方的Configure按鈕。
  10. 將"Encoding type:"設定成"Twopass - 2st pass",並在"Target size:"或"Target bitrate:"填入適當的數據,這關係到最後壓制後的檔案大小和畫面品質,完成後按下OK。
  11. 在選擇codec的視窗按下OK。
  12. 按下主選單File->Save as AVI,鍵入要存成的檔名,並在"Don't run this job now..."前的核取方塊打勾,然後按下儲存。
  13. 如果需要壓制更多影片,請重複步驟5~12。
  14. 按下主選單File->Job Control,並在彈出的視窗上按下Start可開始壓制作業。
此方法也適用在其他的壓縮技術,只要在步驟5、9的時候選取其他的codec(如DivX或WMV9)即可。

x264

Doom9論壇可以下載到x264的指令行介面的編碼器(x264.exe),以下為使用它的範例。

C:\>x264 --bitrate 1200 --pass 1 -o dvd.mkv dvd.avs
C:\>x264 --bitrate 1200 --pass 3 -o dvd.mkv dvd.avs
     .
     .
     .
C:\>x264 --bitrate 1200 --pass 3 -o dvd.mkv dvd.avs
C:\>x264 --bitrate 1200 --pass 2 -o dvd.mkv dvd.avs
  1. 其中--pass 3可以執行0~無限次,不過如果真的執行無限次就沒完沒了了,所以請自己調整。
  2. --bitrate 1200代表用1200kbps的資料率來壓縮,請依個人需要自行調整。

再此並提供一個批次(batch)程式,幫助我們一次執行完所有的步驟。

將以下內容存成一個副檔名為bat的純文字檔案即可。
@echo off

rem x264.exe的完整路徑
set X264=E:\software\x264.exe

rem 傳遞給x264.exe的參數,可以用x264.exe --help來觀看說明。
set X264FLAGS=--bitrate 1200 --progress --thread-input --threads 2

for %%f in (%*) do (
  echo Encoding %%f ...

  rem pass 1
  %X264% %X264FLAGS% --pass 1 -o %%f.mkv %%f

  rem 刪除pass 1的結果,因為我們只需要pass 1的分析資料。
  del /q %%f.mkv

  rem pass 2
  %X264% %X264FLAGS% --pass 2 -o %%f.mkv %%f
)

你可以把來源檔名(例如dvd.avs)當成這個批次程式的指令行參數,或是直接在檔案總管把來源檔案的圖式拖曳到這個批次程式的圖示上。

音訊

在DVD中常見的音訊格式有分為下列幾類。

LPCM(*.wav)

Linear PCM(LPCM)為無壓縮的音訊格式,通常是立體聲(雙聲道),因此檔案尺寸自然不小,甚至比我們壓好的MPEG4視訊還要龐大,因此我們必須把它壓縮才行。至於壓縮的方法則有不少選擇,如MP3、AAC、Vorbis(破壞性壓縮、失真)或者是FLACTTA(不失真),不過大多數人還是使用破壞性壓縮格式,畢竟不失真壓縮的結果檔案還是相當大。

下面是一些開放原始碼的音訊編碼器:

非開放援碼:

AC3(*.ac3)

AC3本身就是一種音訊壓縮格式(失真),常見的有5.1聲道和雙聲道,遇到這種格式建議不要多做處理,直接把它塞進MKV或是AVI裡面就行了,畢竟他本上檔案已經算不大了,而且如果在壓縮一次就是二次失真了。

DTS(*.dts)

DTS也是破壞性壓縮格式,而且主要是用在多聲道的音訊,它的檔案大小不算小,如果真的要處理這種格式可以把它壓成AC3或是把它Downmix成雙聲道在用處理LPCM的方式處理。

合成

播放

Windows

Linux

參考

Personal tools