weilai |
2005-01-12 14:41 |
[原创]MKV timecodes應用之試驗教學(VFR MKV) ※2/10新增:120fps to VFR MKV譯文 & GUI程式
首先先重提一下一些認知 (1) 24fps 的 A片段 要與 30fps 的 B片段 連接 又不希望造成不順暢或frame的損失 此時 就使用插入 Null frame 的方式,取兩者的FPS之最小公倍數 120fps 來達成
(2) AviSynth 的 AssumeFPS filter 是一個不影響frame數目 及 改變FPS速率 的濾鏡 P.S. 可以實驗一下證實AssumeFPS的效果,腳本如下 ============================================= AVISource(FileName).trim(301,0).changeFPS(23.970) # 總共得到 1933個frame
AVISource(FileName).trim(301,0).changeFPS(23.970).AssumeFPS(29.970) # 總共亦得到 1933個frame # 證實AssumeFPS如同 AVI Frame Rate Changer工具,不會改變視訊的frame數目 =============================================
(3) VirtualDubMod 的 Append segment 視訊檔案連結功能所需的條件是 FPS、水平垂直解析、code及colorspace需一樣 P.S. 這裡不討論音訊部分
接著回到主題 "如何利用MKV來達成不同FPS視訊片段的無損連結" ※且與音訊同步 1.首先先解析各片段的檔案 ======s1.avi===== 檔案 : 1.48 MB (1.48 MB), 持續時間 0:00:10, 類型 AVI, 0 音訊資料流, 品質 72 % 視訊 : 1.47 MB, 1226 Kbps, 29.969 fps, 解析度 640*480 (4:3), XVID = XVID Mpeg-4, 已支援
======s2.avi===== 檔案 : 18.3 MB (18.2 MB), 持續時間 0:01:20, 類型 AVI, 0 音訊資料流, 品質 73 % 視訊 : 18.2 MB, 1889 Kbps, 23.969 fps, 解析度 640*480 (4:3), XVID = XVID Mpeg-4, 已支援
=====source.mp3==(這個是VBR-MP3所以時間測不出,實際是1:30) 檔案 : 1.84 MB (1.84 MB), 持續時間 0:00:00, 類型 MP3, 1 音訊資料流, 品質 72 % 音訊 : 1.83 MB, 128 Kbps, 48000 Hz, 2 聲道, 0x55 = Mpeg-1 audio Layer 3 (MP3), 已支援
2.以上可得知兩片段 FPS 不同因此不能用VDM做Direct stream copy連接 所以這裡要決定改變誰的 FPS紀錄,此例我們決定將 s2.avi改成29.970 fps P.S. 使用到AVI Frame Rate Changer這個工具,這裡雖然s1.avi不用改,但發現VDM會不允許 所以就連s1.avi一起予AVI Frame Rate Changer應用之
3.接著就可以用VirtualDubMod先開啟 s1.avi緊接著File->Append segment開啟 s2.avi 最後確認使用Direct stream copy模式後,Save as 成 1+2.avi P.S. 音訊我們決定在 mkv 時包裝,當然也可以在這裡加上音訊 Streams->stream list->Add source.mp3
4.接下來是.MKV的包裝 首先需做一個 timecodes-v1.txt 文件,其內容如下: ============================================= # timecode format v1 assume 29.970
0,300,29.970 301,2232,23.970 =============================================
5.再來用 mkvtoolnix 的 mmg.exe 來製作包裝 (1+2.mkv) P.S. 這裡不要忘了加入音訊 source.mp3
以上就是 VFR video MKV 的一種應用 比之前利用AVI60(120、60 FPS Changer)的 120FPS做法多了幾個步驟 但得到的好處是成品檔案小及無損frame製程 P.S. 當然也有不便之處,比如要做 mkv->rm/rmvb 的壓製就可能有不少困擾
接著補充一下 timecodes-v1.txt 的編寫解說 assume 是假定的運作 FPS 值,因為最後我們都設定成同一個值,所以很容易理解就是 29.970 0,300,29.970 表示第0號到300號Frame間 原本的運作FPS是 29.970
那 301,2232,23.970 為何是 23.970呢? 就可以了解了吧,因為 s2.avi 原本的 FPS是 23.970(23.969) (事後才利用工具強制成 29.970)
至於301,2232及0,300這個範圍是怎麼來的,我們這裡用 VDM的 File->Information來得知
最後要提到的是 1.VFR video的應用不止於此,還有兩種層次上的分界應用 其一是Encoder的 VFR功能應用 這類工具說多不多說少不少 比如 Windows Media 9 編碼器 的 VFR WMV製作、RealProducer Plus(以致於其他rm製作) 又auoenc.exe + vfrout.auo/wmvout_vfr.auo P.S.(http://bbs.irradiance.net/txtVersion/boards/animation/M.1102772189.A.html) (auoenc.exe 可在Avisynth的warpsharp Ex'filter內找到,但是日文介面..) ...等等 雖然這個才是比較多人想知道的實做辦法,但純屬單一工具的使用這裡就不多說了
另一個是Avisynth script encode + VFR MKV 的應用 比如: http://forum.doom9.org/showthread.php?s=&threadid=64314 舉一個類似 s1.avi + s2.avi 的實例:
假設 s1.avi與s2.avi 同上例是FPS不同的檔案 在 AVS裡要如何合併呢?腳本如下: ============================================= a=AVISource("s1.avi") b=AVISource("s2.avi").AssumeFPS(a.framerate) a++b ============================================= 最後再用Encoder重新編碼及同上例方法包裝成 .MKV
2.貼出上面實驗的成果數據 1+2.avi: 19.4 MB (20,436,992 位元組) 1+2.mkv: 21.3 MB (22,344,138 位元組) ※結合了source.mp3及1+2.avi
重複提一下之前的 s1.avi: 1.47 MB (1,542,144 位元組) s2.avi: 18.0 MB (18,905,088 位元組) source.mp3: 1.82 MB (1,918,320 位元組)
解Timecodes文件GUI程式於下面樓層可以找到 P.S. 這個的作用是 解出來的Timecodes可用來配合上面Avisynth script encode + VFR MKV中的AVS腳本用來壓製 或 重新包裝mkv
120fps to VFR MKV譯文 & GUI程式 於下面樓層可以找到 |
|