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

AI视觉领域流媒体知识入门介绍(二):深入理解GOP

GOP(group of pictures)

在流行的视频编码算法中,都包含GOP这个概念,例如MPEG-2, H.264, and H.265。

背景

关于视频存储和传输的“size”:

Resolution

分辨率

Uncompressed Bitrate

未压缩时的比特率

1280×720 (720p)~ 1.5 Gbps
1920×1080 (1080p)~ 3 Gbps
3180 x 2160 (2160p or 4K)~ 12 Gbps

试想,要传输一个4k的视频,比特率高达12Gbps,而我们普通家用的带宽也就几百Mbps,根本无法传输,即使传过来了,播放效果基本就是PPT。。。

视频压缩

既然原始视频码率太高无法传输,那自然想到可以先进行数据压缩,减小体积后再传输。

通常是压缩到1-20 Mbps这个范围。

视频压缩的基本原理

在一系列图像中找到并消除冗余。

例如新闻广播,每一帧视频通常与之前和之后的视频非常相似。新闻广播员说话时嘴唇可能会移动,信息可能会沿着屏幕底部滚动,但图像的很大一部分在每一帧之间要么相同,要么非常相似。

那这些重复的/非常相似的像素,完全没必要传输,这样就能起到压缩视频的效果了。

时间压缩

根据上述规律,可以先发送一个包含全部信息的关键帧,后续的帧就只发送与之前的关键帧不一样的地方。接收方收到数据后,通过已经接收到的关键帧+差别数据,就可以“恢复”出原帧。(当然这里的恢复不是100%还原,而是有损的)

这种利用帧的时间先后顺序的方法,属于时间压缩类算法。

空间压缩

思路一脉相承,只不过这次是在同一张图片内部找到并消除重复数据。

例如大部分国家的国旗图片,上面都是大面积的相同颜色,完全可以消除重复。

JPEG格式的图片也是用的类似的方法。

再谈GOP

GOP就是两个关键帧之间的距离。

为什么需要多个关键帧,而不是只发送视频的第一个关键帧即可?

1. 用户是随机开始播放的,并一定是从头开始

2. 若场景变化很大,和最开始的关键帧相比,几乎没什么冗余的部分,此时压缩已经没有意义了

3. 中间再次发送新的关键帧,也能纠正传输错误、误差等,增强了可控制性

关键帧的另一个名字: Intra-coded frame(帧内编码帧,简称I帧)

这种帧在解码时,不依赖其他帧,因此称为“帧内”。

预测帧:Predicted frame,简称P帧

P帧携带的是与前一帧相比,差异的地方。

它既利用了时间压缩,也使用了图片内部的空间压缩。

为什么叫预测帧?预测了与前一帧的变化(具体要深入实际的编码算法)

双向预测帧:Bi-directional Predicted frame,简称B帧

B帧的压缩效果更好,因为它仅携带和前+后两帧之间的差异部分。

如何找到与未来帧之间的差异呢?

很简单,编码器先缓存一部分帧,这样就知道未来帧是啥了

最后总结一下

GOP表示每多少帧发送一个I帧

I帧可以直接被解码,不依赖外部

P帧解码需要依赖前一个P帧or I帧

B帧解码通常依赖前和后一个I帧 or P帧

下图中的两个B帧,按FIFO解码

注意:帧的显示顺序,和帧实际被解码的顺序是不一样的。

相关阅读:

AI视觉领域流媒体知识入门介绍(一)-CSDN博客 

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

相关文章:

  • C++ 代码实例:并查集简单创建工具
  • Hadoop学习总结(Shell操作)
  • LeetCode热题100——链表
  • 使用C++的QT框架实现贪吃蛇
  • 如何发布自己的golang库
  • 梳理自动驾驶中的各类坐标系
  • 一个可以自动把微信聊天收到的二维码图片实时提取出来并分类的软件
  • 02-React组件与模块
  • 项目实战:新增@RequestMapping和@GetMapping和@PostMapping三个注解
  • 基于AOSP源码Android-10.0.0_r41分支编译,framework开发,修改系统默认字体大小
  • 如何再kali中下载iwebsec靶场
  • Spring Boot 使用断言抛出自定义异常,优化异常处理机制
  • vue基于ElementUI/Plus自定义的一些组件
  • leetcode刷题日记:69.sqrt(x)
  • [尚硅谷React笔记]——第9章 ReactRouter6
  • 强大的pdf编辑软件:Acrobat Pro DC 2023中文
  • 玩一下Spring Boot
  • 一个高性能类型安全的.NET枚举实用开源库
  • c#字符串格式化
  • AMD老电脑超频及性能提升方案及实施
  • Github 自动化部署到GitHub Pages
  • Golang 串口通信
  • 项目管理之如何识别并应对项目风险
  • vue封装独立组件:实现手写签名功能
  • 图及谱聚类商圈聚类中的应用
  • npx 和 npm 区别
  • HTML_案例1_注册页面
  • Adobe After Effects 2024(Ae2024)在新版本中的升级有哪些?
  • 超越 GLIP! | RegionSpot: 识别一切区域,多模态融合的开放世界物体识别新方法
  • webgoat-(A1)injection