1、H.264的宏块
就像MPEG-1和MPEG-2一样,H.264的宏块,也是编码标准的基本处理单元,通常它的大小也为16x16像素。但在H.264的简介一文中我们就说过,H.264的预测图块可以小到4x4像素。所以这也促成了,16x16像素的宏块,可以接着再划分成子宏块这一操作。
在实际的H.264编码时,可能会使用8x8、或4x8、或8x4、或4x4像素的子宏块,也有可能是它们的组合。
//像素块越小,编码的复杂度也会随之增加,编码效率自然就会降低。但是这样是值得的,因为图像的压缩效率有了显著提高,也就是编码后得到的相同质量的图像,H.264的压缩比更大,占用的空间及带宽更小。
而在H.264编码过程中,与宏块的划分直接相关的,就是帧内预测和帧间预测了。注意我们现在讨论的,是H.264的帧内预测和帧间预测。有的同学可能一看到这两个词,自然而然就联想到了MPEG-1和MPEG-2中,I帧的帧内编码,和B帧、P帧的帧间预测。
这里有两点需要注意:
(1)在H.264里,我们说的是帧内预测,注意是预测,并不是帧内编码。
(2)在H.264里,我们试图描述的,是把宏块与帧内预测和帧间预测联系起来。而在MPEG-1和MPEG-2里,虽然它的处理单位也是宏块,但在介绍它们的时候,我们的着重点,一直是放在I帧、B帧、P帧这样的图像级别的区别之上,进而去讨论帧内编码和帧间预测。
这两点其实很好理解,我们一一来分析:
(1)在MPEG 1和2中,在【帧内编码】时,例如对T帧图像进行编码时,不同宏块是独立编码的
【只利用宏块内部空间相关性,没有利用宏块间的空间相关性】👉I帧编码后的数据量也非常大
H.264/AVC为了改善这一状况,就引入了帧内预测技术
2、在H.264中,宏块也是分类型的,与图像一样,它也分为三种类型:I宏块、B宏块、P宏块(此外还有特殊的SI宏块等)。
在H.264中, 帧内预测的对象是I宏块,
帧间预测的对象是为B宏块和P宏块。
下面为I宏块、B宏块、P宏块的用法(摘自毕厚杰《新一代视频压缩编码标准》):
I宏块利用从【当前片中已解码的像素】作为参考进行帧内预测 //注意是当前片内,不能取自其他片
P宏块利用前面已编码的图像作为参考图像,进行帧间预测。
B宏块则利用双向的参考图像(当前的和未来的已编码的图像帧)进行帧间预测。
//其实就是和I、B、P帧的编码类似,但是我们这里的对象是I、B、P宏块为单位预测