[心得] AVI to DVD 轉檔+中文字幕

常言道:『飲水思源』,在 Open Source 的世界裡,我們常常需要別人的幫助,但是在您有所心得的時候請記得分享給大家,『幫助人是快樂的喔』。歡迎您在使用 debian 的過程中的任何心得分享給大家。

[心得] AVI to DVD 轉檔+中文字幕

文章hmchen » 週五 6月 16, 2006 2:31 pm

以前都是在 XP 下用 MainConcept Encoder + AviSynth 轉檔
後來嘗試在 Linux 下轉看看, 摸索了一陣子後, 算是弄出了點結果
這份文章雖說還不是很完整, 不過先貼出來跟大家討論一下, 看還有沒有再改進的地方

假設影片檔為 dvd.avi , 音效格式為 ac3, 中文字幕檔為 dvd.srt

Step 1: 將 ac3 音效自 avi 檔分離出來.
方法 1 開啟 avidemux 載入 dvd.avi, 詢問是否 unpack bitsctream 時, 選 Yes
再從選單 [Audio] -> [Save...] 另存檔案為 dvd.ac3
方法 2: 用 transcode 提供的 tcextract (這個我還沒試過...)
代碼: 選擇全部
tcextract -d2 -i dvd.avi -a0 -x ac3 | tcextract -d2 -x ac3 -t raw > dvd.ac3


Step 2: 用 mencoder 將 avi 轉換為 mpeg2 video (不含 audio), 如 dvd.m2v
為了方便起見, 我寫了一個 script, 只要作些簡單的修改就可以用了
其中比較需要注意的是影片解析度跟字幕字體的大小
這個 script 是將影片轉換為 16:9 的比例, 假設 avi 的原始解析度是 W*H,
那麼縮放後的寬度固定為 720, 高度則為 720/W*H*1.185185 (取整數, 而且以偶數為佳)
字體大小比較麻煩, 建議先轉一小段預覽, 在調整成適合影片的大小
CBR, 2-pass encoding 跟 lavc 進階參數, 則可以自行選擇是否開啟(設成 true 即可)
代碼: 選擇全部
#!/bin/bash
# Author: Hung-Ming Chen (hmchen825@gmail.com)
# Edit the following settings
INPUT=dvd2.avi
OUTPUT=dvd2.m2v
BITRATE=6000
SCALE=720:360
SUBTITLE=dvd2.srt
FONT_SCALE=3.5
CBR=true
USE_EXPERT_OPTS=false
TWO_PASS=true

if [ $CBR == true ]; then
MINRATE=$BITRATE
MAXRATE=$BITRATE
else
MINRATE=2500
MAXRATE=9000
fi

SUBOPTS=-sub $SUBTITLE -font /usr/share/fonts/truetype/arphic/ukai.ttf -subcp cp950 -subfont-text-scale $FONT_SCALE
EXPERT_OPTS=trell:mbd=2:precmp=2:subcmp=2:cmp=2:dia=-10:predia=-10:cbp:mv0:vqmin=1:lmin=1:dc=10
LAVCOPTS=vcodec=mpeg2video:vhq:vrc_buf_size=1835:vrc_maxrate=$MAXRATE:vrc_minrate=$MINRATE:vbitrate=$BITRATE:keyint=18:aspect=16/9:turbo

if [ $USE_EXPERT_OPTS == true ]; then
LAVCOPTS=$LAVCOPTS:$EXPERT_OPTS
fi

# start encoding

if [ $TWO_PASS == false ]; then
# Single-pass encoding
mencoder -ovc lavc -nosound \
-of rawvideo -mpegopts format=dvd -ofps 30000/1001 \
-sws 9 \
-vf scale=$SCALE,expand=720:480,harddup \
-lavcopts $LAVCOPTS \
$SUBOPTS \
$INPUT -o $OUTPUT
else
# Two-pass encoding
# pass 1
mencoder -ovc lavc -nosound \
-of rawvideo -mpegopts format=dvd -ofps 30000/1001 \
-sws 9 \
-vf scale=$SCALE,expand=720:480,harddup \
-lavcopts vpass=1:$LAVCOPTS:turbo \
$SUBOPTS \
$INPUT -o $OUTPUT

#pass 2
mencoder -ovc lavc -nosound \
-of rawvideo -mpegopts format=dvd -ofps 30000/1001 \
-sws 9 \
-vf scale=$SCALE,expand=720:480,harddup \
-lavcopts vpass=2:$LAVCOPTS \
$SUBOPTS \
$INPUT -o $OUTPUT
fi


Step 3: 用 mplex 將 dvd.m2v 與 dvd.ac3 合併為 dvd.mpg
代碼: 選擇全部
mplex -V -f 8 -o dvd.mpg dvd.m2v dvd.ac3


Step 4: 用 dvdauthor 將 dvd.mpg 轉換成 DVD 的目錄
假設輸出的 dvd 根目錄為 DVDROOT
代碼: 選擇全部
dvdauthor -o DVDROOT -x dvdauthor.xml

設定檔 dvdauthor.xml 中每 15 分鐘設定一個 chapter
代碼: 選擇全部
<dvdauthor>
  <vmgm />
  <titleset>
    <titles>
      <pgc>
        <vob file="dvd1.mpg" chapters="0,0:15:00,0:30:00"/>
      </pgc>
     </titles>
  </titleset>
</dvdauthor>


Step 5: 把 DVDROOT 下的資料夾拉進 K3B, 燒成 DVD Video 就大功告成了

後記:
mencoder 並不支援 multi-thread encoding, 不過效率其實還不賴,
在 P4 3G 的環境下用預設值轉檔速度還有 45fps 左右,
開啟 lavc 進階選項的話則會掉到剩下 12fps 左右
不過這些進階參數實在是相當複雜, 我也不太確定對畫質能有多大提升
其實用預設值轉出來的畫質就算是可以接受了
hmchen
可愛的小學生
可愛的小學生
 
文章: 38
註冊時間: 週二 6月 08, 2004 7:34 pm
來自: 台灣共和國

文章訪客 » 週二 2月 20, 2007 10:05 am

說明的很詳細,謝謝。
請問,通常檔案都是兩個檔,如A.avi+A.srt,B.avi+B.srt,那麼上文所提轉成dvd檔,實在不太懂?
可否提供 A to VCD & B to VCD 的方法。
訪客
 

文章訪客 » 週二 2月 20, 2007 2:10 pm

另,mplex是哪個套件?謝謝。
訪客
 

文章hmchen » 週四 2月 22, 2007 9:15 pm

Anonymous 寫:另,mplex是哪個套件?謝謝。

mjpegtools
hmchen
可愛的小學生
可愛的小學生
 
文章: 38
註冊時間: 週二 6月 08, 2004 7:34 pm
來自: 台灣共和國

文章訪客 » 週四 2月 22, 2007 10:26 pm

hmchen 寫:
Anonymous 寫:另,mplex是哪個套件?謝謝。

mjpegtools

謝謝,試轉了一段,進行到dvd.m2v時,可看見字幕。
用mplex合併dvd.ac3後,聲音出來了,字幕卻不見了?
該如何是好?
訪客
 


回到 share

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客