後來嘗試在 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 左右
不過這些進階參數實在是相當複雜, 我也不太確定對畫質能有多大提升
其實用預設值轉出來的畫質就算是可以接受了