查看“Vfr处理”的源代码
←
Vfr处理
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于这些用户组的用户执行:ninja、
机器人
、
管理员
您可以查看和复制此页面的源代码。
==AviSynth, 可变帧速率(vfr)和混合视频(hybrid video)== 根据帧速率可将视频分为两种类型,固定帧速率(CFR)的视频和可变帧速率(VFR)的视频.CFR视频帧速率为恒定值,VFR视频帧速率为非恒定值.许多视频编辑程序(例如VirtualDub和AviSynth)都假设VFR视频的帧速率为恒定值因为AVI不支持VFR.由于[http://forum.doom9.org/showthread.php?s=&threadid=69132 一系列的原因],这在不久的将来也是不会改变的.虽然AVI容器不支持VFR,但有一些容器(例如MKV,MP4和WMV/ASF)支持VFR. 混合视频通常定义为一个混合着pulldown和non-pulldown(pulldown可以是场,标准的3:2 pulldown,或full frame)的视频.这与pulldown是否是硬性(在回放时 场field/帧frame 重复)或软性(流stream中加入这标记表明在播放时哪些 场field/帧 frame是重复的)无关.所以,它可以是CFR或VFR.因此,混合视频是简单地混合着不同的帧速率(如通常用于动画的8,12和16fps)原始帧率base framerate是pulldow之前的速率的视频.这种视频需要根据内容决定最终的帧速率. ===可变帧速率和混合视频=== ---- 我们需要知道通常视频都是CFR的.但是混合视频转换成VFR是很常见的VFR的例子. 混合视频是混合着不同原始帧速率base framerate的视频 (如通常用于动画的8,12和16fps). 更常见的混合视频的例子是由部分隔行扫描interlaced/progressive NTSC (29.97 fps)和部分FILM (胶卷过带将23.976 fps 转成29.97 fps)组成的视频. 软性pulldown, NTSC的部分(也叫做视频video部分)回放速度是29.97 fps和添加重复帧胶卷过带telecined的部分(23.976 fps转换至29.97 fps). 硬性pulldown,没有增加任何场fields且回放速度是29.97. 另一个混合视频的例子是现代电视动画,科幻电视剧例如SG1,星级迷航,TNG和巴比伦5,和很多纪录片DVD. [[TIVTC]]工具被设计成无损处理混合视频的,[[Decomb]]工具则通过合成来将视频处理成CFR. ===如何分辨VFR视频(mkv/mp4)=== ---- 这里有一些判断mkv/mp4是否是VFR的方法: '''mpeg-2''': DGIndex可以检查Film/Video的比例, 它可以告诉你有多少内容是软性pulldown的. 它不能处理硬性pulldown, 它也不能准确的识别视频当视频中混合着软性pulldown和硬性pulldown. '''mkv''': 用[http://haali.cs.msu.ru/mkv/mkv2vfr.exe mkv2vfr]或[http://www.bunkus.org/videotools/mkvtoolnix/downloads.html mkvtoolnix]取出timecodes.txt文件. '''mp4''': 用mp4dump([http://www.rarewares.org/mp4.html from the MPEG4 tools by MPEG4ip package]). 打开命令行节目并输入(使用相对路径) mp4dump -verbose=2 holly_xvid.mp4 > log.txt 打开log文件,你会看到类似下面的代码(看stts部分来找出每一帧的长度): type stts version = 0 (0x00) flags = 0 (0x000000) entryCount = 41 (0x00000029) sampleCount = 3 (0x00000003) sampleDelta = 1000 (0x000003e8) sampleCount[1] = 1 (0x00000001) sampleDelta[1] = 2000 (0x000007d0) sampleCount[2] = 3 (0x00000003) sampleDelta[2] = 1000 (0x000003e8) sampleCount[3] = 1 (0x00000001) sampleDelta[3] = 2000 (0x000007d0) etc ... sampleDelta显示帧frames的长度,sampleCount显示有多少帧frames. 根据上面的例子我们得到如下数据: 3帧frames显示长度1000 1帧frames显示长度2000 3帧frames显示长度1000 1帧frames显示长度2000 .......... 显示长度的值的单位不是秒而是滴答"ticks", 你可以通过时间表"timescale"来计算时间. 时间表"timescale"被存储在视频轨track里(确定你看的是正确的轨, 因为每个轨都有它自己的时间表timescale). 找这样的输出内容: type mdia type mdhd ... timeScale = 24976 (0x00006190) duration = 208000 (0x00032c80) language = 21956 (0x55c4) reserved = <2 bytes> 00 00 在本例中时间表timeScale是24976. 大多数帧frames的显示长度是1000. 1000/24976 = 0.04这意味着前3帧frames每一帧显示了0.04秒,与25 fps (1/25 = 0.04)是相同的. 下一个帧的显示长度是2000. 2000/24976 = 0.08这意味着这一帧显示了0.08秒, 与12.5 fps (1/12.5 = 0.08)是相同的. etc ... 从上面例子中的log文件可以看出这个视频是混合视频 ==在AviSynth中打开MPEG - 2混合视频并重新编码== 假设你有混合视频,这里有列出几种方法对它进行编码.第一种方法是将它转换为cfr视频(23.976 fps或29.97 fps). 第二中方法是编码成120 fps的avi并且丢帧dropped frames (其中重复的帧null帧将被丢弃后播放). 第三中方法是使用mkv或mp4容器创建一个真正的vfr. ===编码至CFR(23.976 fps或29.970 fps)===
返回至“
Vfr处理
”。
导航菜单
个人工具
登录
名字空间
页面
讨论
不转换
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
台灣正體
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
社区门户
新闻动态
最近更改
随机页面
帮助
工具
链入页面
相关更改
特殊页面
页面信息
其他资源
AviSynthWiki(英语)
avisynth.info(日语)
NMM论坛(讨论区)