I帧 B帧 p帧 IDR帧的区别

本文介绍了视频编码中的关键概念,包括I帧、P帧和B帧的工作原理及其在视频压缩中的作用。详细解释了I帧和IDR帧的区别及应用场景,以及P帧和B帧如何通过前后帧的数据对比实现高效压缩。

IDRInstantaneous Decoding Refresh--即时解码刷新。 

I:帧内编码帧是一种自带全部信息的独立帧,无需参考其它图像便可独立进行解码,视频序列中的第一个帧始终都是I帧。 

   IIDR帧都是使用帧内预测的。它们都是同一个东西而已,在编码和解码中为了方便,要首个I帧和其他I区别开,所以才把第一个首个I帧叫IDR,这样就方便控制编码和解码流程。 IDR帧的作用是立刻刷新,使错误不致传播,IDR帧开始,重新算一个新的序列开始编码。而I帧不具有随机访问的能力,这个功能是由IDR承担。 IDR会导致DPBDecodedPictureBuffer 参考帧列表——这是关键所在)清空,而I不会。IDR图像一定是I图像,但I图像不一定是IDR图像。一个序列中可以有很多的I图像,I图像之后的图像可以引用I图像之间的图像做运动参考。一个序列中可以有很多的I图像,I图像之后的图象可以引用I图像之间的图像做运动参考。 

   对于IDR帧来说,在IDR帧之后的所有帧都不能引用任何IDR帧之前的帧的内容,与此相反,对于普通的I-帧来说,位于其之后的B-P-帧可以引用位于普通I-帧之前的I-帧。从随机存取的视频流中,播放器永远可以从一个IDR帧播放,因为在它之后没有任何帧引用之前的帧。但是,不能在一个没有IDR帧的视频中从任意点开始播放,因为后面的帧总是会引用前面的帧 。

  收到 IDR 帧时,解码器另外需要做的工作就是:把所有的 PPS 和 SPS 参数进行更新。

  对IDR帧的处理(I帧的处理相同)(1) 进行帧内预测,决定所采用的帧内预测模式。(2) 像素值减去预测值,得到残差。(3) 对残差进行变换和量化。(4) 变长编码和算术编码。(5) 重构图像并滤波,得到的图像作为其它帧的参考帧。

  多参考帧情况下,  举个例子 :有如下帧序列: IPPPP P PPP ……。按照 3 个参考帧编码。

     因为“按照 3 个参考帧编码”,所以参考帧队列长度为 3 。

    遇到绿色的 I 时,并不清空参考帧队列,把这个 I 帧加入参考帧队列(当然 I 编码时不用参考帧。)。再检测到红色的 P 帧时,用到的就是 PPI 三帧做参考了。


P:前向预测编码帧

    在针对连续动态图像编码时,将连续若干幅图像分成P,B,I三种类型,P帧由在它前面的P帧或者I帧预测而来,它比较与它前面的P帧或者I帧之间的相同信息或数据,也即考虑运动的特性进行帧间压缩。P帧法是根据本帧与相邻的前一帧(I帧或P帧)的不同点来压缩本帧数据。采取P帧和I帧联合压缩的方法可达到更高的压缩且无明显的压缩痕迹。

P帧的预测与重构:P帧是以I帧为参考帧,在I帧中找出P某点预测值和运动矢量,取预测差值和运动矢量一起传送。在接收端根据运动矢量从I帧中找出P某点的预测值并与差值相加以得到P帧某点样值,从而可得到完整的P帧。

有的视频序列比较简单,就没有B帧,

B帧:双向预测内插编码帧

B帧的预测与重构

 B帧法是双向预测的帧间压缩算法。当把一帧压缩成B帧时,它根据相邻的前一帧、本帧以及后一帧数据的不同点来压缩本帧,也即仅记录本帧与前后帧的差值。只有采用B帧压缩才能达到2001的高压缩。

 B帧是以前面的IP帧和后面的P帧为参考帧,找出B某点的预测值和两个运动矢量,并取预测差值和运动矢量传送。接收端根据运动矢量在两个参考帧中

<think>好的,用户问的是IIDR的异同。之前他们问了I是否依赖上一个I,我回答过I是独立的,但提到了IDR的特殊性。现在需要详细比较两者的异同。 首先,我需要确认IIDR的基本定义。I内编码,不依赖其他IDR是I的一种特殊类型,它后面不能有B/P依赖于之前的,会清空参考缓存。 接下来要比较相同点:都是关键,都独立编码,不依赖其他。不同点方面,IDR更严格,强制清空缓存,确保后续不依赖前面的。结构上,IDR一定是I,但I不一定是IDR。应用场景方面,IDR用于随机访问和错误恢复,而普通I可能用于周期性刷新。 还要注意用户可能的深层需求,比如他们在处理视频编码问题,或者想了解关键的作用。可能需要解释参数集SPS/PPS是否相关,但用户这次问题集中在I和IDR,所以暂时不需要扩展。 最后,确保回答结构清晰,分点列出异同,并给出示例代码,比如判断是否是IDR。然后生成相关问题,比如两者的区别IDR的作用、如何生成、参数集的作用、和GOP的关系等。</think>H264中IIDR的核心异同如下: ### 相同点: 1. **内编码**:两者均采用内预测(Intra Prediction),不依赖其他的时间信息。 2. **独立解码**:均可独立解码,无需参考其他(如P/B)。 3. **关键作用**:均为视频序列的随机访问点,用于快速定位和恢复解码。 ### 不同点: | **特性** | **I** | **IDR** | |------------------|---------------------------|-----------------------------------| | **参考清空** | 不强制清空解码器的参考缓存 | 强制清空所有参考缓存(`ref_pic_list`) | | **后续依赖** | 后续可能依赖其作为参考 | 后续**绝对不能**依赖IDR之前的任何 | | **结构位置** | 可出现在序列任意位置 | 通常位于GOP(图像组)的起始位置 | | **SPS/PPS传输** | 可能复用之前的参数集 | 通常携带新的SPS/PPS(可选) | | **错误恢复能力** | 无强制错误恢复机制 | 用于强制恢复解码器状态,抵抗传输错误 | ```python # 示例:判断H264是否为IDR(伪代码) def is_idr_frame(nal_unit): if nal_unit.type == 5: # NAL单元类型5对应IDR return True return False ``` ### 关键点: - **IDR一定是I**,但I不一定是IDR。 - IDR的出现会**重置解码器状态**,确保后续解码与之前完全隔离。 - 在实际编码中,IDR通常作为关键间隔的起点(如每2秒插入一个IDR)。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sunxiaopengsun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值