I帧,P帧,B帧

部署运行你感兴趣的模型镜像

转自:http://blog.youkuaiyun.com/abcjennifer/article/details/6577934


视频压缩中,每帧代表一幅静止的图像。而在实际压缩时,会采取各种算法减少数据的容量,其中IPB就是最常见的。
  
简单地说,I帧是关键帧,属于帧内压缩。就是和AVI的压缩是一样的。 P是向前搜索的意思。B是双向搜索。他们都是基于I帧来压缩数据。
 
 


I帧表示关键帧,你可以理解为这一帧画面的完整保留;解码时只需要本帧数据就可以完成(因为包含完整画面)


P帧表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。(也就是差别帧,P帧没有完整画面数据,只有与前一帧的画面差别的数据)


B帧是双向差别帧,也就是B帧记录的是本帧与前后帧的差别(具体比较复杂,有4种情况),换言之,要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。B帧压缩率高,但是解码时CPU会比较累~。


从上面的解释看,我们知道I和P的解码算法比较简单,资源占用也比较少,I只要自己完成就行了,P呢,也只需要解码器把前一个画面缓存一下,遇到P时就使用之前缓存的画面就好了,如果视频流只有I和P,解码器可以不管后面的数据,边读边解码,线性前进,大家很舒服。
但网络上的电影很多都采用了B帧,因为B帧记录的是前后帧的差别,比P帧能节约更多的空间,但这样一来,文件小了,解码器就麻烦了,因为在解码时,不仅要用之前缓存的画面,还要知道下一个I或者P的画面(也就是说要预读预解码),而且,B帧不能简单地丢掉,因为B帧其实也包含了画面信息,如果简单丢掉,并用之前的画面简单重复,就会造成画面卡(其实就是丢帧了),并且由于网络上的电影为了节约空间,往往使用相当多的B帧,B帧用的多,对不支持B帧的播放器就造成更大的困扰,画面也就越卡。
 
一般平均来说,I的压缩率是7(跟JPG差不多),P是20,B可以达到50,可见使用B帧能节省大量空间,节省出来的空间可以用来保存多一些I帧,这样在相同码率下,可以提供更好的画质。


下面举例说明:



在如上图中,GOP (Group of Pictures)长度为13,S0~S7 表示 8个视点,T0~T12 为 GOP的 13个时刻。每个 GOP包含帧数为视点数 GOP 长度的乘积。在该图中一个 GOP 中,包含94 个 B帧。B 帧占一个 GOP 总帧数的 90.38%。GOP 越长,B 帧所占比例更高,编码的率失真性能越高。下图测试序列 Race1 在不同 GOP 下的率失真性能对比。


您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

### I、P、B和GOP的概念及在视频编码中的作用 #### 1. I(Intra-coded Frame) I是关键,也被称为内编码。它不依赖于任何其他进行解码,而是通过内压缩技术单独生成。I包含完整的图像信息,因此其数据量通常较大。在视频编码中,I的作用是提供一个参考点,用于后续P和B的预测编码[^4]。 #### 2. P(Predicted Frame) P是向前参考,使用间压缩技术生成。P基于前面已经解码的I或P进行预测编码,只存储与前一之间的差异信息。因此,P的数据量通常比I小得多。P的作用在于减少冗余信息,提高视频编码的压缩效率[^4]。 #### 3. B(Bidirectional Predicted Frame) B是双向参考,使用间压缩技术生成。B基于前后两个已解码的(I或P)进行预测编码,只存储与前后之间的差异信息。由于B需要前后作为参考,它的解码顺序可能不同于播放顺序。B的数据量通常最小,约为I的1/4大小。B的主要作用是进一步提升压缩效率,尤其是在场景变化较小的情况下[^4]。 #### 4. GOP(Group of Pictures) GOP是一组连续的视频,通常以I开头,然后包含一系列的P和B。GOP的大小可以根据编码器的设置调整。较大的GOP可以提高视频的压缩效率,但会增加延迟。GOP的作用是将视频分割为多个独立的序列,每个序列以I为起点,便于解码器快速定位和解码特定部分。此外,GOP还影响视频的质量和响应速度。例如,过长的GOP可能导致Seek操作响应时间变长,因为解码某个P或B时需要先解码整个GOP内的I及之前的预测[^2]。 #### 5. 视频编码中的作用 - **压缩效率**:通过使用P和B视频编码可以显著减少冗余信息,从而实现更高的压缩效率。 - **错误恢复**:I作为参考点,可以在遇到错误时重新开始解码,防止错误传播。IDR是一种特殊的I,能够立即刷新解码器缓冲区。 - **场景切换**:在场景切换时,编码器通常会自动插入一个新的I,以确保解码的准确性[^3]。 - **延迟控制**:较大的GOP可以提高压缩效率,但会增加延迟,因此在实时通信中通常使用较小的GOP[^2]。 ```python # 示例代码:模拟GOP结构 class GOP: def __init__(self, i_frame, p_frames, b_frames): self.i_frame = i_frame self.p_frames = p_frames self.b_frames = b_frames def decode(self): decoded_frames = [self.i_frame] for p in self.p_frames: decoded_frames.append(p) for b in self.b_frames: decoded_frames.insert(decoded_frames.index(p) - 1, b) return decoded_frames # 创建一个简单的GOP i_frame = "I" p_frames = ["P1", "P2"] b_frames = ["B1", "B2", "B3"] gop = GOP(i_frame, p_frames, b_frames) decoded_order = gop.decode() print("解码顺序:", decoded_order) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值