I帧和IDR帧
原文地址: https://blog.csdn.net/qq_32245927/article/details/80029949?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2 all sobaiduend~default-3-80029949.nonecase&utm_term=%E4%B8%80%E4%B8%AAgop%E5%87%A0%E4%B8%AAi%E5%B8%A7&spm=1000.2123.3001.4430
推荐: https://blog.csdn.net/qq_29350001/article/details/73770702 点击打开链接
https://blog.csdn.net/chenchong_219/article/details/44870903
https://blog.csdn.net/stpeace/article/details/8191194
在H.264中,I帧分为普通I帧和IDR帧(特殊I帧); 在H.264中,是IDR帧阻断了误差的积累, IDR帧后面的帧都不能参考该IDR帧前面的帧, 普通的I帧并没有阻断误差的积累,普通I帧后面的帧可以参考该I帧之前的帧. 在MPEG2中,I帧阻断了误差的积累,I帧后面的帧不可以参考该I帧之前的帧. 从这个意义上说,H.264中的IDR帧颇有MPEG2中I帧的味道.
注:I、B、P各帧是根据压缩算法的需要,是人为定义的,它们都是实实在在的物理帧。一般来说,I帧的压缩率是 7 (跟JPG差不多),P帧是 20 ,B帧可以达到 50 。可见使用B帧能节省大量空间,节省出来的空间可以用来保存多一些I帧,这样在相同码率下,可以提供更好的画质。
IDR frame:I和IDR帧都使用 帧内预测 ,在编码解码中为了方便,首个 I帧 要和其他I帧区别开,把第一个I帧叫IDR,这样方便控制编码和解码流程,所以IDR帧一定是I帧,但I帧不一定是IDR帧;IDR帧的作用是立刻刷新,使错误不致传播,从IDR帧开始算新的序列开始编码。I帧有被跨帧参考的可能,IDR不会。
关于GOP我看到2种说法,一种说法如上,1个GOP里面只有一个 I帧 ,第二种说法是1个GOP里面可以有好几个 I帧 ,所以我就糊涂了。
第一种说法是针对 Mpeg2 的,这里面一个GOP只有且只有一个在组头的 I帧 ;第二种说法是针对 h264 的新特。
I帧不用参考任何帧,但是之后的P帧和B帧是有可能参考这个I帧之前的帧的。IDR就不允许这样。
如:
IDR1 P4 B2 B3 P7 B5 B6 I10 B8 B9 P13 B11 B12 P16 B14 B15 这里的B8可以跨过I10去参考P7
而
IDR1 P4 B2 B3 P7 B5 B6 IDR8 P11 B9 B10 P14 B11 B12 这里的B9就只能参照IDR8和P11,不可以参考IDR8前面的帧。
结论:
https://blog.csdn.net/stpeace/article/details/8191194
纠结概念的人不少,这是个好事,但有时用实验的方法自己亲自分析一下会更好. 一次刻骨铭心的体验胜过千百次的说教, 闲话少扯,进入正题.
在MPEG2中,有个重要的概念叫GOP(group of pictures),假设编码的帧类型为:IBBPBBPBBPBBIBBPBBPBBPBBI..., 那么这个IBBPBBPBBPBB就叫一个GOP. 由于误差会积累,但MPEG2中的I帧可以阻断误差的积累,也就是说,在MPEG中I帧后面的帧永远不会参考I帧前面的帧,也就是说,一个GOP中的帧永远不会参考前一个GOP中的帧.(另外说句题外话:B帧可以参考下一个GOP的I帧,但在MPEG2中,B帧不会作为参考帧,所以B帧不会导致误差积累)
在H.264中就不同了.很多人说,在H.264中没有I帧这个概念了,当然这也是有道理的,标准中的确没有这么叫,但是,为了方便,也可以延续I帧这个概念,那么H.264中什么叫I帧呢?
定义:H.264中的I帧是指帧中的宏块都是采用帧内预测方式,在H.264中有两种I帧: 普通I帧和IDR帧(特殊I帧).
在H.264中,是IDR帧阻断了误差的积累, IDR帧后面的帧都不能参考该IDR帧前面的帧. 在H.264中,普通的I帧并没有阻断误差的积累,那就是说普通I帧后面的帧就可以参考该I帧之前的帧么?事实正是如此. 下面用H.264visa加以分析验证.
将foreman编码成 IDR BBPBBPBBPBBPBBIBBPBBPBBPBBI...,用H.264visa对码流进行分析. 分析第16帧(P帧)的某一宏块,该宏块信息为:
==== MB 61(6, 5) ====
Location : (96, 80),
Slice No. : 0
Slice Type : P Slice
MB Type : (3)P_8x8
NumMbPart : 4
MbPartSize : (8, 8)
Subblock Type:
+-----------------+----------------+
| (2)P_L0_4x8 | (2)P_L0_4x8 |
+-----------------+----------------+
| (2)P_L0_4x8 | (2)P_L0_4x8 |
+-----------------+----------------+
****** Inter Info ******
Block(0, 0):
(0,0) L0=MV(63,-7),POC:24,refIdx:0,DecNo: 11
(1,0) L0=MV(71,-5),POC:24,refIdx:0,DecNo: 11
Block(1, 0):
(0,0) L0=MV(31, 3),POC: 6,refIdx:3,DecNo: 2
(1,0) L0=MV(28, 4),POC: 6,refIdx:3,DecNo: 2
Block(0, 1):
(0,0) L0=MV(66,-6),POC:24,refIdx:0,DecNo: 11
(1,0) L0=MV(69,-3),POC:24,refIdx:0,DecNo: 11
Block(1, 1):
(0,0) L0=MV(-32,18),POC: 0,refIdx:4,DecNo: 1
(1,0) L0=MV(-29,10),POC: 0,refIdx:4,DecNo: 1
易知,该宏块中一个小块的实际运动矢量为(7, 1), 该小块参考了第4帧(P帧),也就是说第16帧参考了第4帧,而这两帧分居不同的GOP之中,可见P帧确实跨越参考了普通I帧前面的帧. 下面来进一步证实. 第16帧中这个宏块中运动矢量为(7,1)的小块对应的预测像素值为:
====================== Y Data ======================
+----------------+----------------+----------------+----------------+
|135,134,134,134,|133,130,149,165,|165,186,201,195,|192,178,159,140,|
|134,134,136,137,|157,162,178,187,|175,184,189,188,|185,177,165,150,|
|133,139,148,156,|179,183,186,190,|171,181,184,182,|180,175,165,150,|
|129,141,154,162,|160,166,168,173,|165,174,176,173,|171,171,164,151,|
+----------------+----------------+----------------+----------------+
|119,123,123,123,|123,135,145,152,|160,167,169,167,|165,165,165,153,|
|100, 97, 83, 72,| 79,102,126,134,|150,155,158,157,|153,153,158,151,|
| 95, 84, 69, 54,| 58, 72, 96,114,|136,143,145,146,|143,142,141,140,|
|120,100, 82, 70,| 65, 59, 73, 98,|119,126,129,131,|126,125,126,126,|
+----------------+----------------+----------------+----------------+
|139,126,108,103,|109, 95, 81, 88,|108,111,109,111,|119,115,105, 92,|
|152,144,130,116,|109,106,102,106,|107,108,107,108,|107,103, 97, 95,|
|154,145,135,119,|109,104,101, 99,|106,104,105,104,|107,102,100,107,|
|158,154,146,128,|107, 96, 93, 95,|105,103,103,104,|108,110,111,115,|
+----------------+----------------+----------------+----------------+
|172,171,170,144,|121,101, 90, 91,|103, 99,103,104,|109,114,119,122,|
|164,164,164,157,|141,119,100, 95,|103, 97,104,106,|110,115,120,124,|
|137,138,136,142,|128,129,121,113,|108,108,111,114,|111,116,123,127,|
|128,125,125,123,|116,113,113,110,|114,115,116,117,|113,118,124,128,|
+----------------+----------------+----------------+----------------+
根据运动矢量(7,1)去第4帧的重建帧找预测块,果然就找到了,如下:
====================== Y Data ======================
+----------------+----------------+----------------+----------------+
|159,180,194,183,|166,147,133,125,|121,122,124,128,|130,136,127,145,|
|174,190,200,192,|178,159,140,127,|122,124,126,130,|133,135,127,116,|
|177,184,186,185,|177,165,150,130,|123,126,129,131,|134,137,136,117,|
|172,182,183,180,|175,165,150,132,|124,126,130,133,|134,135,135,119,|
+----------------+----------------+----------------+----------------+
|165,173,172,171,|171,164,151,132,|121,125,128,132,|134,135,137,116,|
|159,167,166,165,|165,165,153,139,|115,120,125,130,|133,134,136,112,|
|147,152,154,153,|153,158,151,140,|110,116,122,128,|131,134,131,107,|
|135,141,142,143,|142,141,140,127,|108,112,118,126,|130,134,131,105,|
+----------------+----------------+----------------+----------------+
|116,122,125,126,|125,126,126,118,|106,109,116,124,|128,134,131,105,|
|104,111,112,113,|112,113,113,109,|106,106,115,123,|128,132,134,104,|
|104,109,110,112,|113,113,112,111,|109,106,113,120,|128,130,132,103,|
|104,107,108,111,|113,117,121,122,|117,111,112,120,|128,129,124,103,|
+----------------+----------------+----------------+----------------+
|104,105,108,112,|115,119,125,125,|123,120,118,122,|127,129,125,103,|
|103,106,109,116,|120,123,126,127,|127,125,125,122,|127,127,120,100,|
|103,106,110,118,|123,126,128,129,|130,128,127,126,|126,124,115, 99,|
|104,106,111,118,|125,129,130,131,|130,130,128,128,|128,123,110, 98,|
+----------------+----------------+----------------+----------------+
再次总结:在H.264中,I帧分为普通I帧和IDR帧(特殊I帧); 在H.264中,是IDR帧阻断了误差的积累, IDR帧后面的帧都不能参考该IDR帧前面的帧, 普通的I帧并没有阻断误差的积累,普通I帧后面的帧可以参考该I帧之前的帧. 在MPEG2中,I帧阻断了误差的积累,I帧后面的帧不可以参考该I帧之前的帧. 从这个意义上说,H.264中的IDR帧颇有MPEG2中I帧的味道.
1、流通国家不同:印度的货币单位是“卢比”,印度尼西亚的货币是“印尼盾”。
2、面值不同:卢比的币值有1、2、5、10、20、50、100、500、1000卢比;印尼盾的币值有1000、2000、5000、10000、20000、50000、100000。
3、货币中的人物头像不同:印度卢比正面都是印度国父圣雄甘地;印尼盾的正面印有民族英雄,不同币值上的民族英雄不同。
4、同人民币的汇率不同:印度卢比大概1:7汇率,印尼盾大概1:1500。
5、简称不同:印度卢比国际上通用简写“Rs”、“Re”或“INR”;印尼盾的简写是Rp。
扩展资料:
印度卢比和印度尼西亚盾的历史由来:
1、“卢比”一词意即“银币”。在19世纪,当时全球最强的经济体系以黄金作为标准,随着美国及欧洲殖民者发现不少银,银与金的相对价值也随之下跌,印度不能以标准货币从外界采购,这事件称之为“卢比的衰落”。(也就是说印度卢比不能自由兑换除美金、欧元以外的其它外国货币)
2、在1944,荷兰建立了NICA - Semi ArmyNetherlands Indies Civil Administration 军队,那时候荷兰造出了印尼盾NICA GULDEN,所以所谓印尼盾就是荷兰做出的钱币。但是印度尼西亚独立之后,政府不再使用荷兰留下的钱而换新币,把“卢比”作为印尼法定货币而不再使用“印尼盾”了。
大多数印尼华裔,特别是前一代的社会或年纪大的华族不正确地称呼国家法定的纸币“卢比”说成“印尼盾”NICA Gulden,但历史上很清楚地写道印度尼西亚不再使用印尼盾了,无论所有的印尼华人不对地称呼印尼币,但我们该知道印尼法定钱币就是卢比而不是盾。
很遗憾的事儿是国家独立之后,一般印度尼西亚的原住民对汉文字不了解也不知说汉语,因此无人纠正印尼华族的这个大错误。
全世界懂得汉语的人也不少了,包括印尼原住民,学汉语的人也越来越多,这事实也瞒不起来了。在印尼,“印尼盾”已经不存在了,自从这国家独立后,印尼开始使用国家政府创造的新货币,那是“卢比”。
百度百科——印度尼西亚盾
印度卢比
鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com
图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!