H.264视频编解码过程

H.264视频编解码过程

H.264加入了各种新功能,进一步提高了视频压缩效率。值得注意的是,这些特性包括帧内预测、多帧参考功能、四分之一像素插值,块滤波后处理,灵活的宏块排序。一般来说,H.264将帧序列(即图像)分成若干组图片(GOPs)。这些帧被标记为I (intra), P (predicted)和B(双向预测)帧,这取决于它们出现的顺序。

H.264视频编解码过程_第1张图片
图1. 视频编码过程
在源部分,每个帧被分成大小一致的不重叠块(1616大小),称为宏块。这些宏块根据他们的类型将会被单独处理。每个宏块可以进一步划分为更小的块,44为最小块,如图1所示。对这些宏块进行离散余弦变换(DCT)、量化和熵编码。首先,在DCT和量化过程中使用宏块中的像素值。DCT和量化过程的输出,即量化的DCT系数,经过去量化和反DCT过程,用于预测和运动估计。特别是,帧内和帧间预测过程利用这些重构像素值来执行像素值估计和决定编码模式。通常情况下,采用率失真优化(RDO)来在模式间或模式内选择最佳操作点对每个宏块进行编码。图1中的编码控制框表示一个优化器,用于调节编码模式和块大小的选择[27]。它还控制量化参数,以实现目标视频比特率。最后,将DCT结果和量化过程、预测数据、运动向量、RDO控制数据进行熵编码。熵编码的输出是在二进制流中一系列压缩视频内容的前面和/或交错着各种预定义标记。然后将合并后的比特流传输和/或存储在各种媒体中。
H.264视频编解码过程_第2张图片
图2. 用于嵌入信息的宏块内部和宏块之间的块大小类型选择

在i帧中,块中的像素值要么通过变换域的系数直接编码,要么利用同一帧中相邻块的空间冗余进行预测(即intra-prediction)。在p帧中,利用时间冗余可以实现两帧之间的运动估计(即帧间预测)。为此,将先前编码的帧(它本身可能是一个运动补偿帧)解码,并将其预测误差(如果有的话)解码并添加到解码的帧中以进行运动估计。在b帧的情况下,最多可以考虑两帧(过去和/或未来)用于运动估计。上述过程的输出,包括系数值、预测误差、运动矢量等,进一步进行熵编码。H.264压缩标准中有两种熵编码方法对量化的变换系数进行编码,即上下文自适应变长编码(CAVLC)和上下文自适应二进制算术编码(CABAC)。CAVLC以运行级对(run-level pairs)的形式处理宏块,而CABAC将所有实体进行二值化进一步处理。两种方法都根据局部上下文选择最佳的表或概率模型来编码语法,包括量化变换系数、运动矢量信息等。CABAC总是提供更高的压缩率,因为它允许为字母表的每个符号分配一个非整数位数,并允许适应非平稳符号的统计。与CAVLC相比,CABAC具有更高的计算复杂度。然后,熵编码器的输出之前和/或与各种预定义标记交叉,以形成符合H.264格式的视频,用于传输和存储目的。
----------------------------------------------------2021年10月21学习笔记

你可能感兴趣的:(1024程序员节)