Hung-Ming Chen's Blog

星期四, 6月 15, 2006

AVI to DVD 轉檔

在 Linux 下把 avi 轉成 dvd 一直是件麻煩事, 也是過去我非得依賴 Windows 環境才能完成的工作之一. 若只是單純弄出個 mpeg2 video 倒還不是多困難, ffmpeg, transcode, mencoder 都可以輕鬆應付. 但是看電影怎麼可以沒字幕咧? 就算是在 Win32 環境下也要有點真功夫才能兜出字幕來. 我還記得以前那段 VirtualDub + VobSub + frameserver + TMPGEnc 的日子, 現在的 AviSynth + MainConcept Encoder 似乎也沒好到哪去.

不過我在摩托學園來來回回的爬文後, 讓我找到了一絲曙光, 經過幾番嘗試後, 總算可以把 avi 轉出出有中文字幕的 dvd 了. 為了方便以後轉檔作業, 我寫了個 script. 在服用前請先準備好以下工具:
  • ffmpeg
  • mencoder
  • mjpegtools (提供 mplex)
  • avidemux
  • dvdauthor
轉出來的品質呢? 還可以接受啦, 速度也還蠻快的, 在我的 P4 3G 環境下參數用預設值 + vhq, 轉換速度約 45fps, 如果開啟網路上找來的進階參數, 轉檔速度會掉到剩 12fps 左右, 但是我還沒仔細比對過兩者之間的畫質差異啦, 況且上回轉的片子用到 6000kbps, 恐怕看不出顯著差異吧, 等我有時間再來慢慢研究這些進階參數對畫質有啥影響.

這邊我假設你的影片檔名為 dvd.avi 且音效格式為 AC3, 處理步驟如下
Step 1: 將 AC3 音效自 avi 檔擷取出來. 在 avidemux 中開啟 avi 檔, unpack audio stream, 從功能表 [Audio] -> [Save...] 把 AC3 stream 另存新檔為 dvd.ac3

Step 2: 用 mencoder 將 avi 轉成 mpeg2 video (dvd.m2v)
請參考最後面的 script

Step 3: 將 video / audio 合併
> mplex -V -f 8 -o dvd.mpg dvd.m2v dvd.ac3

Step 4: 以 dvdauthor 將 dvd.mpg 輸出為 dvd 檔案系統
(用法? 自己查一下沽狗大神吧~~ XD)

--- Cut Begin Here ---
#!/bin/bash
# Author: Hung-Ming Chen (hmchen825@gmail.com)
# Edit the following settings
INPUT=dvd.avi
OUTPUT=dvd.m2v
BITRATE=6000
SCALE=720:360
SUBTITLE=dvd.srt
FONT_SCALE=3.5
CBR=true
USE_EXPERT_OPTS=false
TWO_PASS=true

# Don't modify the follows
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

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
--- Cut End Here ---

標籤:

0 個意見:

張貼留言

訂閱 張貼留言 [Atom]



<< 首頁