以前经常看到关于MKV VFR内嵌成AVI的讨论
个人觉得,直接做成内嵌的MKV VFR更方便
当然,外挂MKV就更方便了(众人齐殴……)
回到正题……
一、把120fps内嵌成MKV vfr 把MKV vfr内嵌成MKV vfr需要的工具:
AVI-tc-GUI package
mkvtoolnix
MkvExtract_GUI
Aegisub
MP&vfr_GUI
下面讲方法,对于最近的120fps、MKV vfr(aska RAW经常是60fpsED),使用降桢到24,那么原来30fps、60fps部分看起来会很卡,有两种方法,做内嵌120fps avi,或者做mkv vfr,shin建议使用MKV vfr。
1、第一步要得到CFR AVI和timecode v2,有几种途径
如果是120fps AVI,使用AVI-tc-GUI转成CFR AVI,timecode格式用V2
如果是MKV vfr,常用的有三种途径,其一是使用mp.exe和vfr_GUI,不过这个方法只能得到timecode V1,一些复杂的vfr处理起来不甚方便,于是废弃。第二个方法是使用新版MkvExtract_GUI,相比前代,它已经可以解出TC,这是个挺大的进步,当然我们也可以直接使用命令行mkvextract timecodes_v2 "Path\*.mkv" 1:name.txt。第三种方法使用haali提供的mkv2vfr.exe,例如mkv2vfr "C:\test.mkv" "C:\test.avi" "C:\Timecode.txt",
2、使用Aegisub载入原来的ass,video子项选timecode,导入刚才得到的timecode,Export subtitle,记得选上Transform framerate,输入fps填写CFR AVI的fps,output用Variable。得到校正后的ass,用这个ass去嵌CFR AVI。
4、得到内嵌好的CFR AVI,可以打包成品了。音频从MKV raw里面抽出来,timecode加上(如果使用vfr_GUI的话,记得在timecode文本开头加上这么一行 # timecode format v1,因为vfr_GUI解出来的没有这段,MKVToolnix会不认)
5、得到成品,看效果,画面完全和raw匹配。
二、把mkv vfr 嵌成 120fps1、分段内嵌法需要的工具:
avi60 223.3K
主要步骤和上面相同
这是一个古老的方法,请用参观博物馆的心情来面对它,得到内嵌好的CFR AVI后,不打包mkv,而是根据timecode找到变桢的地方,切开,恢复原始fps,使用AVI60插null进行120fps化,最后VDM连接。
或者,得到CFR avi 和 timecode 后
AVISource()
Textsub()
Trim(根据timecode得到的frame范围)
AssumeFPS(原来的fps)
以常见的60fpsED为例,正片、ED、预告,用trim分三次输出,使用AVI60做120fps,最后VDM连接。
这个方法很老,很欠扁,而且mkv vfr作120fps,本身就很无谓……
2、avi tc gui法需要的工具:
AVI-tc-GUI package
图标居然是千鸟不是上校,怒,英文不翻译了
This package includes the commandline programs cfr2tc (v1.3) and tc2cfr (v1.3), as well as a GUI frontend named tc-GUI for using them. tc-GUI is a c# program and will require the .NET framework (at least version 1.1) to run. cfr2tc and tc2cfr are plain c++ programs and do not require the .NET framework. Following are descriptions of cfr2tc and tc2cfr:
cfr2tc takes an avi file with a video stream containing null frames and outputs a new avi file containing the same video stream, but with all null frames removed and a v1 or v2 timecode file. It also has timecode file only modes that create the timecode file but do not create a new avi file.
tc2cfr turns an avi file (with each frame present once) into a new avi file with null frames that has the specified framerate and varying display length for each individual frame based on a v1 or v2 timecode file.
简单的说,cfr2tc就是输入120fps,得到去null的avi和timecode,一般是30fps化。而tc2cfr就是无null的avi和timecode去插null,显然,要把mkv vfr变成120fps,使用第二个功能十分方便。
tc2 to cfr——输入内嵌好的CFR avi——输入timecode——得到120fps
这个过程和aviread输入avi和asc得到120fs大同小异。
三、把MKV vfr/120fps 内嵌成24fps 把120fps内嵌成120fps 1、有损内嵌的方法 MKV vfr > 24fps分段内嵌是一个非常古老的办法,这里写出来只是让大家了解一下前辈们的探索 -v-,该方法仅适用于TC V1的情况,首先要得到TC V1,方法请到本贴前面找
以fate 08为例,该timecodes内容如下:
Assume 23.976
0,32127,23.9760
32128,34823,29.9700
34824,35779,23.9761
把文件切开,分段内嵌,最后合成音频就OK了,avs可以这样写:
LoadPlugin("VSFilter.dll")
a=AVISource("H:\down\Fate_08.avi")
b=trim(a,0,32127).AssumeFPS(23.976).changefps(23.976)
c=trim(a,32128,34823).AssumeFPS(29.970).changefps(23.976)
d=trim(a,34824,35779).AssumeFPS(23.976).changefps(23.976)
avifinal=b+c+d
avifinal=TextSub(avifinal,"H:\down\Fate_08.ass")
return avifinal
这个方法在AVS 2.5.6出现后失去了意义,我们可以使用directshow来进行有损内嵌,只要用convertfps便可,下面是一个样例:
loadplugin("E:\Program Files\GordianKnot\AviSynthPlugins\VSfilter.dll")
loadplugin("E:\Program Files\GordianKnot\AviSynthPlugins\DirectShowSource.dll")
DirectShowSource("H:\down\KASIMASI02.mkv",fps=119.88,convertfps=true)
Changefps(23.976)
TextSub("H:\down\KASIMASI02.ass")
至于120fps阉割的方法很简单,直接changeFPS就行了,不过严格的讲,应该分段进行select,不过既然要阉割,就甭费那个劲了。
2、120fps通常内嵌的方法 120fps > 30/24fps >120fps需要的工具:
avir0927.rar
sube060b.rar
AVI-tc-GUI package
首先是古老的AVIread法,请按照如下步骤进行:
1、确认你安装了Microsoft Frameworks 2.0,没有的话,老老实实去下吧。
2、运行AVIRead,打开120fps raw,file--export script file (120fps),得到asc,后缀用asc或txt,这个和timecode性质一样。
3、edit--remove drop frames--remove all drop frames,这个很好理解,就是去掉null桢,接下来edit--change frame rate--24000/1001,然后save as,得到一个没有null桢的avi。
这里说下24000/1001=23.976,30000/1001=29.970,60000/1001=59.940,12000/1001=119.880 都是常用的公式,要说为什么,大约和展频有关,抗干扰什么的,shin也不是很明白。
4、后面是关键的一步,用第一步得到的asc去校正ass,得到一个新的ass,注意aviread会改ass脚本,之后在改回来就是 = = ,用这个新的ass去嵌没有null的avi,得到成品,暂且叫它temp.avi
5、把temp.avi插null复原到120fps,aviread导入asc,edit--insert drop frames (120fps),导入asc,save as,得到120fps成品。
可以看到,这个方法和内嵌vfr MKV其实本质没有区别,只不过vfr围绕timecode进行,120fps围绕asc进行,本质上都是通过一个介质来修正ass,个人觉得,和avs trim法相比,这个方法更有效。
AVI_TC_GUI 法:
由于AViread已经多年没有更新了,现今使用比较多的都是AVI_TC_GUI,,处理方法如下:
进入cfr2tc标签,操作后得到去null的av和timecode V2,后面用Aegisub搞定,最后再进tc2cfr标签插null。avi tc gui等于就是aviread的tc版,不过有了Aegisub的ass校正帮助,avi tc gui可以搞定一切,汗。
最后再提一下,有些复杂的120fps使用aviread会出现奇怪的RP,如果你看到asc输出了长长的好几页,很有可能是aviread判断null桢出现了问题,如果用这个asc去校正ass有时会出现RP,shin曾经遇到aviread长时间失去响应的情况。建议这种120fps还是做mkv vfr比较稳妥。
========================================
附录:WMV vfr的处理方法
不少小日本喜欢搞怪,弄个WMV的容器还是vfr的,于是我们要用RP来对付它
几个工具:
http://haali.cs.msu.ru/mkv/MatroskaSplitter.exehttp://home.comcast.net/~appleguru/graphedt_october2004.ziphttp://haali.cs.msu.ru/mkv/mkv2vfr.exe第一步用graphedit,打开WMV之后,把所有解码滤镜全部删除,保留原始文件,然后开始手动添加滤镜,在direct show filter中找到haali Matroska muxer,添加,这时候会让你指定文件地址,比如把文件保存为test.mkv,点确定,这样graphedit中就多出一个haali Matroska muxer的方框,它代表了这个滤镜,把WMV文件输出和haali Matroska muxer的video输入相连接,play the graph,得到test.mkv。
还是graphedit,打开WMV,删除所有滤镜,但是保留声音解码滤镜,增加file writer,输入要保存的文件名,例如teat.wav,把解码后的wav连接到file writer,play the graph,得到test.wav。当然,也可以用AVS调用directshow载如WMV,然后在VDM中save wave,这个原理相同,只是graphedit是把后台工作给表示出来了而已。这里我们也可以看到graphedit的作用,就是从底层调用各种解码编码滤镜,摆脱那些外壳程序的束缚。
第二步,用mkv2vfr.exe得到CFR的AVI和Timecode v2 这个用dos命令行实现,把"mkv2vfr.exe"拷贝到win\system32,然后运行cmd,输入mkv2vfr "C:\test.mkv" "C:\test.avi" "C:\Timecode.txt"
中间有空格,最后,用这个avi和tc插120fps,和声音合成,就可以做成avi了。
此外另一种偏方,使用VirtualDub-MPEG2,这个工具修改了VD的代码,实现对WMV ASF容器的支援,用它从WMV中搞出AVI,再用WMVTIMES.exe搞出timecode,最后插120还是包vfr随便了。
最后再介绍下MP4 vfr的处理,包含有X264的MP4 vfr