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博客

相关推荐
阿赵3D几秒前
Unity引擎播放HLS自适应码率流媒体视频
unity·游戏引擎·音视频·流媒体·hls
用户5191495848457 分钟前
使用JavaScript与CSS创建"移动高亮"导航栏
人工智能·aigc
sukalot12 分钟前
window显示驱动开发—在混合系统中使用跨适配器资源
数据库·驱动开发·音视频
Java中文社群15 分钟前
淘宝首位程序员离职,竟投身AI新公司做这事!
人工智能·后端·程序员
失散1327 分钟前
自然语言处理——02 文本预处理(上)
人工智能·自然语言处理
Listennnn1 小时前
nuScence数据集
人工智能
duration~1 小时前
SpringAI集成MCP
人工智能·后端·spring·ai
用户5191495848451 小时前
Linux内核UAF漏洞利用实战:Holstein v3挑战解析
人工智能·aigc
nenchoumi31191 小时前
Tello无人机与LLM模型控制 ROS
人工智能·语言模型·机器人·无人机
居然JuRan1 小时前
每天拆解一个AI知识: Context Engineering
人工智能