原文地址:https://blog.csdn.net/qq_32245927/article/details/80029949?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2allsobaiduend~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點(diǎn)擊打開鏈接
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幀之前的幀. 從這個(gè)意義上說,H.264中的IDR幀頗有MPEG2中I幀的味道.
注:I、B木羹、P各幀是根據(jù)壓縮算法的需要致开,是人為定義的,它們都是實(shí)實(shí)在在的物理幀峰锁。一般來說,I幀的壓縮率是7(跟JPG差不多)双戳,P幀是20虹蒋,B幀可以達(dá)到50§酰可見使用B幀能節(jié)省大量空間魄衅,節(jié)省出來的空間可以用來保存多一些I幀,這樣在相同碼率下塘辅,可以提供更好的畫質(zhì)晃虫。
IDR frame:I和IDR幀都使用幀內(nèi)預(yù)測(cè),在編碼解碼中為了方便扣墩,首個(gè)I幀要和其他I幀區(qū)別開哲银,把第一個(gè)I幀叫IDR,這樣方便控制編碼和解碼流程呻惕,所以IDR幀一定是I幀荆责,但I(xiàn)幀不一定是IDR幀;IDR幀的作用是立刻刷新,使錯(cuò)誤不致傳播,從IDR幀開始算新的序列開始編碼蟆融。I幀有被跨幀參考的可能,IDR不會(huì)草巡。
關(guān)于GOP我看到2種說法,一種說法如上,1個(gè)GOP里面只有一個(gè)I幀山憨,第二種說法是1個(gè)GOP里面可以有好幾個(gè)I幀查乒,所以我就糊涂了。
第一種說法是針對(duì)Mpeg2的郁竟,這里面一個(gè)GOP只有且只有一個(gè)在組頭的I幀玛迄;第二種說法是針對(duì)h264的新特。
I幀不用參考任何幀棚亩,但是之后的P幀和B幀是有可能參考這個(gè)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前面的幀勒虾。
結(jié)論:
每個(gè)GOP一定是以一個(gè)I幀開始的,但是卻不一定指代的是兩個(gè)I幀之間的距離瘸彤。因?yàn)橐粋€(gè)GOP內(nèi)可能包含幾個(gè)I幀修然,只有第一個(gè)I幀(也就是第一幀)才是關(guān)鍵幀。
https://blog.csdn.net/stpeace/article/details/8191194
糾結(jié)概念的人不少质况,這是個(gè)好事愕宋,但有時(shí)用實(shí)驗(yàn)的方法自己親自分析一下會(huì)更好. 一次刻骨銘心的體驗(yàn)勝過千百次的說教, 閑話少扯,進(jìn)入正題.
在MPEG2中结榄,有個(gè)重要的概念叫GOP(group of pictures)中贝,假設(shè)編碼的幀類型為:IBBPBBPBBPBBIBBPBBPBBPBBI..., 那么這個(gè)IBBPBBPBBPBB就叫一個(gè)GOP. 由于誤差會(huì)積累,但MPEG2中的I幀可以阻斷誤差的積累臼朗,也就是說邻寿,在MPEG中I幀后面的幀永遠(yuǎn)不會(huì)參考I幀前面的幀,也就是說依溯,一個(gè)GOP中的幀永遠(yuǎn)不會(huì)參考前一個(gè)GOP中的幀.(另外說句題外話:B幀可以參考下一個(gè)GOP的I幀老厌,但在MPEG2中,B幀不會(huì)作為參考幀黎炉,所以B幀不會(huì)導(dǎo)致誤差積累)
在H.264中就不同了.很多人說枝秤,在H.264中沒有I幀這個(gè)概念了,當(dāng)然這也是有道理的慷嗜,標(biāo)準(zhǔn)中的確沒有這么叫淀弹,但是,為了方便庆械,也可以延續(xù)I幀這個(gè)概念薇溃,那么H.264中什么叫I幀呢?
定義:H.264中的I幀是指幀中的宏塊都是采用幀內(nèi)預(yù)測(cè)方式缭乘,在H.264中有兩種I幀: 普通I幀和IDR幀(特殊I幀).
在H.264中沐序,是IDR幀阻斷了誤差的積累, IDR幀后面的幀都不能參考該IDR幀前面的幀. 在H.264中,普通的I幀并沒有阻斷誤差的積累,那就是說普通I幀后面的幀就可以參考該I幀之前的幀么策幼?事實(shí)正是如此. 下面用H.264visa加以分析驗(yàn)證.
將foreman編碼成 IDR BBPBBPBBPBBPBBIBBPBBPBBPBBI...邑时,用H.264visa對(duì)碼流進(jìn)行分析. 分析第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
易知特姐,該宏塊中一個(gè)小塊的實(shí)際運(yùn)動(dòng)矢量為(7, 1), 該小塊參考了第4幀(P幀)晶丘,也就是說第16幀參考了第4幀,而這兩幀分居不同的GOP之中唐含,可見P幀確實(shí)跨越參考了普通I幀前面的幀. 下面來進(jìn)一步證實(shí). 第16幀中這個(gè)宏塊中運(yùn)動(dòng)矢量為(7,1)的小塊對(duì)應(yīng)的預(yù)測(cè)像素值為:
====================== 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,|
+----------------+----------------+----------------+----------------+
根據(jù)運(yùn)動(dòng)矢量(7,1)去第4幀的重建幀找預(yù)測(cè)塊浅浮,果然就找到了,如下:
====================== 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,|
+----------------+----------------+----------------+----------------+
再次總結(jié):在H.264中捷枯,I幀分為普通I幀和IDR幀(特殊I幀); 在H.264中滚秩,是IDR幀阻斷了誤差的積累, IDR幀后面的幀都不能參考該IDR幀前面的幀, 普通的I幀并沒有阻斷誤差的積累,普通I幀后面的幀可以參考該I幀之前的幀. 在MPEG2中铜靶,I幀阻斷了誤差的積累叔遂,I幀后面的幀不可以參考該I幀之前的幀. 從這個(gè)意義上說他炊,H.264中的IDR幀頗有MPEG2中I幀的味道.