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

【音视频】GOP 的设置和分析

一、GOP的概念

GOP(Group of Pictures,图像组)是 H.264 编码序列中 以 I 帧为起点,到下一个 I 帧前一帧的连续帧集合。它包含三个核心要素:

  • 帧类型:I 帧(关键帧)、P 帧(前向预测帧)、B 帧(双向预测帧),体积关系为 I > P > B
  • GOP 长度:两个 I 帧之间的帧数(如 GOP=10 表示每 10 帧出现一个 I 帧)。
  • Reference 间隔:两个 P 帧的间隔(或 P 帧与 I 帧的间隔),决定 B 帧的数量(B 帧只能出现在两个 P 帧或 I/P 帧之间)。

在这里插入图片描述

帧类型依赖对象压缩原理核心缺陷
I 帧仅依赖本帧内的宏块帧内预测(空间冗余压缩)码率高,占 GOP 总码率的 60%+
P 帧依赖前面的 I/P 帧前向运动补偿(时间冗余压缩)误差会向后扩散(如 P 帧错误,后续 P/B 帧解码失败)
B 帧依赖前后的 I/P 帧双向运动补偿(更高效压缩)增加编码 / 解码延迟(需缓存后续帧)

二、GOP的设置

在码率不变的前提下,GOP值越大,P、B帧的数量会越多,平均每个I、P、B帧所占用的字节数就越多,也就更容易获取较好的图像质量;Reference越大,B帧的数量越多,同理也更容易获得较好的图像质量

下面举个例子来说明

比如帧率为5,分别计算GOP=10、 GOP=5时不同GOP大小的码率,假设I帧占用100字节、P帧占用25字节

  1. GOP=10时,2秒数据的帧为 I P P P P P P P P P, 码率为 (100+9*25)*8bit/2秒 = 1,300bps
  2. GOP=5时,2秒数据的帧为 I P P P P I P P P P, 码率为 (100*2+8*25)*8bit/2秒 = 1,600bps

上面两个统计可以得出来

  1. I/P帧占用字节相同的情况下,GOP越大,则码率越低
  2. 如果GOP=10的情况下,码率也设置为1600bps,那就意味着平均I帧的大小可以改变为1600*100 / 1300 = 123字节,平均P帧可以改变为30.77字节,画质也就更好。可以认为,同等码率下GOP越大,画质越好,但存在一个边界

要说明的是,通过提高GOP值来提高图像质量是有限度的:

  1. 在遇到场景切换的时候,H264编码器会自动强制插入一个I帧,此时的GOP就被切断了
  2. 另一方面,在一个GOP中,P/B帧是由I帧预测得到的,如果GOP过大,会导致后续的P/B帧还原得到的质量变差,直到下一个GOP开始的时候,才会恢复图像的质量

同时,由于P/B帧编码的复杂度是大于I帧的,因此过多的P/B帧会影响编码的效率。

另外,过长的GOP还会影响Seek操作的响应速度,因为Seek的时候,需要先定位到前面最近的一个I帧,然后在依次解码后续的P/B帧,直到解码到Seek位置的帧,这样会导致Seek操作响应时间大大增加

更多资料:https://github.com/0voice

http://www.dtcms.com/a/343048.html

相关文章:

  • C++ 单例模式学习
  • Spark读取MySQL数据库表
  • CSS【详解】性能优化
  • 什么是区块链?从比特币到Web3的演进
  • 深入浅出集成学习:从理论到实战,解锁机器学习 “集体智慧”
  • 新的 SHAMOS MacOS 窃取程序利用单行终端命令攻击用户
  • OceanBase 分区裁剪(Partition Pruning)原理解读
  • python + unicorn + xgboost + pytorch 搭建机器学习训练平台遇到的问题
  • Spring Boot集成腾讯云人脸识别实现智能小区门禁系统
  • windows无法访问某个服务器共享文件夹
  • linux中ctype.h字符判断函数实现原理
  • linux中的iptables的简介与常用基础用法
  • springboot人事管理系统源码和论文
  • Python编程练习100例(含答案)
  • HTTP 与 HTTPS:网络通信幽径上的安全秘钥
  • Promise详解:Promise解决ajax回调嵌套问题
  • system\core\init\init.cpp----LoadBootScripts()解析init.rc(2)
  • 五大主流ETL数据集成平台推荐
  • 鸿蒙 NEXT开发中轻松实现人脸识别功能
  • hadoop-3.3.6和hbase-2.4.13
  • 日志收集(ELK)
  • k8s--NetworkPolicy资源对象
  • 打工人项目日报计划
  • 搭建FTP文件共享服务器
  • linux 之 virtio 子系统核心的数据结构
  • DeepSeek R2难产:近期DeepSeek-V3.1 发布更新并开源,成功实现迈向 Agent 时代的第一步
  • 信息收集4----(收集网站指纹信息)
  • CSS 3D动画,围绕旋转动画Demo
  • 常见 Linux 网络命令梳理
  • AGV 技术落地场景解析:从制造业到仓储物流,看自动导引车的行业应用