当前位置: 首页 > news >正文

H264的帧内编码和帧间编码

一、帧内编码

1.1、帧内编码的基本类型

H.264 支持多种帧内预测模式,主要分为三类:
1. 亮度块预测(Luma Prediction)
4x4 预测:支持 9 种方向模式(垂直、水平、对角线等)+ DC 模式 + 平面模式。
16x16 预测:支持 4 种模式(垂直、水平、DC、平面)。
8x8 预测:仅用于 High Profile,支持 9 种模式(与 4x4 类似)。
2. 色度块预测(Chroma Prediction)
对 Cb/Cr 分量,支持 4 种模式:垂直、水平、DC、平面。
3. PCM 模式
直接存储原始像素值,不进行预测(用于无法有效压缩的区域)。

1.2、I 帧的帧内压缩处理

I 帧完全依赖帧内压缩,是随机访问的关键帧。处理流程:
宏块划分:将 I 帧分割为 16x16 的宏块。
预测模式选择:
I_16x16 宏块:对整个宏块使用一种预测模式(如 DC、垂直)。
I_4x4 宏块:每个 4x4 子块独立选择预测模式(适合细节区域)。
I_PCM 宏块:直接存储像素值(无损,但开销大)。
残差计算:原始像素与预测值的差值。
变换与量化:对残差应用 DCT 变换并量化。
熵编码:使用 CAVLC 或 CABAC 编码预测模式和量化后的残差。
示例:平坦区域用 DC 预测,边缘区域用方向预测(如垂直 / 水平)。

1.3、P 帧的帧内压缩处理

P 帧以帧间预测为主,但部分区域(如预测误差大的区域)使用帧内压缩:
帧间预测优先:通过运动估计找到参考帧中的匹配块。
帧内预测备选
若运动补偿误差超过阈值,切换到帧内模式。
支持 I_4x4、I_16x16 和 I_PCM 模式,但选择范围通常少于 I 帧。
混合编码:同一 P 帧中,部分宏块用帧间预测,部分用帧内预测。
示例:新出现的物体(参考帧中不存在)使用帧内编码。

1.4、B 帧的帧内压缩处理

B 帧依赖双向帧间预测,但也支持帧内模式作为补充:
双向预测优先:结合前向和后向参考帧进行预测。
帧内预测备选
对双向预测失败的区域(如快速运动或遮挡),使用帧内模式。
支持的帧内模式与 P 帧类似(如 I_4x4、I_16x16)。
高效编码:B 帧的帧内编码占比通常低于 P 帧,因其双向预测能力更强。
示例:两帧之间突然出现的物体,无法通过双向预测覆盖,需用帧内编码。

1.5、三种帧的帧内压缩对比

特性I 帧P 帧B 帧
主要依赖仅帧内压缩帧间压缩为主,帧内为辅双向帧间压缩为主,帧内为辅
预测模式全模式支持(I_4x4、I_16x16)简化模式(I_4x4、I_16x16)简化模式(I_4x4、I_16x16)
压缩率最低(无帧间依赖)中等最高
随机访问支持支持(关键帧)依赖前面的 I/P 帧依赖前后的 I/P 帧
典型占比约 10-15%(视频总码率)约 30-40%约 20-30%

1.6、总结

I 帧:通过丰富的帧内模式提供独立解码能力,但压缩效率最低。
P 帧:智能混合帧内 / 帧间模式,平衡了压缩率和错误恢复能力。
B 帧:双向预测大幅减少冗余,仅在必要时使用帧内模式,压缩效率最高。
这种分层策略使 H.264 在不同场景下都能实现高效编码,广泛应用于视频会议、流媒体和存储等领域。

二、H264的帧间编码方式

H.264 的帧间编码(Inter Coding)通过分析视频帧之间的时间冗余来大幅降低码率,是实现高压缩比的核心技术。其核心机制包括运动估计与补偿、参考帧管理和多预测方向等,下面详细解析:

2.1、帧间编码的基本原理

帧间编码的核心思想是:只编码当前帧与参考帧的差异(运动信息 + 残差),而非完整像素。具体步骤:
运动估计(Motion Estimation):在参考帧中寻找与当前块最匹配的区域,计算运动矢量(MV)。
运动补偿(Motion Compensation):根据运动矢量从参考帧中提取预测块。
残差计算:当前块像素值与预测块的差值。
残差编码:对残差进行变换(如 DCT)、量化和熵编码。

2.2、关键技术点

1. 运动估计与补偿
宏块划分:将当前帧划分为 16x16 的宏块,每个宏块可进一步划分为更小的子块(如 8x8、4x4)。
搜索范围:编码器在参考帧中以当前块为中心的一定区域内搜索最佳匹配(典型范围 ±16~±64 像素)。
亚像素精度:支持 1/4 像素或 1/8 像素精度的运动矢量,通过插值提高匹配准确性。
多参考帧:H.264 允许使用多个参考帧(最多 16 个),选择最优参考帧以减少预测误差。
示例:P 帧中的一个宏块通过运动矢量指向前面 I 帧中的一个区域,仅编码两者差异。

2. 参考帧管理
参考帧列表:维护两个参考帧列表(List0 和 List1),分别用于前向和后向预测。
重排序机制:根据场景变化动态调整参考帧顺序,优先使用相关性高的帧。
长时参考帧(LTR):可将特定帧标记为长时参考,用于长时间运动的场景(如摄像机平移)。

3. 多预测方向
P 帧:仅支持前向预测(依赖前面的 I/P 帧)。
B 帧:支持双向预测(同时依赖前面和后面的参考帧),进一步提高压缩率。
加权预测:对 B 帧的双向预测结果进行加权融合(如 0.5× 前向 + 0.5× 后向)。

4. 块划分灵活性
H.264 支持多种块尺寸的运动补偿:
16x16:适合大面积平滑运动。
16x8/8x16:适合垂直或水平方向的运动。
8x8:适合复杂运动,可进一步划分为 4x4 子块。
8x4/4x8/4x4:精细划分,用于快速运动或细节区域。

5. 残差编码优化
整数变换:使用 4x4 整数 DCT 变换替代浮点变换,降低计算复杂度。
量化参数(QP):动态调整量化步长,平衡码率与画质。
熵编码:支持 CAVLC(简单)和 CABAC(高效)两种熵编码方式。

2.3、对 IPB 帧的处理差异

帧类型参考帧依赖预测方向支持的块划分典型应用场景
I 帧不依赖参考帧仅帧内预测4x4、8x8、16x16关键帧、场景切换点
P 帧前面的 I/P 帧前向预测16x16、16x8、8x16、8x8运动物体的连续帧
B 帧前面和后面的 I/P 帧双向预测同 P 帧 + 加权预测静态背景中的运动物体

2.4、示例:B 帧的双向预测

假设视频序列为 I-P-B-B-P,其中 B 帧的双向预测流程:
1.前向预测:从前面的 P 帧中寻找匹配块。
2.后向预测:从后面的 P 帧中寻找匹配块。
3.加权融合:对前向和后向预测结果进行加权,生成最终预测值。
4.残差编码:仅编码 B 帧与预测值的差异。

2.5、总结

H.264 的帧间编码通过运动估计与补偿、多参考帧和灵活块划分,显著减少了视频序列的时间冗余。这种技术使 H.264 在相同画质下比 H.263 等旧标准节省 50% 以上的码率,成为视频编码领域的主流标准。

http://www.lryc.cn/news/588498.html

相关文章:

  • 每日mysql
  • RAG索引流程中的文档解析:工业级实践方案与最佳实践
  • 【Linux网络】:HTTP(应用层协议)
  • 学习软件测试的第十五天
  • 【DOCKER】-6 docker的资源限制与监控
  • Linux操作系统之信号:信号的产生
  • 深入学习前端 Proxy 和 Reflect:现代 JavaScript 元编程核心
  • Modbus 开发工具实战:ModScan32 与 Wireshark 抓包分析(二)
  • Swift 解 LeetCode 326:两种方法判断是否是 3 的幂,含循环与数学技巧
  • [硬件电路-21]:模拟信号处理运算与数字信号处理运算的详细比较
  • 无人机迫降模式模块运行方式概述!
  • ICMP隧道工具完全指南:原理、实战与防御策略
  • Datawhale AI夏令营大模型 task2.1
  • 【科研绘图系列】R语言绘制世界地图
  • 硬盘爆满不够用?这个免费神器帮你找回50GB硬盘空间
  • 【React Natve】NetworkError 和 TouchableOpacity 组件
  • 网络编程(TCP连接)
  • 代理模式详解:代理、策略与模板方法模式
  • 暑期自学嵌入式——Day02(C语言阶段)
  • PyTorch张量(Tensor)创建的方式汇总详解和代码示例
  • 如何降低AIGC的查重率?精选六个AIGC降重让论文更出色
  • 《每日AI-人工智能-编程日报》--2025年7月14日
  • Android Studio C++/JNI/Kotlin 示例 三
  • git项目,有idea文件夹,怎么去掉
  • Mybatis(黑马)
  • 网络传输过程
  • 理解Linux文件系统:从物理存储到统一接口
  • 小波变换 | 离散小波变换
  • 学习笔记——农作物遥感识别与大范围农作物类别制图的若干关键问题
  • rsyslog简单应用