H264编码

170 阅读8分钟

H264框架

  1. 每一帧图像会被切割成一个或者多个条带(slice)进行编码,每个条带包含多个宏块(Macrohlock,MB).宏块是H264中的基本编码单位,其中包含一个1616的亮度像素块和两个88的色度像素块,以及其他宏块头信息。当对一个宏块进行编码时,每个宏块都会被分割成多种不同大小的子块进行预测。帧内预测的块大小可能为16 像素x16像素或者4像素X4像素,帧间预测或运动补偿的块有7种不同的形状:16像素X16像素、16像素X8像素、8像素X16像素、8像素X8像素、8像素x4像素、4像素 x8像素和4像素x4像素。
  2. 在变换编码方面,针对预测残差数据进行的变换块大小为4像素x4像素或8像素x8像素.
  3. 熵编码算法主要有上下文自适应的变长编码(CAVLC)算法和上下文自适应的二进制算术编码(CABAC)算法。我们可以根据不同的语法元素类型指定不同的编码算法,从而达到编码效率与运算复杂度之间的平衡。
  4. H.264视的条带具有不同的类型,其中最常用的有1条带、P条带和B条带。另外,为了支持码流切换,在扩展档次中还定义了SI条带和 SP条带。
    • I条带:帧内编码条带,只包含I宏块。
    • P条带:单向帧间编码条带,可能包含P宏块和I宏块。
    • B条带:双向帧间编码条,可能包含B宏块和1宏块。

在视频编码中采用的如预测编码、变化量化、熵编码等主要工作在条带层或以下,这一层通常被称为视频编码层(VideoCodingLayer,VCL)。相对的,在条带层以上所进行的数据和算法通常称之为网络抽象层(NetworkAbstraction Layer,NAL)。设计网络抽象层的主要意义在于使H.264格式的视频数据更便于存储和传输。 为了适应不同的应用场景,H.264还定义了多种不同的档次。

  • 基准档次(Baseline Profile):主要用于视频会议、可视电话等低延时实时通信领域。支持I条带和P条带,熵编码支持CAVLC算法。
  • 主要档次(Main Profile):主要用于数字电视广播、数字视频数据存储等。支持视频场编码、B条带双向预测和加权预测,熵编码支持CAVLC 算法和CABAC 算法。
  • 扩展档次(Extended Profile):主要用于网络视频直播与点播等。支持基准档次的所有特性,并支持 SI条带和 SP条带,支持数据分割以改进误码性能,支持B条带和加权预测,但熵编码不支持CABAC算法和场编码。
  • 高档次(High Profile):适用于高压缩率和性能场景:支持Main Profile的所有特性,以及8像素X8像素的帧内预测、自定义量化、无损压缩格式和YUV采样格式等。

编码算法

帧内预测

H.264 中采用了基于像素块的帧内预测技术,解决的是空域数据冗余问题。(有损压缩),主要可分为以下类型。

  • 16像素X16像素的亮度块:4种预测模式。
  • 4像素x4像素的亮度块:9种预测模式。
  • 色度块:4种预测模式,与16像素X16像素的亮度块的4种预测模式相同。

帧间预测

H.264 中的帧间预测方法使用了基于块的运动估计和补偿方法,解决的是时域数据冗徐问题。(有损压缩),主要特点如下。

  • 有多个候选参考帧。
  • B帧可以作为参考帧。 参考帧可以任意排序。
  • 有多种运动补偿像素块形状,包括16像素X16 像素、16 像素X8 像素、8 像素X16像素、8像素X8像素、8像素X4像素、4 像素X8像素和4像素x4像素。
  • 有1/4(亮度)像素插值。
  • 有对交错视频的基于帧或场的运动估计。

交错视频编码

针对隔行扫描的视频,H.264专门定义了用于处理此类交错视频的算法。

  • 图像层的帧场自适应(PictureAdaptive Frame Field,PicAFF)。
  • 宏块层的帧场自适应(MacroBlock Adaptive Frame Field,MBAFF)。

整数变换算法和量化编码

H.264的变换编码创新性地使用了类似离散余弦变换的整数变换算法,有效降低了运算复杂度。对于基础版的H.264,变换矩阵为4像素X4像素;在FRExt扩展中,还支持8像素X8像素的变换矩阵。 H.264的量化编码算法使用的是标量量化。

熵编码

H.264 针对不同的语法元素指定了不同的熵编码算法,主要有:

  • 指数哥伦布编码(Universal Variable Length Coding,UVLC)算法。
  • 上下文自适应的变长编码(CAVLC)算法。
  • 上下文自适应的二进制算术编码(CABAC)算法。

编码步骤

编码压缩的步骤大致如下:

  • 宏块划分,将图片划分为1616大小的宏块(还会再划分子宏块88,4*4)
  • 分组:通过划分的宏块进行宏块搜索计算,将一系列变换不大的图像归为一个组,也就是一个序列,也就是 GOP;
  • 定义帧,将每组的图像帧归分为 I 帧、P 帧和 B 帧三种类型;
  • 预测帧(压缩数据)
    • I帧,帧内预测,有损压缩,宏块预测(9种模式),残差=宏块-预测图像,传递残差值和预测模式,减少空间冗余
    • P帧,帧间预测(向前参考帧),计算运动矢量的补偿,传递差值。减少时间冗余
    • B帧,帧间预测(双向参考帧),压缩了更高,影响解码效率
  • DCT离散余弦变换:将残差值变成一组系数,每个系数是标准奇函数的加权值,去除空间信号的相关性。
  • 量化,对DCT离散余弦变换系数做量化,round(Y/Qstep(即QP量化参数))=FQ, 降低了数据量(将大数字变成小值),控制码率(视频质量控制). QP量化参数:根据系数的大小在【qmax,qmin】区间做自适应量化。有损压缩
  • 熵编码(CABAC算法),量化后的差值进行熵编码,无损压缩
  • 数据传输,最后将 I 帧数据与预测的差值信息进行存储和传输。

编码过程

h264编码解码流程.svg

H264功能支持

FeatureCBPBPXPMPProHiPHiPHi10PHi422PHi444PP
Bit depth (per sample)8888888 to 108 to 108 to 14
Chroma formats4:2:0  4:2:0  4:2:0  4:2:0  4:2:0  4:2:0  4:2:0  4:2:0/ 4:2:2  4:2:0/ 4:2:2/ 4:4:4
Flexible macroblock ordering (FMO)NoYesYesNoNoNoNoNoNo
Arbitrary slice ordering (ASO)NoYesYesNoNoNoNoNoNo
Redundant slices (RS)NoYesYesNoNoNoNoNoNo
Data PartitioningNoNoYesNoNoNoNoNoNo
SI and SP slicesNoNoYesNoNoNoNoNoNo
Interlaced coding (PicAFF, MBAFF)NoNoYesYesNoYesYesYesYes
B slicesNoNoYesYesYesYesYesYesYes
CABAC entropy codingNoNoNoYesYesYesYesYesYes
4:0:0 (Greyscale)NoNoNoNoYesYesYesYesYes
8×8 vs. 4×4 transform adaptivityNoNoNoNoYesYesYesYesYes
Quantization scaling matricesNoNoNoNoYesYesYesYesYes
Separate CB and CR QP controlNoNoNoNoYesYesYesYesYes
Separate color plane codingNoNoNoNoNoNoNoNoYes
Predictive lossless codingNoNoNoNoNoNoNoNoYes

H265框架

image.png

H265功能支持

FeatureVersion 1Version 2
 Main Main 10Main 12Main 4:2:2 10Main 4:2:2 12Main 4:4:4Main 4:4:4 10Main 4:4:4 12Main 4:4:4 16 Intra
Bit depth88 to 108 to 128 to 108 to 1288 to 108 to 128 to 16
Chroma sampling formats4:2:04:2:04:2:04:2:0/ 4:2:24:2:0/ 4:2:24:2:0/ 4:2:2/ 4:4:44:2:0/ 4:2:2/ 4:4:44:2:0/ 4:2:2/ 4:4:44:2:0/ 4:2:2/ 4:4:4
4:0:0 (Monochrome)NoNoYesYesYesYesYesYesYes
High precision weighted predictionNoNoYesYesYesYesYesYesYes
Chroma QP offset listNoNoYesYesYesYesYesYesYes
Cross-component predictionNoNoNoNoNoYesYesYesYes
Intra smoothing disablingNoNoNoNoNoYesYesYesYes
Persistent Rice adaptationNoNoNoNoNoYesYesYesYes
RDPCM implicit/explicitNoNoNoNoNoYesYesYesYes
Transform skip block sizes larger than 4×4NoNoNoNoNoYesYesYesYes
Transform skip context/rotationNoNoNoNoNoYesYesYesYes
Extended precision processingNoNoNoNoNoNoNoNoYes