视频帧率的故事与一些细节

知名青少年白癜风专家 https://m.39.net/disease/a_5436994.html

Adaptwhatisuseful,jectwhatisuseless,andaddwhatisspecificallyyourown.---BruceLee

视频帧率这个部分,虽然表面上蛮简单基础的,但是其实深挖起来,也够写大半本书的。我们还是秉承着温故知新的逻辑,从眼前的一些东西整理一下,也可能会有一些你不曾想到或深入地点。

帧率的含义

视频是由连续运动的图像播放而来的,不知道当时第一次把电影活灵活现地播放出来的时候,是不是现场看到过电影的人们一定是张大了嘴,瞪大了眼睛,世界也从此不同了。以下的这个年拍摄的最早期的视频为例,它是由15张x的图像组成,在1.5秒播放完成的。仔细看每张图的左下角,每一张都标注了它的图像号:

我们可以看到组成这个视频的所有画面。

每秒钟视频要播放的图片数,这个值即被定义为帧率,单位为fps(framespersecond)。它不只在视频技术中被应用,也在动画、游戏、相机、显示设备等所有采集和显示有关的地方应用着。比如上面的视频,它的帧率为:

Video_Frame_Rate=15/1.5=10fps

帧率标准

在电影电视发展早期,每个国家使用的帧率制式是有区别的,一个比较典型的设定是:

24fps(电影、ATSC、2k、4k、6k)25fps(PAL(主要用在中国、欧洲、乌拉圭、阿根廷、澳大利亚等)、SECAM(中东、法国、东欧等)、DVB、ATSC)29.97fps(NTSC(美洲、日本、韩国、东南亚等),ATSC、PAL-M(巴西))30fps(ATSC)

造成这个局面的原因主要因为在黑白电视时代,各国家电网的不同,比如美国电力系统频率为60Hz(传输30fps信号),而中国、欧洲电力系统频率为50Hz(传输25fps信号),所以各国电视信号都按各国自己传输网络的情况进行了设定。彩色电视被发明之后,为了兼容黑白信号并防止出现显示异常,所以做了信号微调,把帧率调整到NTSC制式,即30/1.=29.。

但具体是如何将30fps的内容控制在29.呢?这就不能不提一下timecode的概念。

timecode

早年间在拍电影的时候,因为有多个机位,多个摄像机采集的信号如何很难保证精准的对齐时间戳。这样在做后期的时候非常困难。timecode是在年由一家叫EECO的从事视频摄像机和视频后期视频的公司发明的,后来SMPTE采纳了这个概念,并将它标准化。它的格式非常直白:

这样不同内容间同步的问题被完美地解决掉了。而且你可以使用timecode定位到一个准确的视频帧。

这里需要明确一个点,因为每秒里的帧数有可能不确定,所以不能完全用timecode去推断帧率(而且两者概念不一样,timecode主要为了定位视频帧的,帧率主要是为了给录制和播放两侧图像显示速度的)。

29.97如何而来

这个问题的定义是我们如何在后期制作的环节获得29.97fps的内容,以保证完全的帧同步。

如果从内容生产端解决这个问题,可能会是个噩梦。因为不同种类的摄像机拍摄,设置不同,回来的内容就不可控,到了后期通过其他手段进行帧率填充成本极高(尤其在老式的视频编辑设备上)。所以这条路径被封死了。

于是大家想到了timecode,发明了Drop-FrameTimecode的方法。

具体的流程是这样的,如果你采集的信源是30fps,但是制作需要29.97fps,那么在每个10分钟区间里,除了第一分钟外,每分钟的前两个timecode的帧都被丢弃掉(即.00,.01两个帧)。这样的话,10分钟内的视频帧一共有:

TotalFrames=10x60x30-9x2=frames

所以最后的帧率为

OutputFrameRate=/(10x60)=29.97fps

这是个非常物理的设计,信源其实没有任何变化,但是输出却自动适配了。一方面跟原来30fps的黑白信号频率岔开了,另一方面帧率尽可能接近30fps,并达到了一个准确的值。这样的设计在那个半自动化半机械的年代里,有很多案例,由于当时的客观技术与平台因素制约,最终解决方案都给人一种工程美感。

这个事情在数字化之后,其实一来没有那么多制式的限制了,二来数字化时代,所有的采样灵活度更高,帧率设定大部分情况下,只是一个参数设置,软件可以做的事情越来越多,但了解历史会让人更清楚它的来龙去脉。

帧率多高算够

这个问题真没有特别明确的答案。

我们都知道物理上有个实验结果,大脑反应图像的速度接近于0.1秒每张。这个说明,人眼每秒可以处理10张到12张图片,并可以独立地识别与认知它们。如果一秒里包含了更多图像,它们将被认知为运动。而如果显示设备的显示频率较低的话,人眼会感觉到明显的闪烁,并随着暴露时间的变长产生严重的疲劳感。久而久之,将罹患比较严重的眼部疾病,或是严重的近视。

一般显示设备的亮度越高,人眼感觉不到闪烁需要的帧率越高,反之,越低。我们用电影银幕为例,无闪烁感要求关系如下:

所以显示器的刷新率一般至少都在50Hz以上。另外电影院因为屏幕亮度高,对于帧率的要求就更高,诺兰之类的大导演经常会要求Hz的片源,会让人观看体验提升非常明显(越专业的人看到的提升越明显)。另外高帧率看惯了,低帧率就再也回不去了。

夜里关灯看手机也真的是影响眼睛,屏幕亮度高,近距离看,屏幕刷新率固定的,一定会有屏幕闪烁的感觉,一定会视疲劳,非常容易加深眼睛伤害。

目前看现在应用级别的视频,上限帧率应该是Hz,特殊场景,如医学、微观世界研究,可能会需要更高的帧率,它们也不是像我们看电影这样快速的看,会放慢动作,看得更精细。所以回到我们的判断,没有明确的答案,只有应用场景的要求。

帧率是否有其他的研究点

VideoFramerateUpConversion

视频帧率提高(VideoFramerateUpConversion或VideoFrameInterpolation等),是非常典型的一个研究点,这几年还在继续有一些新的技术产出。

一般做这个事情是出于两个目的:

在不改变信源的情况下,将原有视频内容以更高帧率展示,观感更平滑(加强运动感知),用在播放器上,提升观看体验

在不改变信源的情况下,将原有视频的帧数变多,以相对低的帧率进行展示,实现慢动作、慢镜头效果(Slomo),用在特效制作上,提出某些特效。

有一个比较老的项目,在帧率拉升上做得真的不错,叫SVPFlow[1]。它是运行在AviSynth上的一个效果插件,底层用到另外一个视频运动分析工具MVTools2[2],在绝大部分视频源上跑下来的结果都非常平滑(本身MVTools2这个插件也非常棒,在帧间运动分析上效果还是不错的,对于一些CV算法有帮助的)。

当然另外就是通过CNN等这些AI算法去进行更高级别的运动分析,然后生成新的视频帧。如年发表在CVPR上的VideoFrameInterpolationviaAdaptiveConvolution[3],就是这样一个算法。这个算法作者也提供了开源的实现,有兴趣也可以到github项目页[4]去下载测试。

每个视频的算法,都有机会使用AI技术进行加强(当年参加ICME发文章的讲论文的时候,也是这么说,跟一个美国教授在探讨这个事情,他极不认可这个说法,这么多年过去了,各新的压缩标准已经把AI逐渐用在各个地方了,也算是给当年的一个判断的了断吧)。

VideoFramerateDownConversion

与提升视频帧率作用相反,大量的非编和后期软件现在都提供了这个功能,虽然它不能给人愉悦感,但是在某些场合下,是可以实现一些特效的,比如香港80年代鬼片里,经常会用到这种效果,然后再配个阴森的音乐,来给人一种害怕的感觉。案例效果太晦气,就不放在文章里了,大家有兴趣可以自行寻找。

写在最后

当我们沿着这个行业里最基础的这些部分一点点整理过去的时候,很多时候会发现过去的技术人跟现在的技术人


转载请注明:http://www.aierlanlan.com/cyrz/8259.html