欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

H264---H.264/AVC 中的宏块、片、帧

程序员文章站 2022-07-06 22:50:05
...

1、H.264的宏块

就像MPEG-1和MPEG-2一样,H.264的宏块,也是编码标准的基本处理单元,通常它的大小也为16x16像素。但在H.264的简介一文中我们就说过,H.264的预测图块可以小到4x4像素。所以这也促成了,16x16像素的宏块,可以接着再划分成子宏块这一操作。
H264---H.264/AVC 中的宏块、片、帧
在实际的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 12中,在【帧内编码】时,例如对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宏块为单位预测

2、H.264的宏块与像片

像片由整数个宏块组成,且宏块分为三种类型(没有考虑特殊的SI宏块)

在H.264中,有5种类型的像片,分别为:
I像片:只包含I宏块
P像片:包含P宏块和/或I宏块
B像片:包含B宏块和/或I宏块
SP像片:包含P宏块和/或I宏块,用于不同编码流之间进行切换。
SI像片:包含SI宏块(一种特殊类型的帧内编码宏块),用于不同编码流之间进行切换。


SP和SI像片,是H.264新增的,经过特殊编码的像片,它们用于在不同编码流之间进行切换、随机访问、快进和快退。
在用户网络状况变化的情况下,可以使用SP帧从低数据量码流切换到高数据流码流,或者从高切向低。

在H.264里,这5种类型的像片,与宏块的关系如下:
H264---H.264/AVC 中的宏块、片、帧

3、H.264的帧、像片、宏块

关于帧的类型,在*上有专门介绍:https://en.wikipedia.org/wiki/Video_compression_picture_types

I片:只有I宏块
P片:必有P宏块,可能有I宏块
B片:必有B宏块,可能有I宏块

I帧:只有I片
P帧:必有P片,可能有I片
B帧:必有B片,可能有I片、P片

因为默认情况下,不使用FMO且没有数据分割时,一帧即为一片,进一步则可以根据片的类型去判断帧的类型。而且在实际的H.264比特流结构中,并没有图像层,片是最上层的图像数据单位。

相关标签: H264