FFmpeg音视频开发基础与实战
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.5.2 H.265的框架

相对于前代标准H.264,H.265仍然使用类似的整体框架结构,即块结构的混合编码框架,如图3-8所示。H.265中包括了帧内预测、帧间预测、变换量化、熵编码和去块滤波等,并且在这些模块中使用了大量的新技术,进一步提升了编码效率。

H.264编码的最小单元为宏块,每个宏块的固定大小为16像素×16像素。对于常用的4∶2∶0格式,每个宏块内包含一个16像素×16像素的亮度块和两个8像素×8像素的色度块。每个宏块都是按照帧内编码或帧间编码划分为子块的,分别进行预测编码、变换量化,并通过熵编码输出压缩码流。这种固定宏块大小的图像帧分割方式在4K、8K等超高清视频中,会导致过多的宏块被分割并产生相应的宏块信息,导致压缩效率降低。

为了解决这个问题,H.265提出了树形编码单元(Coding Tree Unit,CTU)这一全新的图像帧分割方式。一个树形编码单元的大小为 64 像素×64 像素,并且可以根据其中的内容进行四叉树形的分割。每个树形编码单元包含3个树形编码块(Coding Tree Block,CTB),即1个亮度树形编码块和2个色度树形编码块,其中,亮度树形编码块的大小与树形编码单元相同,色度树形编码块的大小由色度采样格式决定,对于常用的4∶2∶0格式,两个色度树形编码块的大小均为树形编码单元的1/4。每个树形编码单元都包含若干编码单元(Coding Unit,CU)。对于某个树形编码单元,其中既可以只包含一个编码单元(即树形编码单元本身),也可以按照四叉树的方式分割为不同大小的编码单元组合。从树形编码单元到编码单元的典型分割方式如图3-9所示。

图3-8

图3-9

在图3-9中,一个64像素×64像素的树形编码单元,首先进行四等分,即分割为4个32像素×32像素的子块。其中,序号7和15(32像素×32像素)的子块作为一个编码单元不再继续分割,其余两个32像素×32像素的子块分别被分割为4个16像素×16像素的子块,并且其中各有一个16像素×16像素的子块进一步被分割为8像素×8像素的子块。依次类推,一个树形编码单元最终被分割为16个编码单元。

与树形编码单元类似,每个编码单元同样包含三个像素块,分别表示三个颜色分量,该像素块被称为编码块(Coding Block,CB)。一个编码单元中包含一个亮度编码块和两个色度编码块,亮度编码块的大小与编码单元一致,色度编码块的大小为亮度编码块大小的1/4(特指4∶2∶0格式)。

在把一个树形编码单元按四叉树分割为若干编码单元后,每个编码单元按照相应的编码方式可以继续划分。若该编码单元以帧间预测进行编码,则将编码单元分割为预测单元(Prediction Unit,PU),预测单元中的三个颜色分量分别构成三个预测块(Prediction Block,PB)。编码单元中的预测残差通过变换单元(Transform Unit,TU)执行变换和量化编码操作。在变换和量化编码操作中,变换单元按三个分量分别与三个变换块(Transform Block,TB)操作。