视频为什么可以被压缩?
因为存在冗余。
首先,视频是由一帧帧图像组成的,利用人眼视觉暂留的原理,使人眼产生了运动的感觉。每一帧的图像又由像素构成,分辨率决定了图像细节的精细程度,分辨率越高,像素越高,视频就越清晰,如常见的分辨率1080p就代表这个视频每一帧有1920 x 1080个像素。
冗余为压缩提供了可能性:
1)空间冗余:视频图像在水平方向相邻像素之间、垂直方向相邻像素之间的变化一般都很小,存在着极强的空间相关性。但是基于离散像素采样之后的数字视频来表示物体颜色的方式通常没有利用景物表面颜色的这种空间连贯性,从而产生了“空间过采样”的数据空间冗余。
2)时间冗余:序列图像一般是位于时间轴区间内的一组连续画面,其中的相邻帧,或者相邻场的图像中,在对应位置的像素之间,亮度和色度信息存在着极强的相关性。当前帧的图像往往具有与前、后两帧图像相同的背景和运动物体,只不过移动物体所在的空间位置略有不同,所以后一帧的数据与前一帧的数据有许多共同的地方,对大多数像素来说,亮度和色度信息是基本相同的。对于这些重复出现的画面和物体来说,等间隔的重复产生了“时间过采样”的数据时间冗余。
3)视觉冗余:人眼的一些特性(比如亮度辨别阈值、视觉阈值)对亮度和色度的敏感度不同,使得在编码的时候引入适量的误差,也不会被察觉出来,可以利用人眼的视觉特性,以一定的客观失真换取数据压缩。
4)编码冗余(信息熵冗余):人们用于表达某一信息所需要的比特数总比理论上表示该信息所需要的最少比特数要大,它们之间的差距就是编码冗余,或称信息熵冗余。
视频压缩正是基于上述条件,使得视频数据量得以极大地压缩,更利于传输和存储。
帧内压缩与帧间压缩有何区别?
帧内压缩(利用空间相关性进行编码)
帧内(Intraframe)压缩也称为空间压缩(Spatial compression)。当压缩一帧图像时,仅考虑本帧的数据而不考虑相邻帧之间的冗余信息,这实际上与静态图像压缩类似。帧内一般采用有损压缩算法,达不到很高的压缩比。如压缩 GOP 图像组中的 I 帧。
9种预测
帧间压缩(利用时间相关性进行编码)
帧间压缩(Interframe compression)也称为时间压缩(Temporal compression),是基于许多视频或动画的连续前后两帧具有很大的相关性(即连续的视频其相邻帧之间具有冗余信息)的特点来实现的;通过比较时间轴上不同帧之间的数据实施压缩,进一步提高压缩比。如压缩 GOP 图像组中的 B 帧与 P 帧。
帧间压缩的主要过程先进行宏块查找,寻找出残差值,进行运动矢量计算,最后通过残差值和运动矢量推算出下一帧的数据。
宏块查找:查找帧之间有差别的部分,算法有:三步搜索,二维对数搜索,四步搜索,钻石搜索等;残差值:是指帧之间有差别的部分;运动矢量:当前编码块与其参考图像中的最佳匹配块之间的相对位移,也就是变化部分下一帧与上一帧的位移;运动估计:针对当前块从上一帧中搜索最相似的块;运动补偿:通过残差值和运动矢量推断出下一帧的数据。
视频编码中的CBR、VBR、CRF...是什么?
在视频编码中,有一个模块是码率控制,即通过选择一系列编码参数,使得视频编码后的比特率满足所需要的速率限制,并且使编码失真尽可能小。在实际应用中,存在好几种码率控制方法,分别是CBR、VBR、CRF、CQP、CVBR、ABR:
· CBR(Constant Bitrate,固定码率)
即在码率统计时间内保证编码码率平稳。有Motion发生时,由于码率恒定,只能通过增大QP来减少码字大小,图像质量变差,当场景静止时,图像质量又变好,因此图像质量不稳定。优点是压缩速度快,缺点是每秒流量都相同容易导致空间浪费。多用于网络流媒体视频编码,持续的码率可以保证视频在播放时,不会有卡顿缓冲等现象。
· VBR(Variable Bitrate,动态码率)
即允许在码率统计时间内编码码率波动,从而保证编码图像质量平稳。码率可以随着图像的复杂程度的不同而变化,因此其编码效率比较高,Motion发生时,马赛克很少。码率控制算法根据图像内容确定使用的比特率,图像内容比较简单则分配较少的码率,图像内容复杂则分配较多的码率,这样既保证了质量,又兼顾带宽限制。这种算法在画质相同的前提下,可以缩小文件体积。
· CRF(Constant Rate Factor,固定码率系数)
使用 CBR 和 VBR 时,需要选择一个目标码率,编码器会调整视频质量以达到该目标。这种方法的问题是,如果你对所有视频片段使用了相同的码率阶梯,那么就会在容易编码的视频上浪费很多不必要的带宽。
所以,当使用 CBR 和 VBR 编码时,编码器会调整所需的视频质量进而达到目标码率。相比之下,使用 CRF 编码,选择一种目标质量,编码器会通过调整码率达到该质量水平。CRF 值分布为从 0 到 51,一般来说这个取值越小,视频帧编码质量相对越高,取值为0则是无损压缩。
· CQP(Constant QP,固定质量参数)
每一帧图像在压缩的时候,采用相同的QP值。(QP值决定了量化编码时从像素宏块的原始信息中丢弃多少信息,QP越大压缩率越高同时质量越低,QP越小压缩率越低同时质量越高)
· CVBR(Constrained VariableBit Rate)
VBR的一种改进,兼顾了CBR和VBR的优点:在图像内容静止时,节省带宽,有Motion发生时,利用前期节省的带宽来尽可能地提高图像质量,达到同时兼顾带宽和图像质量的目的。这种方法通常会让用户输入最大码率和最小码率,静止时,码率稳定在最小码率,运动时,码率大于最小码率,但是又不超过最大码率。
· ABR(Average Bitrate,平均码率)
平均比特率,VBR的一种插值参数,是在CBR和VBR两者之间的一种权衡,即设定一段时间的平均码率,在此时间内,对简单、静态的图像分配低于平均码率的码率,对于复杂、大量运动的图像分配高于平均码率的码率;适合网络传输。