![FFmpeg音视频开发基础与实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/298/43738298/b_43738298.jpg)
3.4.3 H.264的基本算法
1.帧内预测
H.264中采用了基于像素块的帧内预测技术,主要可分为以下类型。
◎ 16像素×16像素的亮度块:4种预测模式。
◎ 4像素×4像素的亮度块:9种预测模式。
◎ 色度块:4种预测模式,与16像素×16像素的亮度块的4种预测模式相同。
16像素×16像素的亮度块的4种预测模式如图3-4所示。
![](https://epubservercos.yuewen.com/AF4D34/23020649509759206/epubprivate/OEBPS/Images/42555_46_1.jpg?sign=1738893778-DgUeKzPMYyI1SXGBMQeA19zjtMW3pfeZ-0-d1ae83cbccb2f43b7c51d7563e414e00)
图3-4
4像素×4像素的亮度块的9种预测模式如图3-5所示。
![](https://epubservercos.yuewen.com/AF4D34/23020649509759206/epubprivate/OEBPS/Images/42555_47_1.jpg?sign=1738893778-bTVTauLqsrcVCbb119Yg1zxPGn3rcUO4-0-b1a63faf6d99141d61b6b2373e2a420d)
图3-5
2.帧间预测
H.264中的帧间预测方法使用了基于块的运动估计和补偿方法,主要特点如下。
◎ 有多个候选参考帧。
◎ B帧可以作为参考帧。
◎ 参考帧可以任意排序。
◎ 有多种运动补偿像素块形状,包括16像素×16像素、16像素×8像素、8像素×16像素、8像素×8像素、8像素×4像素、4像素×8像素和4像素×4像素。
◎ 有1/4(亮度)像素插值。
◎ 有对交错视频的基于帧或场的运动估计。
把帧间预测的宏块分割为子宏块的方式如图3-6所示。
![](https://epubservercos.yuewen.com/AF4D34/23020649509759206/epubprivate/OEBPS/Images/42555_48_1.jpg?sign=1738893778-ZzUoWQVfYEBNgPm9VSIUwZPcgA07cGm0-0-3ff0d3672e87ba5c0b5a3e4e2af4f3fd)
图3-6
亚像素插值的表示如图3-7所示。其中,Pixel表示图像中整像素点的位置,Half Pixel表示1/2像素插值的位置,Quat.Pixel表示1/4像素插值的位置。
![](https://epubservercos.yuewen.com/AF4D34/23020649509759206/epubprivate/OEBPS/Images/42555_48_2.jpg?sign=1738893778-pHgQPEmt1U69hj0sPlObM9FWrVmTohvl-0-571931bc08dfcd7753f2118cd5f68a53)
图3-7
3.交错视频编码
针对隔行扫描的视频,H.264专门定义了用于处理此类交错视频的算法。
◎ 图像层的帧场自适应(Picture Adaptive Frame Field,PicAFF)。
◎ 宏块层的帧场自适应(MacroBlock Adaptive Frame Field,MBAFF)。
4.整数变换算法和量化编码
H.264 的变换编码创新性地使用了类似离散余弦变换的整数变换算法,有效降低了运算复杂度。对于基础版的H.264,变换矩阵为4像素×4像素;在FRExt扩展中,还支持8像素×8像素的变换矩阵。
H.264的量化编码算法使用的是标量量化。
5.熵编码
H.264针对不同的语法元素指定了不同的熵编码算法,主要有:
◎ 指数哥伦布编码(Universal Variable Length Coding,UVLC)算法。
◎ 上下文自适应的变长编码(CAVLC)算法。
◎ 上下文自适应的二进制算术编码(CABAC)算法。