星期三, 4月 06, 2005

mkv字幕分離與重製

mkv字幕分離與重製要用到軟體mkvtoolnix
到這裡下載選擇windows 的安裝程式,因為它用wxWindow,用rar版會缺dll
http://www.bunkus.org/videotools/mkvtoolnix/

主要是以命令列為主
mkvinfo 觀看mkv的資訊
mkvextract分離
mmg圖形介面
mkvmerge產生mkv檔,也可以看mkv影片檔資訊

用mkvinfo或者mkvmerge都可以看到你要分離的字幕在第幾個tracks

mkvinfo的情況 ,似乎code page不同,新版的mkvinfo在中文console下有些問題,所以改用gui
K:\mkv>mkvinfo -g 鋼1.mkv
...(略)
(MKVInfo) | + A track at 397
(MKVInfo) | + Track number: 3 at 400
(MKVInfo) | + Track UID: 1051997168 at 403
(MKVInfo) | + Track type: subtitles at 410
(MKVInfo) | + Codec ID: S_TEXT/ASS at 413
(MKVInfo) | + CodecPrivate, length 1254 at 425
(MKVInfo) | + Language: chi at 1683
(MKVInfo) | + Lacing flag: 0 at 1690
(MKVInfo) | + A track at 1693
(MKVInfo) | + Track number: 4 at 1696
(MKVInfo) | + Track UID: 449712430 at 1699
(MKVInfo) | + Track type: subtitles at 1706
(MKVInfo) | + Codec ID: S_TEXT/ASS at 1709
(MKVInfo) | + CodecPrivate, length 1254 at 1721
(MKVInfo) | + Default flag: 0 at 2979
(MKVInfo) | + Language: tai at 2982
(MKVInfo) | + Lacing flag: 0 at 2989

mkvmerge的情形

C>mkvmerge -i 鋼1.mkv
File '鋼1.mkv': container: Matroska
Track ID 1: video (V_MS/VFW/FOURCC, XVID)
Track ID 2: audio (A_MPEG/L3)
Track ID 3: subtitles (S_TEXT/SSA)
Track ID 4: subtitles (S_TEXT/SSA)

完整顯示出該影片資訊,知道我們要的是chi字幕,另一種國別寫法是zho,也是中文

分離字幕的指令
C>mkvextract tracks 鋼1.mkv -c UTF-8 3:1.ssa
Extracting track ID 3 to a SSA/ASS file '1.ssa'.
progress: 100%

在utf-8後面的3是track後面是你自己命名的字幕檔名
因為不加utf-8這個參數分離出來的字幕檔會變亂碼
在這裏有兩個字幕,4是泰文,可利用mmg看一下

完整的分離影片應為mkvextract tracks 鋼1.mkv -c UTF-8 3:1.ssa 1:1.avi 2:1.mp3

接下來可用notepad等編輯,注意為utf-8格式
若是純文字檔請存成.srt
若為簡體中文,可利用ConvertZ這套軟體去轉換為繁體,可批次處理,很快。
由於用ssa字幕大小格式還要調整,最好用Sub Station Alpha這套軟體編輯,手動編輯怪
怪的,後來我直接轉成srt檔,字幕反而比較清楚。
python ssa2srt.py 1.ssa > 1.srt
字幕也有可能是idx等等,請自行找到對應的程式處理

最後用mmg製成mkv檔,將1.avi、1.mp3和1.srt加入即可,請注意以下兩點
1. 字幕的語系請選zho或是chi,為中文
2. Subtitle Charset用此方式編碼為UTF-8,但經過ConvertZ轉換,則為Big5或是CP950,請多加注意。
即可用media player classic播放
若使用命令列格式,可批次處理,由於個案不同,請參考mmg產生的command line
本例子為
C>mkvmerge -o 鋼1.mkv --default-track 0 -d 0 -A -S 1.avi --default-track 0 -a 0 -D -S 1.mp3 --sub-charset 0:UTF-8 --language 0:zho --default-track 0 -s 0 -D -A 1.srt --track-order 0:0,1:0,2:0

其實步驟不多,只有3~4步,可寫成批次檔。請多推廣正體中文。

2 則留言:

匿名 提到...

有辦法批次轉出原字幕檔名嗎
我好像轉一個都有問題了...
Error: Missing track ID in argument '4'.

鳥毅 提到...

Missing track ID in argument '4'. 表示你弄錯track了,用MKVToolnix的UI確認一下吧 :D