adaddwhatisspecificallyyourown—-禁止使用,禁止使用
视频的帧率这一部分,表面上是相当简单和基础的,但实际上即使深入挖掘,也能写大部分的书。 我们还是继承了温故知新的逻辑。 从眼前的什么东西开始整理,也许有些地方你没有思考过,或者深入了。
帧速率的含义
视频是从连续工作的图像中播放的,当时第一次生动地播放电影时,现场看过电影的人一定是睁大了嘴瞪大了眼睛吧,世界也由此发生了变化。 以下面这段1887年拍摄的最早期视频为例,它由15张300×200的图像组成,播放时间为1.5秒。 仔细观察各图的左下角,会分别显示出图像编号。
你可以看到组成这个视频的所有画面。
每秒播放视频的图像数。 该值定义为帧速率,单位为每秒帧数fps )。 不仅应用于视频技术,还应用于动画、游戏、相机、显示设备等所有与收集和显示相关的场所。 例如,上面的视频的帧速率如下:
video _ frame _ rate=15/1.5=10在FPS
帧率标准
电影电视发展初期,不同国家使用的帧率方式有所不同。 典型的设定如下
24 FPS 电影、ATSC、2k、4k、6k ) 24 FPS ) pal )主要用于中国、欧洲、乌拉圭、阿根廷、澳大利亚等地)、SECAM )、中东、法国、东欧等)
其原因主要是在黑白电视时代,各国家电网的不同,例如美国电力系统的频率传输50Hz 传输30 fps的信号)、中国、欧洲电力系统的频率传输50Hz )的信号,所以各国的电视信号是根据各国自身的传输网的状况而设定的彩色电视机发明后,为了支持黑白信号,防止显示异常,进行了信号微调,将帧率调整为NTSC方式,即30/1.001=29.970。
但是,具体来说,如何将30fps的内容控制在29.970呢? 这不能不提timecode的概念。
从010年到1010年拍摄电影时,由于有多台机器,多台相机收集到的信号很难对齐准确的时间戳。 这样做后期非常难。 timecode于1967年由一家名叫EECO的摄像机和视频后期视频公司发明,此后SMPTE采用了这一概念并将其标准化。 它的形式很直率:
这样不同内容之间的同步问题得到了完美的解决。 然后可以使用timecode寻找准确的视频帧。
这里有必要明确一个要点。 由于每秒的帧数可能不确定,所以无法通过timecode完全估计帧率。 而且两者概念不同,timecode主要用于定位视频帧,帧速率主要用于在录像和播放两侧的图像上显示速度。
问题定义为
timecode
,是为了确保完全帧同步,作为后期制作的一部分获取29.97fps的内容的方法。
如果从内容制作方解决这个的话
问题,可能会是个噩梦。因为不同种类的摄像机拍摄,设置不同,回来的内容就不可控,到了后期通过其他手段进行帧率填充成本极高(尤其在老式的视频编辑设备上)。所以这条路径被封死了。
于是大家想到了timecode,发明了Drop-Frame Timecode的方法。
具体的流程是这样的,如果你采集的信源是30fps,但是制作需要29.97fps,那么在每个10分钟区间里,除了第一分钟外,每分钟的前两个timecode的帧都被丢弃掉(即.00, .01两个帧)。这样的话,10分钟内的视频帧一共有:
TotalFrames = 10 x 60 x 30 – 9 x 2 = 17982 frames
所以最后的帧率为
OutputFrameRate = 17982 / 10 x 60) = 29.97 fps
这是个非常物理的设计,信源其实没有任何变化,但是输出却自动适配了。一方面跟原来30fps的黑白信号频率岔开了,另一方面帧率尽可能接近30fps,并达到了一个准确的值。这样的设计在那个半自动化半机械的年代里,有很多案例,由于当时的客观技术与平台因素制约,最终解决方案都给人一种工程美感。
这个事情在数字化之后,其实一来没有那么多制式的限制了,二来数字化时代,所有的采样灵活度更高,帧率设定大部分情况下,只是一个参数设置,软件可以做的事情越来越多,但了解历史会让人更清楚它的来龙去脉。
帧率多高算够
这个问题真没有特别明确的答案。
我们都知道物理上有个实验结果,大脑反应图像的速度接近于0.1秒每张。这个说明,人眼每秒可以处理10张到12张图片,并可以独立地识别与认知它们。如果一秒里包含了更多图像,它们将被认知为运动。而如果显示设备的显示频率较低的话,人眼会感觉到明显的闪烁,并随着暴露时间的变长产生严重的疲劳感。久而久之,将罹患比较严重的眼部疾病,或是严重的近视。
一般显示设备的亮度越高,人眼感觉不到闪烁需要的帧率越高,反之,越低。我们用电影银幕为例,无闪烁感要求关系如下:
所以显示器的刷新率一般至少都在50Hz以上。另外电影院因为屏幕亮度高,对于帧率的要求就更高,诺兰之类的大导演经常会要求120Hz的片源,会让人观看体验提升非常明显(越专业的人看到的提升越明显)。另外高帧率看惯了,低帧率就再也回不去了。
夜里关灯看手机也真的是影响眼睛,屏幕亮度高,近距离看,屏幕刷新率固定的,一定会有屏幕闪烁的感觉,一定会视疲劳,非常容易加深眼睛伤害。
目前看现在应用级别的视频,上限帧率应该是120Hz,特殊场景,如医学、微观世界研究,可能会需要更高的帧率,它们也不是像我们看电影这样快速的看,会放慢动作,看得更精细。所以回到我们的判断,没有明确的答案,只有应用场景的要求。
帧率是否有其他的研究点
Video Framerate Up Conversion
视频帧率提高(Video Framerate Up Conversion或Video Frame Interpolation等),是非常典型的一个研究点,这几年还在继续有一些新的技术产出。
一般做这个事情是出于两个目的:
•在不改变信源的情况下,将原有视频内容以更高帧率展示,观感更平滑(加强运动感知),用在播放器上,提升观看体验
•在不改变信源的情况下,将原有视频的帧数变多,以相对低的帧率进行展示,实现慢动作、慢镜头效果Slomo),用在特效制作上,提出某些特效。
有一个比较老的项目,在帧率拉升上做得真的不错,叫SVPFlow[1]。它是运行在AviSynth上的一个效果插件,底层用到另外一个视频运动分析工具MVTools2[2],在绝大部分视频源上跑下来的结果都非常平滑(本身MVTools2这个插件也非常棒,在帧间运动分析上效果还是不错的,对于一些CV算法有帮助的)。
当然另外就是通过CNN等这些AI算法去进行更高级别的运动分析,然后生成新的视频帧。如2017年发表在CVPR上的Video Frame Interpolation via Adaptive Convolution[3],就是这样一个算法。这个算法作者也提供了开源的实现,有兴趣也可以到github项目页[4]去下载测试。
每个视频的算法,都有机会使用AI技术进行加强(当年参加ICME发文章的讲论文的时候,也是这么说,跟一个美国教授在探讨这个事情,他极不认可这个说法,这么多年过去了,各新的压缩标准已经把AI逐渐用在各个地方了,也算是给当年的一个判断的了断吧)。
Video Framerate Down Conversion
与提升视频帧率作用相反,大量的非编和后期软件现在都提供了这个功能,虽然它不能给人愉悦感,但是在某些场合下,是可以实现一些特效的,比如香港80年代鬼片里,经常会用到这种效果,然后再配个阴森的音乐,来给人一种害怕的感觉。案例效果太晦气,就不放在文章里了,大家有兴趣可以自行寻找。
写在最后
当我们沿着这个行业里最基础的这些部分一点点整理过去的时候,很多时候会发现过去的技术人跟现在的技术人关注点真的有比较大的差异了,有好多原来非常复杂的问题,现在变简单了或是更夸张,变没了。但是解决问题的思路没有变,解决问题的时候人的智慧给人带来的愉悦感没有变。
我有一本2008年从北航的一个二手书店里购买的《影视技术概论》,应该是当时某个专业里的教材,现在也只有二手书还有可能能买到了。当时购买人叫伊能,他买于2006年9月30日。书里还留着他的签名,以及他学习里详细的笔记,也不知道15年过去了,他在哪,现在怎么样。虽然里面的技术好多现在只用在电影制作里,但是里面的信息都扎根好深,说得好透。所以有时候真的感慨,技术发展那么快,基础技术是否受到关注度太低了。我们还是继续守好初心,在五年计划里,把能整理的一点点整理出来,也许会使有些人受益吧。
References
[1] SVPFlow: http://avisynth.nl/index.php/SVPFlow[2] MVTools2: http://avisynth.nl/index.php/MVTools[3] Video Frame Interpolation via Adaptive Convolution: https://arxiv.org/abs/1703.07514[4] github项目页: https://github.com/sniklaus/sepconv-slomo