H264編碼原理以及I幀B幀P幀

2021-07-10 23:27:17 字數 2657 閱讀 4773

h264是新一代的編碼標準,以高壓縮高質量和支援多種網路的流**傳輸著稱,在編碼方面,我理解的他的理論依據是:參照一段時間內影象的統計結果表明,在相鄰幾幅影象畫面中,一般有差別的畫素只有10%以內的點,亮度差值變化不超過2%,而色度差值的變化只有1%以內。所以對於一段變化不大影象畫面,我們可以先編碼出乙個完整的影象幀a,隨後的b幀就不編碼全部影象,只寫入與a幀的差別,這樣b幀的大小就只有完整幀的1/10或更小!b幀之後的c幀如果變化不大,我們可以繼續以參考b的方式編碼c幀,這樣迴圈下去。這段影象我們稱為乙個序列(序列就是有相同特點的一段資料),當某個影象與之前的影象變化很大,無法參考前面的幀來生成,那我們就結束上乙個序列,開始下一段序列,也就是對這個影象生成乙個完整幀a1,隨後的影象就參考a1生成,只寫入與a1的差別內容。

在h264協議裡定義了三種幀,完整編碼的幀叫i幀,參考之前的i幀生成的只包含差異部分編碼的幀叫p幀,還有一種參考前後的幀編碼的幀叫b幀。

h264採用的核心演算法是幀內壓縮和幀間壓縮,幀內壓縮是生成i幀的演算法,幀間壓縮是生成b幀和p幀的演算法。

在h264中影象以序列為單位進行組織,乙個序列是一段影象編碼後的資料流,以i幀開始,到下乙個i幀結束。

乙個序列的第乙個影象叫做 idr 影象(立即重新整理影象),idr 影象都是 i 幀影象。h.264 引入 idr 影象是為了解碼的重同步,當解碼器解碼到 idr 影象時,立即將參考幀佇列清空,將已解碼的資料全部輸出或拋棄,重新查詢引數集,開始乙個新的序列。這樣,如果前乙個序列出現重大錯誤,在這裡可以獲得重新同步的機會。idr影象之後的影象永遠不會使用idr之前的影象的資料來解碼。

乙個序列就是一段內容差異不太大的影象編碼後生成的一串資料流。當運動變化比較少時,乙個序列可以很長,因為運動變化少就代表影象畫面的內容變動很小,所以就可以編乙個i幀,然後一直p幀、b幀了。當運動變化多時,可能乙個序列就比較短了,比如就包含乙個i幀和3、4個p幀。

1、i幀

i幀:幀內編碼幀 ,i幀表示關鍵幀,你可以理解為這一幀畫面的完整保留;解碼時只需要本幀資料就可以完成(因為包含完整畫面)

i幀特點:

1)它是乙個全幀壓縮編碼幀。它將全幀影象資訊進行jpeg壓縮編碼及傳輸;

2)解碼時僅用i幀的資料就可重構完整影象;

3)i幀描述了影象背景和運動主體的詳情;

4)i幀不需要參考其他畫面而生成;

5)i幀是p幀和b幀的參考幀(其質量直接影響到同組中以後各幀的質量);

6)i幀是幀組gop的基礎幀(第一幀),在一組中只有乙個i幀;

7)i幀不需要考慮運動向量;

8)i幀所佔資料的資訊量比較大。

2、p幀 

p幀:前向**編碼幀。p幀表示的是這一幀跟之前的乙個關鍵幀(或p幀)的差別,解碼時需要用之前快取的畫面疊加上本幀定義的差別,生成最終畫面。(也就是差別幀,p幀沒有完整畫面資料,只有與前一幀的畫面差別的資料)

p幀的**與重構:p幀是以i幀為參考幀,在i幀中找出p幀「某點」的**值和運動向量,取**差值和運動向量一起傳送。在接收端根據運動向量從i幀中找出p幀「某點」的**值並與差值相加以得到p幀「某點」樣值,從而可得到完整的p幀。

p幀特點:

1)p幀是i幀後面相隔1~2幀的編碼幀;

2)p幀採用運動補償的方法傳送它與前面的i或p幀的差值及運動向量(**誤差);

3)解碼時必須將i幀中的**值與**誤差求和後才能重構完整的p幀影象;

4)p幀屬於前向**的幀間編碼。它只參考前面最靠近它的i幀或p幀;

5)p幀可以是其後面p幀的參考幀,也可以是其前後的b幀的參考幀;

6)由於p幀是參考幀,它可能造成解碼錯誤的擴散;

7)由於是差值傳送,p幀的壓縮比較高。

3、b幀

b幀:雙向**內插編碼幀。b幀是雙向差別幀,也就是b幀記錄的是本幀與前後幀的差別(具體比較複雜,有4種情況,但我這樣說簡單些),換言之,要解碼b幀,不僅要取得之前的快取畫面,還要解碼之後的畫面,通過前後畫面的與本幀資料的疊加取得最終的畫面。b幀壓縮率高,但是解碼時cpu會比較累。

b幀的**與重構

b幀以前面的i或p幀和後面的p幀為參考幀,「找出」b幀「某點」的**值和兩個運動向量,並取**差值和運動向量傳送。接收端根據運動向量在兩個參考幀中「找出(算出)」**值並與差值求和,得到b幀「某點」樣值,從而可得到完整的b幀。

b幀特點

1)b幀是由前面的i或p幀和後面的p幀來進行**的;

2)b幀傳送的是它與前面的i或p幀和後面的p幀之間的**誤差及運動向量;

3)b幀是雙向**編碼幀;

4)b幀壓縮比最高,因為它只反映丙參考幀間運動主體的變化情況,**比較準確;

5)b幀不是參考幀,不會造成解碼錯誤的擴散。

注:i、b、p各幀是根據壓縮演算法的需要,是人為定義的,它們都是實實在在的物理幀。一般來說,i幀的壓縮率是7(跟jpg差不多),p幀是20,b幀可以達到50。可見使用b幀能節省大量空間,節省出來的空間可以用來儲存多一些i幀,這樣在相同位元速率下,可以提供更好的畫質。

順便說下有損(lossy )壓縮和無損(lossy less)壓縮。無失真壓縮也即壓縮前和解壓縮後的資料完全一致。多數的無失真壓縮都採用rle行程編碼演算法。有失真壓縮意味著解壓縮後的資料與壓縮前的資料不一致。在壓縮的過程中要丟失一些人眼和人耳所不敏感的影象或音訊資訊,而且丟失的資訊不可恢復。幾乎所有高壓縮的演算法都採用有失真壓縮,這樣才能達到低資料率的目標。丟失的資料率與壓縮比有關,壓縮比越小,丟失的資料越多,解壓縮後的效果一般越差。此外,某些有損壓縮演算法採用多次重複壓縮的方式,這樣還會引起額外的資料丟失。

**:

H264編碼原理以及I幀 B和P幀詳解

h264是新一代的編碼標準,以高壓縮高質量和支援多種網路的流 傳輸著稱,在編碼方面,我理解的他的理論依據是 參照一段時間內影象的統計結果表明,在相鄰幾幅影象畫面中,一般有差別的畫素只有10 以內的點,亮度差值變化不超過2 而色度差值的變化只有1 以內。所以對於一段變化不大影象畫面,我們可以先編碼出乙...

H264編碼中基本概念i幀,p幀,b幀

i p b 幀編碼的基本流程 幀編碼的基本流程為 15 1 進行幀內 決定所採用的幀內 模式。2 畫素值減去 值,得到殘差。3 對殘差進行變換和量化。4 變長編碼和算術編碼。5 重構影象並濾波,得到的影象作為其它幀的參考幀。p 幀和 b 幀編碼的基本流程為 1 進行運動估計,計算採用幀間編碼模式的率...

idr幀 i幀 p幀 H264中I幀與IDR幀區別

h264中i幀與idr幀區別分類 i和idr幀都是使用幀內 的。它們都是同乙個東西而已,在編碼和解碼中為了方便,要首個i幀和其他i幀區別開,所以才把第乙個首個i幀叫idr,這樣就方便控制編碼和解碼流程。idr幀的作用是立刻重新整理,使錯誤不致傳播,從idr幀開始,重新算乙個新的序列開始編碼。而i幀不...