视频基础小结

        最近的业务恰巧涉及到了视频相关的测试,也正逢直播答题类节目如火如荼之际,所以和大家分享些视频相关的基本知识。

视频初体验

       大多数人接触视频应该都是从动画片开始的。动画片是视频的一种,画面是构成视频最重要的存在形式。利用人眼的视觉延迟原理,将画面以一定的帧率播放,便可以呈现连贯的视频。我们观看视频,最直观的体验应该是视频是否卡顿,以及播放画面是否清晰,这些体验问题又与视频文件的参数设置紧密相关。 那接下来我们看一看与视频有关的参数。

视频基本参数

l  帧率

       帧率,即每秒显示帧数(Frames per Second,简称fps)。理解起来比较直观,故引用百度百科的描述。由于人眼睛生理结构的特殊性,当所看画面的帧率高于16的时候,就会认为画面是连贯的,此现象称为视觉暂留。这也就是为什么电影胶片是一格一格拍摄出来,然后快速播放的。一般而言,帧率越高,体验越好。通常的电影拍摄及播放帧率均为每秒24帧;对于游戏而言,如果fps<30的话,就会显得不连贯,移动开发中要想保证有流畅的游戏体验,必须尽可能地将显示性能优化到60fps。所以问题来了--

为什么同样是连贯的视觉体验,电影只需要24fps,游戏需要至少30fps?

       之所以如此,是由于电影和游戏画面生成方式有着本质上的不同。

       电影的画面是拍摄的实际场景,在快门时间内传感器和胶片持续曝光,场景的动态变化都会被拍摄下来,间隔一段时间后在另一张胶片上再曝光一段时间。如此得到的每一帧画面包含信息量都很大。运动的场景在电影的画面上会有一条运动轨迹,这个现象叫做动态模糊。而游戏的画面是由显卡生成的,每一帧由显卡计算生成的画面都清晰地展示着瞬时信息,但帧与帧之间的过程是缺失的,不会出现刚才所说的动态模糊现象。所以游戏的帧数需要足够高,让帧与帧之间的变化尽量小,如此才会产生较好的游戏体验。现在很多赛车类的单机游戏,当速度变得很快的时候,也会加上模拟动态模糊的特效,虽然是模拟出来的效果,但也在一定程度上起到了优化用户体验的作用。

       另外,对于游戏而言,流畅感并不仅仅来自于视觉方面,操作的流畅也是一个不可忽视的问题。决定操作流畅感的,主要是操作响应时间。这是指玩家进行操作后,游戏画面反映出该操作的结果所需要的时间。根据目前大多数游戏引擎运行的方式,操作相应过程至少需要3帧画面的时间间隔才能体现。帧率为30fps时,每帧显示33ms,响应极限大概是100ms;帧率为60fps时,每帧显示16ms,响应极限大概是50ms。单从这来看,对游戏玩家而言,帧率为60fps明显会比30fps流畅。

既然帧率越高,体验越好,究竟为什么移动开发性能优化的目标是60fps,而不是更高呢?

       这其中的原因就要从我们使用的设备说起了。液晶显示器刷新率一般都在60帧,开启垂直同步(显示器刷新速率=GPU渲染速率)后,画面也只能锁死在60帧。那为什么要开垂直同步呢,其实是为了解决偶尔发生的画面撕裂的情况。视频播放时,显卡生成图像的频率和显示器刷新图像并显示的频率是互相独立的。前者频率是变化的,而后者频率是固定的,如果二者之间不同步,很容易出现在下一帧图像未渲染完毕时,显示器已经开始绘制显示了。如下图,上下屏出现了横向错开的情况。

视频基础小结


l  分辨率

       说到分辨率,必然会涉及到像素的概念。像素可被视为图片中不可分割的单位,以一个单一颜色的小格存在。像素是分辨率的单位,通常我们说的相机像素,其实是最大像素值的意思,即相机所支持的最大有效分辨率。例如,500万像素的相机,其分辨率为2560*1920。常用的分辨率单位有:dpi(点每英寸)和ppi(像素每英寸),很多UI设计稿中也会以dpi为单位。

       分辨率可以分类为两个方向,显示分辨率和图像分辨率

      显示分辨率,又称屏幕分辨率,是指显示器所能显示的像素有多少。显示器尺寸固定时,可显示像素越多,显示分辨率越高,画面就越精细;显示分辨率一定时,显示器尺寸越小,画面越精细。

       图像分辨率,则是单位英寸内所包含的像素点数。图像分辨率一定程度上决定着图像输出的清晰度,和图像尺寸一起决定了文件占用磁盘空间的大小。

       同样在此我们引入两个问题:

如何避免通过微信发送的视频或图片,查看时清晰度下降的问题?

       微信在网络数据传输时,为了节省用户流量会将视频或图片进行压缩。对方用户收到的图片分辨率会比较低,因而影响了清晰度。这本来是一个贴心的设计,有时候也给用户带来一些困扰。但微信自身也提供了相应的解决方案,即“原图发送”。细心的用户会发现,原图发送对于图片而言不会再降低其分辨率,但以原图形式发送的视频其分辨率还是会下降。如下图分别为iPhone 6s系统相机拍摄视频和通过微信“原图发送”的视频参数对比。源文件分辨率为1920*1080,文件大小108MB,通过微信“原图发送”后的视频文件分辨率为960*544,文件大小为6.67MB。所以如果想发送一个体积较大的视频文件,我们还是需要采取其他的方式。

视频基础小结

视频基础小结

压缩成低分辨率的视频转为高分辨率,画面会清晰么?

       影响视频清晰度的主要因素有三个:一是视频格式,二是视频分辨率,三是我们稍后说到的视频码率。假设其他两个因素相同的情况下,压缩后分辨率低的视频转为高分辨率,一般画面也是不会变清晰的。因为压缩时降低分辨率,信息的损失是不可逆的。非严格意义上说,分辨率下降就是将原来四个像素的颜色混合平均,变成一个像素的颜色。但这并不代表通过这种方式提高分辨率,画面一定不会变清晰。对于色彩变化规律性较强,色彩分布简单有序的视频,在提高分辨率的时候,画质是有可能提升的。


l  码率

       码率是数据编码传输时单位时间内传送的比特位数,常用单位为bps(Bit per Second)。通俗一点就是取样率,单位时间内取样率越大,精度越高,处理出来的文件就越接近源文件。但是文件体积与取样率是成正比的,几乎所有的编码格式都很注重如何用最低的码率达到最小的失真(编码时会有数据量的压缩,可以通过控制压缩比来控制编码压缩后的码率)。文件体积与码率的关系为:文件体积(单位:M)=视频时长(单位:s)x码率/8。例如,网络上的一部90分钟1Mbps码率的视频文件,其体积就为5400s x (1Mb/s)/8 = 675MB。通常来说,一个视频文件包括了画面和声音。视频和音频有其各自不同的采样方式和比特率,我们所说的一个视频文件码率大小,一般是指视频文件中音频和视频信息码率的总和。

       既然刚才提到了视频文件的几个基本参数,那么帧率,分辨率和码率这几个参数对视频清晰度有怎样的影响呢?

       首先我们通过两个计算公式来将这几个参数结合起来:

       帧率 x 分辨率 = 压缩前的每秒数据量

       压缩前每秒数据量 / 压缩比 = 码率

       所谓“清晰”,是指画面细腻,没有马赛克,并不是分辨率越高图像就越清晰。

       在码率一定的情况下,分辨率与清晰度成反比关系,分辨率越高,图像越不清晰;在分辨率一定时,码率和清晰度成正比关系,码率越高,图像越清晰。

       好的画质是帧率、分辨率和码率三者之间的平衡:

(1)   根据支持的业务,设置适当的帧率。如果限定码率时,帧率越高,编码器就必须加大对单帧画面的压缩比,也就是需要降低画质来承载足够多的帧数;

(2)   码率不是越大越好,因为码率越大每秒钟需要用更多的数据量来对应较高的清晰度,可能意味着更多的费用开支;

(3)   分辨率不可盲目攀高,如上所说,码率一定时,分辨率越高,图像就越不清晰,反而适得其反。

当然,画质能否达到最佳效果,还可能受到很多其他因素的影响。但是协调控制好我们刚才所说的几个基本参数,一般就能让用户收获较好的视觉体验了。

参考文档链接:

  https://www.jianshu.com/p/71cba1711de0

  https://www.jianshu.com/p/71318f839181