视频编解码原理

最近由于公司裁员,不得不重新找工作。

面试的时候被问到视频编解码方面的问题,才发现好多东西都还给老师了。回来整理一下自己对视频编解码的理解,以便以后查看方便。


首先,视频编码一般都是基于视频信号在时间、空间上信息冗余进行的。

我们都知道,视频其实就是连续的图像,比如国内(采用PAL制)常见的视频为25帧每秒,可以理解为每秒播放25张图像。一般而言,如果没有场景的切换时,相临近的图像之间有很大的相似性。这就是时间上的信息冗余。

在空间上,在一副图像内部,相似的内容也很多,这就是空间上的冗余。

其次,也可以利用人眼特性进行处理。比如,25帧以上的频率播放图像,人眼就认为是连续的。人眼对于细节是有分辨力极限的


基于以上原理,数字视频信号首先进行了如下处理

1. 时间取样 如PAL制每秒取25帧

2. 空间取样 如高清视频取1920*1080个采样点

3. 色彩空间取样  一般视频信号采用YUV(YCbCr)作为色彩空间,有4:4:4, 4:2:2,4:2:0三种采样方式。后两种采样,就是利用了人眼对于色彩没有亮度敏感的特性。


此外,常用的技术有变换编码(DCT变换)、游程编码、熵编码(VLC、CABAC)以及预测编码(帧内预测,帧间预测)。

变换编码 因为图像中缓慢变换或者不变的区域占很大一部分,而细节以及突变的区域比较小。这反映在频域(变换域)就是低频占大部分,高频占少部分。这样视频信号进行DCT变换后,对于高频和低配可以采用不同的量化步长。

经过DCT变换+量化以后,低频部分有很多较大的值,高频部分有一些不大的值,系数大部分为0。这种情况,适合使用锯齿性扫描+游程编码

熵编码,常用的是哈夫曼编码和算术编码,利用一些统计特性进行压缩。

预测编码主要关注的是图像空间上的相似性。根据预测编码的不同,视频帧可分为I帧(帧内预测)、B帧(双向帧间预测)、P帧(前向帧间预测)。


常见的编码和解码流程如下








从图中可以看出,MPEG2和H264的编码流程类似。

值得注意的是,与当前帧做差的不是参考帧的原始图像,而是经过反量化、反变换得到残差,与预测图像相加得到的重建图像

你可能感兴趣的:(音视频)