搜索 社区服务 统计排行 帮助
  • 29864阅读
  • 37回复

[原创]MKV timecodes應用之試驗教學(VFR MKV) ※2/10新增:120fps to VFR MKV譯文 & GUI程式

楼层直达
级别: 版主
注册时间:
2002-12-02
在线时间:
0小时
发帖:
3002
首先先重提一下一些認知
(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程式 於下面樓層可以找到

级别: 版主
注册时间:
2002-12-02
在线时间:
0小时
发帖:
3002
只看该作者 37楼 发表于: 2005-04-11
本帖終止更新
給自己鎖起來 ^^||

P.S. 太多無意義對話

级别: 工作组
注册时间:
2004-08-30
在线时间:
0小时
发帖:
102
只看该作者 36楼 发表于: 2005-02-22
引用
最初由 adamhj 发布


没试过的话别乱说,timecode做出来的vfr rv提取出来还是vfr的rmvb,我认为很可能用timecode做出来的mkv和直接用vfr的rmvb做出来的mkv是一样的格式,这也只是提供一个调整rv的timecode的途径,至于好坏,具体情况具体分析~


你这话基本等于废话,一般不正常的人才用timecode去vfr rv呢,rv本身就支持vfr,我用的着timecode吗?完了还提取,my god...!
你说的对,我是没测试过用54手枪打落卫星的机率是多少,因为都用导弹.........

真懂的只做不说,不懂的只说不做,说的不值钱,真值钱的不说,一知半解就给人讲课并误人子弟的那是骗钱.知道那么一点就马上瞎散的,那叫的瑟,是个分流员^^
Life it seems, will fade away
Drifting further every day
Getting lost within myself
Nothing matters no one else
I have lost the will to live
Simply nothing more to give
There is nothing more for me
Need the end to set me free
Things are not what they used to be
Missing one inside of me
Deathly lost, this can't be real
Cannot stand this hell I feel
Emptiness is filling me
To the point of agony
Growing darkness taking dawn
I was me, but now Has gone
No one but me can save myself, but it to late
Now I can't think, think why I should even try
Yesterday seems as though it never existed
Death Greets me warm, now I will just say good-bye

凯比论坛 http://bbs.kaibi.com
级别: 新手上路
注册时间:
2003-06-23
在线时间:
1小时
发帖:
2882
只看该作者 35楼 发表于: 2005-02-21
引用
最初由 NovemberRain 发布


我觉得你很幽默,人类之所以不会只用双腿走路是因为发明了可以代替它并先进的工具,正因为有更快速实用的飞机,汽车,您才不会去哪里都要用你金贵的双腿,你产明了你的观点看似我说的和你没关系,可我要说,RV本身就是支持VFR的,你却用MKV的VFR去体现RV的VFR,先不说你这方法是否一定正确可行,要知道RV本身播放就很废CPU的,你再装个MKV来体现RV本有的VFR就更废了,我不知道这算不算你不管去哪里都靠双腿,废力是可以的,废力不讨好是不行的^^


没试过的话别乱说,timecode做出来的vfr rv提取出来还是vfr的rmvb,我认为很可能用timecode做出来的mkv和直接用vfr的rmvb做出来的mkv是一样的格式,这也只是提供一个调整rv的timecode的途径,至于好坏,具体情况具体分析~

不学无术中..

eMule ID:[eDtoon][CHN]adamhj@eMule-Official
级别: 工作组
注册时间:
2004-08-30
在线时间:
0小时
发帖:
102
只看该作者 34楼 发表于: 2005-02-20
引用
最初由 adamhj 发布


第一:我想我和ac都是在说vfr mkv的做法,而不是在讨论vfr rv的做法,至于其中说到rv是指mkv封装的rv编码
第二:很多事情我喜欢自己试试能不能成,特别是有些我觉得很有可能出问题的事,关于这些试验及其结果请不要指手划脚(比如这里我就是想试试rv编码的视频能否通过mkv的timecode来调整播放时的帧率,结果答案是否定的,或者至少我用的方法是错误的),真正做的时候我自然会用我认为没有问题的方法去做,那时候如果出了问题欢迎指出
第三:请你确定你发言时对人的针对性和指代关系,我想我和ac都没说过有丢frame的问题,请问你所说的“哪里来的丢frame”是针对谁的?我比较好奇这个“楼上的几位”具体是指谁。当然如果不是指我和ac的话,我现在说的所有话您就当是废话吧~


我觉得你很幽默,人类之所以不会只用双腿走路是因为发明了可以代替它并先进的工具,正因为有更快速实用的飞机,汽车,您才不会去哪里都要用你金贵的双腿,你产明了你的观点看似我说的和你没关系,可我要说,RV本身就是支持VFR的,你却用MKV的VFR去体现RV的VFR,先不说你这方法是否一定正确可行,要知道RV本身播放就很废CPU的,你再装个MKV来体现RV本有的VFR就更废了,我不知道这算不算你不管去哪里都靠双腿,废力是可以的,废力不讨好是不行的^^

真懂的只做不说,不懂的只说不做,说的不值钱,真值钱的不说,一知半解就给人讲课并误人子弟的那是骗钱.知道那么一点就马上瞎散的,那叫的瑟,是个分流员^^
Life it seems, will fade away
Drifting further every day
Getting lost within myself
Nothing matters no one else
I have lost the will to live
Simply nothing more to give
There is nothing more for me
Need the end to set me free
Things are not what they used to be
Missing one inside of me
Deathly lost, this can't be real
Cannot stand this hell I feel
Emptiness is filling me
To the point of agony
Growing darkness taking dawn
I was me, but now Has gone
No one but me can save myself, but it to late
Now I can't think, think why I should even try
Yesterday seems as though it never existed
Death Greets me warm, now I will just say good-bye

凯比论坛 http://bbs.kaibi.com
级别: 新手上路
注册时间:
2003-06-23
在线时间:
1小时
发帖:
2882
只看该作者 33楼 发表于: 2005-02-16
引用
最初由 alecli 发布
Assume 23.976
0,5493,23.9760
5494,5654,47.9523
5655,30424,23.9760
30425,30673,29.9693
30674,35249,23.9761

vfr mkv timecode文件如上

rmvb用weilai第一页说到的方法不能做到声音同步,尝试了各种fps,不是快几秒就是慢几秒。

avi用了weilai的方法成功压制。只是最后如果选了Change so video and audio durations match,在片尾会发现声音很微小提前,如果不是正好切换ed画面根本感觉不出,试了两个vfr mkv都是如此。


记错了些东西……当时作出来的rv4编码的mkv用mpc播放是同步的,放假回家以后用mplayer播的时候不同步,我还以为是以前看的时候没仔细检查所以就以为不同步了,应该是mplayer分离mkv的问题,用最新的matroska splitter来分离就没问题。我压出来的这个基本同步(之所以用“基本”是因为我感觉仿佛有点微小的不同步,<200ms,不知道是不是我的错觉……)

不学无术中..

eMule ID:[eDtoon][CHN]adamhj@eMule-Official
级别: 新手上路
注册时间:
2003-06-23
在线时间:
1小时
发帖:
2882
只看该作者 32楼 发表于: 2005-02-15
引用
最初由 NovemberRain 发布
喷晕..........楼上的几位

vfr mkv->120avi+sub+Effects(ae,ass均可)+Audio->vfr mkv->vfr rv
不就完了,以上步骤除最后->vfr rv一步为有损外,其他全是无损,哪里来的不同步,哪里来的丢frame?

麻烦是可以的,麻烦还错就不可以了^^


第一:我想我和ac都是在说vfr mkv的做法,而不是在讨论vfr rv的做法,至于其中说到rv是指mkv封装的rv编码
第二:很多事情我喜欢自己试试能不能成,特别是有些我觉得很有可能出问题的事,关于这些试验及其结果请不要指手划脚(比如这里我就是想试试rv编码的视频能否通过mkv的timecode来调整播放时的帧率,结果答案是否定的,或者至少我用的方法是错误的),真正做的时候我自然会用我认为没有问题的方法去做,那时候如果出了问题欢迎指出
第三:请你确定你发言时对人的针对性和指代关系,我想我和ac都没说过有丢frame的问题,请问你所说的“哪里来的丢frame”是针对谁的?我比较好奇这个“楼上的几位”具体是指谁。当然如果不是指我和ac的话,我现在说的所有话您就当是废话吧~

不学无术中..

eMule ID:[eDtoon][CHN]adamhj@eMule-Official
级别: 新手上路
注册时间:
2003-06-23
在线时间:
1小时
发帖:
2882
只看该作者 31楼 发表于: 2005-02-15
引用
最初由 alecli 发布
对,就是用nandub和成音频的时候,frame rate里面

另外rv不同步肯定不是dropdup的关系,直接播放avs就可以看出问题,看来还是先压avi再转rmvb保险...


vdm那里自然是不要改的…………

不学无术中..

eMule ID:[eDtoon][CHN]adamhj@eMule-Official
级别: 工作组
注册时间:
2004-08-30
在线时间:
0小时
发帖:
102
只看该作者 30楼 发表于: 2005-02-15
喷晕..........楼上的几位

vfr mkv->120avi+sub+Effects(ae,ass均可)+Audio->vfr mkv->vfr rv
不就完了,以上步骤除最后->vfr rv一步为有损外,其他全是无损,哪里来的不同步,哪里来的丢frame?

麻烦是可以的,麻烦还错就不可以了^^

真懂的只做不说,不懂的只说不做,说的不值钱,真值钱的不说,一知半解就给人讲课并误人子弟的那是骗钱.知道那么一点就马上瞎散的,那叫的瑟,是个分流员^^
Life it seems, will fade away
Drifting further every day
Getting lost within myself
Nothing matters no one else
I have lost the will to live
Simply nothing more to give
There is nothing more for me
Need the end to set me free
Things are not what they used to be
Missing one inside of me
Deathly lost, this can't be real
Cannot stand this hell I feel
Emptiness is filling me
To the point of agony
Growing darkness taking dawn
I was me, but now Has gone
No one but me can save myself, but it to late
Now I can't think, think why I should even try
Yesterday seems as though it never existed
Death Greets me warm, now I will just say good-bye

凯比论坛 http://bbs.kaibi.com
级别: 工作组
注册时间:
2002-04-21
在线时间:
1小时
发帖:
2410
只看该作者 29楼 发表于: 2005-02-14
对,就是用nandub和成音频的时候,frame rate里面

另外rv不同步肯定不是dropdup的关系,直接播放avs就可以看出问题,看来还是先压avi再转rmvb保险...
级别: 新手上路
注册时间:
2003-06-23
在线时间:
1小时
发帖:
2882
只看该作者 28楼 发表于: 2005-02-14
rv的我也弄得不同步,印象里应该是关了DropDub的,另外ac你说的Change so video and audio durations match是哪里的?vdm里那个?

不学无术中..

eMule ID:[eDtoon][CHN]adamhj@eMule-Official
级别: 工作组
注册时间:
2002-04-21
在线时间:
1小时
发帖:
2410
只看该作者 27楼 发表于: 2005-02-14
Assume 23.976
0,5493,23.9760
5494,5654,47.9523
5655,30424,23.9760
30425,30673,29.9693
30674,35249,23.9761

vfr mkv timecode文件如上

rmvb用weilai第一页说到的方法不能做到声音同步,尝试了各种fps,不是快几秒就是慢几秒。

avi用了weilai的方法成功压制。只是最后如果选了Change so video and audio durations match,在片尾会发现声音很微小提前,如果不是正好切换ed画面根本感觉不出,试了两个vfr mkv都是如此。
级别: 小荷初露
注册时间:
2002-07-26
在线时间:
0小时
发帖:
221
只看该作者 26楼 发表于: 2005-02-12
看得不是很明白,搞得我都有些糊涂了
级别: 版主
注册时间:
2002-12-02
在线时间:
0小时
发帖:
3002
只看该作者 25楼 发表于: 2005-02-09
<120fps to VFR MKV譯文>
所需工具:
1.
http://www.geocities.jp/aji_0/
下載
自動フィールドシフト インタレース解除プラグイン ver7.4(afs_74a.lzh)NEW
解開後至 \afs_74a\afs\converter 內有 avi2timecode.exe 及 avidelnull.exe 兩工具
2.
mkvtoolnix

步驟:
avi2timecode 120fps.avi timecodes.tmc
avidelnull 120fps.avi no_null_frames.avi
mkvmerge -o vfr.mkv --timecodes 0:timecodes.tmc no_null_frames.avi

可以理解的是:
第一行用 avi2timecode.exe 分析出 timecodes.tmc 文件
第二行用 avidelnull.exe 將 120fps 的 null frame 去除並生成新檔 no_null_frames.avi
第二行用 mkvmerge.exe 及 no_null_frames.avi、timecodes.tmc 製作 vfr.mkv

音訊方面,請另外處理
所以建議的方式使用 mmg.exe
開啟 120fps.avi 取其音訊
開啟 no_null_frames.avi 取其視訊
結合成 vfr.mkv

節錄於 妖精現実 2005年2月8日文
P.S. 文中有提到字幕之mkv合併,只是日文不行,又覺得應改不是什麼問題,所以不以記述

GUI介面(內含 avi2timecode.exe與avidelnull.exe)
1.
http://schema99.host.sk/index.php?action=downloadfile&filename=120fps2vfrmkv_gui.rar
2.for eMule
ed2k://|file|120fps2vfrmkv_gui.rar|55653|49A0C01F7C4901C6580DC7E1770FA65F|h=YM4OLMEMFJQAFBL6P3KDY5O57UQ2Z5A5|/

级别: 工作组
注册时间:
2002-04-21
在线时间:
1小时
发帖:
2410
只看该作者 24楼 发表于: 2005-02-09
解Timecodes文件GUI程式 不能下载,谁能mail给我,谢谢。

alec2008@hotmail.com