MPEG视频编码中的I帧,P帧和B帧以及IDR帧

 

      MPEG图像编码包含3个成分:I帧,P帧和B帧。MPEG编码过程中,一些图像压缩成I帧,一些压缩成P帧,另一些压缩成B帧。I帧压缩可以得到6;1的压缩比而不产生任何可觉察的模糊现象。I帧压缩的同时使用P帧压缩,可以达到更高的压缩比而无可觉察的模糊现象。B帧压缩可以达到200:1的压缩比,其文件尺寸一般为I帧压缩尺寸的15%,不到P帧压缩尺寸的一半。I帧压缩去掉图像的空间冗余度,P帧和B帧去掉时间冗余度,下文将进一步解释。

        I帧压缩采用基准帧模式,只提供帧内压缩,即把帧图像压缩到I帧时,仅仅考虑了帧内的图像。I帧压缩不能除去帧间冗余度。帧内压缩基于离散余弦变换(DCT),类似于JPEG和H.261图像中使用DCT的压缩标准。

           P帧采用预测编码,利用相邻帧的一般统计信息进行预测。也就是说,它考虑运动特性,提供帧间编码。P帧预测当前帧与前面最近的I帧或P帧的差别。
B帧为双向帧间编码。它从前面和后面的I帧或P帧中提取数据。B帧基于当前帧与前一帧和后一帧图像之间的差别进行压缩。

           MEPG数据流开始时对CCIR-601规定的SIF分辨率的未压缩数字图像进行抽样。SIF分辨率,对于NTSC制,就是亮度信号为352*240各像素,每个色度信号都为176*120个象素。各信号都是每秒30帧。MPEG压缩器决定了当前帧以I帧,P帧还是B帧。帧确定之后就采用DCT变换,对结果进行量化,舍入,行程编码即变长编码。编码后的典型图像帧序为:IBBPBBPBBPBBIBBPBBPBBPBBI…

         B帧和P帧要求计算机有更强的功能。有些压缩器不能产生B帧或者连P帧也不能产生,则图像的压缩结果将有很明显的间断。

DR帧属于I帧,但是I帧不一定是IDR帧。解码器收到IDR帧时,将驱动器参数块(DPB)清空。而I帧不会。(我自己理解为即把参考帧列表刷新从新更新,就是不再参考idr前面的帧)由此可见,在编码器端,每发一个IDR,就相应地发一个nal。当然在现在的编码中,为了取得更高的图像质量,在一个视频文件中有好多个IDR帧,这些IDR帧把视频文件分成了片,但是每片中第一个帧是IDR,而且仅此一个

例如:存在这样一段视频:

码流

IDR

B

B

P

B

B

P

……

帧号

1

2

3

4

5

6

7

……

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

这里要提一下,当编码器处理完IDR帧遇到B帧时,编码期先把其放入缓存器中存放起来。直接对P进行编码。即编码器中编码的实际顺序是IDR P B B P B B…..即1423756……

你可能感兴趣的:(MPEG视频编码中的I帧,P帧和B帧以及IDR帧)