当前位置: 首页 > 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.dtcms.com/a/278336.html

相关文章:

  • 2025年睿抗机器人开发者大赛CAIP-编程技能赛本科组(省赛)解题报告 | 珂学家
  • Python 变量与简单输入输出:从零开始写你的第一个交互程序
  • 【Java入门到精通】(四)Java语法进阶
  • 动手学深度学习——线性回归的从零开始实现
  • 【记录】BLE|百度的旧蓝牙随身音箱手机能配对不能连接、电脑能连接不能使用的解决思路(Wireshark捕获并分析手机蓝牙报文)
  • 1.2.2 高级特性详解——AI教你学Django
  • 【图片识别改名】水印相机拍的照片如何将照片的名字批量改为水印内容?图片识别改名的详细步骤和注意事项
  • 【WPF】WPF 自定义控件 实战详解,含命令实现
  • 【零基础入门unity游戏开发——unity3D篇】3D光源之——unity6的新功能Adaptive Probe Volumes(APV)(自适应探针体积)
  • ACL流量控制实验
  • 深入了解linux系统—— 进程信号的产生
  • 客户端主机宕机,服务端如何处理 TCP 连接?详解
  • EasyExcel实现Excel文件导入导出
  • VScode链接服务器一直卡在下载vscode服务器,无法连接成功
  • C++之哈希表的基本介绍以及其自我实现(开放定址法版本)
  • 多客户端 - 服务器结构-实操
  • 史上最清楚!读者,写者问题(操作系统os)
  • 基于 Gitlab、Jenkins与Jenkins分布式、SonarQube 、Nexus 的 CiCd 全流程打造
  • SQL创建三个表
  • 从 JSON 到 Python 对象:一次通透的序列化与反序列化之旅
  • Dubbo高阶难题:异步转同步调用链上全局透传参数的丢失问题
  • Selenium动态网页爬虫编写与解释
  • 【微信小程序】
  • 当你在 Git 本地提交后,因权限不足无法推送到服务端,若想撤销本次提交,可以根据不同的需求选择合适的方法,下面为你介绍两种常见方式。
  • 清除 Android 手机 SIM 卡数据的4 种简单方法
  • 云手机常见问题解析:解决延迟、掉线等困扰
  • 云手机的多重用途:从游戏挂机到办公自动化
  • kafka的部署
  • 从零实现浏览器摄像头控制与视频录制:基于原生 JavaScript 的完整指南
  • 如何将数据从一部手机传输到另一部手机?