可以通过各种方法在一个图像帧内或者在一系列帧之间减少视频数据量。
在某个图像帧内,只需要删除不必要的信息就可以减少数据量,但这样做会导致图像的分辨率下降。
在一系列的帧内,可以通过差分编码这样的方法来减少视频数据量,包括H.264在内的大多数视频压缩标准都采用这种方法。在差分编码中,会将一个帧与参考帧(即前面的I帧或P帧)进行对比,然后只对那些相对于参考帧来说发生了变化的像素进行编码。通过这种方法,可以降低需要进行编码和发送的像素值。
图3.对M-JPEG格式来说,上述序列中的三个图像分别作为独立的图像(I帧)进行编码和发送,彼此之间互不依赖。
图4.对差分编码(包括H.264在内的大多数视频压缩标准都采用这种方法)来说,只有第一个图像(I帧)是将全帧图像信息进行编码。
如果是根据像素块(宏块)而不是单个的像素来检测差别并进行差分编码,还可以进一步减少需要编码的信息量;因此,可以对更大的区域进行对比,而只需对那些存在重大差别的块进行编码。此外,对发生更改的区域位置进行标记的相关开销也将大大降低。
然而,如果视频中存在大量物体运动的话,差分编码将无法显著减少数据量。这时,可以采用基于块的运动补偿技术。基于块的运动补偿考虑到视频序列中构成新帧的大量信息都可以在前面的帧中找到,但可能会在不同的位置上。所以,这种技术将一个帧分为一系列的宏块。然后,通过在参考帧中查找匹配块的方式,逐块地构建或者“预测”一个新帧(例如P帧)。如果发现匹配的块,编码器只需要对参考帧中发现匹配块的位置进行编码。与对块的实际内容进行编码相比,只对运动矢量进行编码可以减少所占用的数据位。
图5.基于块的运动补偿图示
上图文字:
Search window | 搜索窗口 |
Matching block | 匹配块 |
Motion vector | 运动矢量 |
Target block | 目标块 |
Earlier reference frame | 前面的参考帧 |
P-frame | P帧 |