“Vfr处理”的版本间的差异

来自NMM Doc
跳到导航 跳到搜索
第6行: 第6行:
===可变帧速率和混合视频===
===可变帧速率和混合视频===
----
----
 我们需要知道通常视频都是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.
 我们需要知道通常视频都是CFR的.但是混合视频转换成VFR是很常见的VFR的例子. 混合视频是混合着不同原始帧速率base framerate的视频 (如通常用于动画的8,12和16fps). 更常见的混合视频的例子是由部分隔行扫描interlaced/progressive NTSC (29.97 fps)和部分FILM (胶卷过带将23.976 fps 转成29.97 fps)组成的视频. soft pulldown, NTSC的部分(也叫做视频video部分)回放速度是29.97 fps和添加重复帧胶卷过带telecined的部分(23.976 fps转换至29.97 fps). hard pulldown,没有增加任何场fields且回放速度是29.97. 另一个混合视频的例子是现代电视动画,科幻电视剧例如SG1,星级迷航,TNG和巴比伦5,和很多纪录片DVD.


[[TIVTC]]工具被设计成无损处理混合视频的,[[Decomb]]工具则通过合成来将视频处理成CFR.
[[TIVTC]]工具被设计成无损处理混合视频的,[[Decomb]]工具则通过合成来将视频处理成CFR.

2010年10月30日 (六) 14:30的版本

AviSynth, 可变帧速率(vfr)和混合视频(hybrid video)

根据帧速率可将视频分为两种类型,固定帧速率(CFR)的视频和可变帧速率(VFR)的视频.CFR视频帧速率为恒定值,VFR视频帧速率为非恒定值.许多视频编辑程序(例如VirtualDub和AviSynth)都假设VFR视频的帧速率为恒定值因为AVI不支持VFR.由于一系列的原因,这在不久的将来也是不会改变的.虽然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)组成的视频. soft pulldown, NTSC的部分(也叫做视频video部分)回放速度是29.97 fps和添加重复帧胶卷过带telecined的部分(23.976 fps转换至29.97 fps). hard 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: 用mkv2vfrmkvtoolnix取出timecodes.txt文件.

mp4: 用mp4dump(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)