H264框架
- 每一帧图像会被切割成一个或者多个条带(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像素。
- 在变换编码方面,针对预测残差数据进行的变换块大小为4像素x4像素或8像素x8像素.
- 熵编码算法主要有上下文自适应的变长编码(CAVLC)算法和上下文自适应的二进制算术编码(CABAC)算法。我们可以根据不同的语法元素类型指定不同的编码算法,从而达到编码效率与运算复杂度之间的平衡。
- 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功能支持
| Feature | CBP | BP | XP | MP | ProHiP | HiP | Hi10P | Hi422P | Hi444PP |
|---|---|---|---|---|---|---|---|---|---|
| Bit depth (per sample) | 8 | 8 | 8 | 8 | 8 | 8 | 8 to 10 | 8 to 10 | 8 to 14 |
| Chroma formats | 4: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) | No | Yes | Yes | No | No | No | No | No | No |
| Arbitrary slice ordering (ASO) | No | Yes | Yes | No | No | No | No | No | No |
| Redundant slices (RS) | No | Yes | Yes | No | No | No | No | No | No |
| Data Partitioning | No | No | Yes | No | No | No | No | No | No |
| SI and SP slices | No | No | Yes | No | No | No | No | No | No |
| Interlaced coding (PicAFF, MBAFF) | No | No | Yes | Yes | No | Yes | Yes | Yes | Yes |
| B slices | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
| CABAC entropy coding | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes |
| 4:0:0 (Greyscale) | No | No | No | No | Yes | Yes | Yes | Yes | Yes |
| 8×8 vs. 4×4 transform adaptivity | No | No | No | No | Yes | Yes | Yes | Yes | Yes |
| Quantization scaling matrices | No | No | No | No | Yes | Yes | Yes | Yes | Yes |
| Separate CB and CR QP control | No | No | No | No | Yes | Yes | Yes | Yes | Yes |
| Separate color plane coding | No | No | No | No | No | No | No | No | Yes |
| Predictive lossless coding | No | No | No | No | No | No | No | No | Yes |
H265框架
H265功能支持
| Feature | Version 1 | Version 2 | |||||||
|---|---|---|---|---|---|---|---|---|---|
| Main | Main 10 | Main 12 | Main 4:2:2 10 | Main 4:2:2 12 | Main 4:4:4 | Main 4:4:4 10 | Main 4:4:4 12 | Main 4:4:4 16 Intra | |
| Bit depth | 8 | 8 to 10 | 8 to 12 | 8 to 10 | 8 to 12 | 8 | 8 to 10 | 8 to 12 | 8 to 16 |
| Chroma sampling formats | 4:2:0 | 4:2:0 | 4:2:0 | 4:2:0/ 4:2:2 | 4:2:0/ 4:2:2 | 4:2:0/ 4:2:2/ 4:4:4 | 4:2:0/ 4:2:2/ 4:4:4 | 4:2:0/ 4:2:2/ 4:4:4 | 4:2:0/ 4:2:2/ 4:4:4 |
| 4:0:0 (Monochrome) | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
| High precision weighted prediction | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
| Chroma QP offset list | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
| Cross-component prediction | No | No | No | No | No | Yes | Yes | Yes | Yes |
| Intra smoothing disabling | No | No | No | No | No | Yes | Yes | Yes | Yes |
| Persistent Rice adaptation | No | No | No | No | No | Yes | Yes | Yes | Yes |
| RDPCM implicit/explicit | No | No | No | No | No | Yes | Yes | Yes | Yes |
| Transform skip block sizes larger than 4×4 | No | No | No | No | No | Yes | Yes | Yes | Yes |
| Transform skip context/rotation | No | No | No | No | No | Yes | Yes | Yes | Yes |
| Extended precision processing | No | No | No | No | No | No | No | No | Yes |