视频中I/B/P帧的介绍和判定方法

原文地址: http://www.cnblogs.com/ManMonth/archive/2010/02/09/1666328.html

I-P-B frame简介

三种帧类型
\color{red}{IF}——I-frame的缩写,即关键帧。关键帧是构成一个帧组(GOP,Group of Picture)的第一个帧。IF保留了一个场景的所有信息。压缩比为1:7。
\color{red}{PF}——P-frame的缩写,即未来单项预测帧,只储存与之前一个已解压画面的差值。压缩比为1:20。
\color{red}{BF}——B-frame的缩写,即双向预测帧,除了参考之前解压过了的画面外,亦会参考后面一帧中的画面信息。压缩比为1:50。
\color{red}{B-Frame}(在 MPEG-4 里面正确的名称是 B-VOP)的\color{red}{预测模式有四种: }

  • a. Forward 顺向预测,参考前一张画面,记录和前一张画面的差距。和 P-Frame 的预测方法一样。
  • b. Backward 逆向预测,参考下一张画面,记录和下一张画面的的差距。
  • c. Bi-Directionally 双向预测,参考前面和后面两张画面,记录的是和「前后两张画面的平均值」的差距。也叫做内插预测,压缩率最高。
  • d. Direct Mode,不搜寻、纪录动作向量,直接由下一张的 P Frame推导出动作向量。譬如说 I B P,我们可以预测 B画面的动作必然是介于 I 和 P 两个画面之间,所以我们可以直接用 P 的 MV/2 作为B 的动作向量,这样可以省去记录 MV 的空间。
    压缩 B-Frame 的时候会从上面几种预测模式中选压出来最小的一个模式来使用。

MPEG-2图像压缩的原理是利用了图像中的两种特性:空间相关性和时间相关性。这两种相关性使得图像中存在大量的冗余信息。如果我们能将这些冗余信息去除,只保留少量非相关信息进行传输,就可以大大节省传输频带。而接收机利用这些非相关信息,按照一定的解码算法,可以在保证一定的图像质量的前提下恢复原始图像。一个好的压缩编码方案就是能够最大限度地去除图像中的冗余信息。

MPEG-2的编码图像被分为三类,分别称为I帧,P帧和B帧。

  • I帧图像采用帧内编码方式,即只利用了单帧图像内的空间相关性,而没有利用时间相关性。
  • P帧和B帧图像采用帧间编码方式,即同时利用了空间和时间上的相关性。
  • P帧图像只采用前向时间预测,可以提高压缩效率和图像质量。
  • P帧图像中可以包含帧内编码的部分,即P帧中的每一个宏块可以是前向预测,也可以是帧内编码。
  • B帧图像采用双向时间预测,可以大大提高压缩倍数。

I,B,P frame

B帧

B帧(B frame)

基本概念

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

B帧的模式

B 帧在 MPEG-4 中有四种参考模式,如果是同时参考前后的画面压缩,则记录的是 和 (前画面 pixel 值 后画面 pixel 值)/2 的差值,也就是 和 「前后画面的平均」的差值。所以记录的差值个数和 P 帧一样,只有一个,没有增加。
  而因为 B 帧位于前后画面的中间,以「前后画面的平均」,也就是「前后画面的中间值」来作为预测数值(预测 B 帧的 pixel 数值为多少?如果有误差,再记录差值),这样这个预测数值会比单独使用前一个画面来预测,更接近目前真正的 B 帧的数值,可想而知,如此所需要记录的差值就会很小甚至可以根本不用记录,所以便可以省下很多的 bits,提高压缩率。
  例如 亮度变化 -> I B P 7 8 9
  如果 B 只参考前一个画面压缩,则需记录差值 1。如果以 (I P)/2 压缩,则差值为 0,不需记录差值。(虽然要记录两个矢量,不过矢量也可以再做进一步预测压缩,总的来说,还是会比单独参考前一个画面压缩来得小很多)如果画面不是这样变化怎么办?通常来讲画面都会是这样变化,如果不是这样变化我们就不使用 B 帧就算变化不是如此规则,换个方式想,B 帧可以参考的画面还是比 P 帧多,再怎么找,也还是 B 帧可以找到误差更小的方块来使用的机率大(因为可以选择、参考的对象较多),所以 B 帧还是比 P 帧的压缩率来得高。(而且高很多,差距非常大)
  除了压缩率以外,B 帧对画质的影响.....是有的,因为 B 帧这种参考前后画面的特性,等于有内插(interpolation)的效果,所以可以减少噪讯。
  MPEG-4 中的 B 帧,也是非常具有威力的,除了以前的三种参考模式,还有 Direct Mode,连矢量的纪录都省了。虽然 MPEG-4 之中有 4MV 的功能,可以记录四个矢量,不过编码器在压缩的时候会判断,到底是使用 4MV 压出来的结果小,还是使用传统的方法压出来的结果小?
  如果使用传统的方法压出来的结果小,便使用传统的方法记录,如果使用 4MV 压出来的结果小,才使用 4MV 来记录。
  (ps. 4MV 不会用在 backward 预测)
  您可以观察 VirtualDub 压缩时画面上显示的蓝线,您会发现蓝线和蓝线之间通常会有很短的蓝线插在中间,造成空隙,而且差距很大,这个就是夹在 P 之间的 B 在发挥压缩威力如果是用 DivX 5 更明显,因为 DivX 5 只能够使用 IBPBPBPB... 这种一个 B 接一个 P 的形式,所以画面上的蓝线就是「一长一短、一长一短」这样排列。
  关键帧和过渡帧的联系与区别
  1、两个关键帧的中间可以没有过渡帧(如逐帧动画),但过渡帧前后肯定有关键帧,因为过渡帧附属于关键帧;
  2、关键帧可以修改该帧的内容,但过渡帧无法修改该帧内容。
  3、关键帧中可以包含形状、剪辑、组等多种类型的元素或诸多元素,但过渡帧中对象只能是剪辑(影片剪辑、图形剪辑、按钮)或独立形状。   图像(帧)是靠尽可能去除图像空间冗余信息来压缩传输数据量的帧内编码图像; P图像(帧)是通过充分将低于图像序列中前面已编码帧的是间冗余信息来压缩传输数据量的编码图像,也叫预测帧; B图像(帧)是既考虑与源图像序列前面已编码帧,也顾及源图像序列后面已编码帧之间的时间冗余信息来压缩传输数据量的编码图像,也叫双向预测帧;一般地,I帧压缩效率最低,P帧较高,B帧最高。

mpeg4视频中,I帧、p帧、B帧的判定

mpeg4的每一帧开头是固定的:00 00 01 b6,那么我们如何判断当前帧属于什么帧呢?在接下来的2bit,将会告诉我们答案。注意:是2bit,不是byte,下面是各类型帧与2bit的对应关系:

  • \color{red}{00}: I Frame
  • \color{red}{01}: P Frame
  • \color{red}{10}: B Frame

为了更好地说明,我们举几个例子,以下是16进制显示的视频编码:

00 00 01 b6 \color{red}{10} 34 78 97 09 87 06 57 87 …… I帧

00 00 01 b6 \color{red}{50} 78 34 20 cc 66 b3 89 …… P帧

00 00 01 b6 \color{red}{96} 88 99 06 54 34 78 90 98 …… B帧

下面我们来分析一下为什么他们分别是I、P、B帧

0x10 = \color{red}{00}01 0000

0x50 = \color{red}{01}01 0000

0x96 = \color{red}{10}01 0100

大家看红色的2bit,再对照开头说的帧与2bit的对应关系,是不是符合了呢?

下面给出一段c++代码供大家参考:

switch(buf[i] & (BYTE)0xc0)  
{  
    case 0x00:  
        //I Frame  
        break;  
    case 0x40:  
        //P Frame  
        break;  
    case 0x80:  
        //B Frame  
        break;  
    default:  
        break;  
}  
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,843评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,538评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,187评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,264评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,289评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,231评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,116评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,945评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,367评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,581评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,754评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,458评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,068评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,692评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,842评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,797评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,654评论 2 354

推荐阅读更多精彩内容

  • http://blog.csdn.net/huangblog/article/details/8739876 /*...
    JosephDHF阅读 2,944评论 0 8
  • [TOC] 音视频&流媒体 是什么促使我要写这一篇音视频入门文章?那是因为和一妹子打赌码率的概念,结果输了;对一个...
    AllenWu阅读 4,827评论 1 24
  • 前言 H264是新一代的编码标准,以高压缩高质量和支持多种网络的流媒体传输著称,在编码方面,我理解的他的理论依据是...
    renhl阅读 723评论 0 0
  • 前言 H264是新一代的编码标准,以高压缩高质量和支持多种网络的流媒体传输著称,在编码方面,我理解的他的理论依据是...
    秦枫桀阅读 2,057评论 0 1
  • 我一直是一个对孩子的教育特别重视的妈妈,也因为具有老师的身份便将严厉的作风带到了家庭教育中。打着陪伴成长的旗号从孩...
    灿娘阅读 289评论 0 3