1. 程式人生 > >H264標準中的基本概念和常識:

H264標準中的基本概念和常識:

1I幀、B幀、P幀、IDR

I幀(關鍵幀),I幀僅僅進行幀內編碼,因此I幀可以無需其他參考幀就可以解碼出來。視訊序列中第一幀都是I幀。I幀用來作為P幀和B幀的參考幀,因此I幀碼流出現問題,可以造成一個GOP組的P幀和B幀解碼出錯。I幀可以用來快進快退以及其他的隨機訪問操作,I幀另外一個作用就是幫助場景切換時,重置畫面質量,當場景進行切換時,可以切換I幀從而更加高效的壓縮P幀和B幀(當然這要求編碼器要有場景切換檢測功能)。由於I幀僅僅進行幀內預測,沒有進行運動估計等幀間預測,因此編碼I幀位元速率比較高。

P幀(預測幀),P幀需要以前面的I幀或者P幀作為參考進行幀間預測,注意P幀僅僅參考它前面的最靠近它的I

幀或者P幀進行幀間預測。編碼端在參考幀中找到P幀某點的預測值以及運動向量,相減獲取預測差值,將差值和運動向量進行編碼後傳輸。在H.264基本配置中僅僅存在I幀和P幀,不存在B幀。

B幀(雙向預測幀)需要參考前面和後面的I幀或者P幀進行幀間預測編碼(如下圖所示);

IDR幀實質也是I幀,在H.264中規定了兩種型別的I幀:normal I framesIDR frames。對於IDR幀,所有位於IDR幀後的B幀和P幀都不能參考IDR幀以前的幀。而普通I幀,I幀後的B幀和P幀仍然可以參考I幀之前的其他幀。I幀的隨機訪問功能是由IDR幀來承擔,一個新的IDR幀開始,可以算是一個新的視訊序列開始(IDR

幀會導致DPB(參考幀列表)清空),因此我們常常將一個序列的第一個I幀作為IDR幀。在視訊中插入IDR幀,是媒體互動(隨機訪問)成為可能,對於一個視訊中沒有IDR幀,這個視訊視訊是不能隨機訪問的。

2H.264中量化引數QP和量化步長QStep的關係

對於亮度編碼而言,量化步長QStep總共有52個值,而量化引數QP就是QStep的序號(0-51)。

3I幀、B幀、P幀的編碼流程:

摘自網路(http://www.cppblog.com/elva/archive/2010/03/19/110082.html),正確性有待考證。

I 幀編碼的基本流程為:

(1) 進行幀內預測,決定所採用的幀內預測模式。

(2) 畫素值減去預測值,得到殘差。

(3) 對殘差進行變換和量化。

(4) 變長編碼和算術編碼。

(5) 重構影象並濾波,得到的影象作為其它幀的參考幀。

P 幀和 B 幀編碼的基本流程為:

(1) 進行運動估計,計算採用幀間編碼流程編碼模式的率失真函式()值。P

只參考前面的幀,B 幀可參考後面的幀。

*(2) 進行幀內預測,選取率失真函式值最小的幀內模式與幀間模式比較,確定

採用哪種編碼模式。

(3) 計算實際值和預測值的差值。

(4) 對殘差進行變換和量化。

(5) 熵編碼,如果是幀間編碼模式,編碼運動向量