h264編碼演算法由淺入深(一)

2021-08-13 07:34:20 字數 1022 閱讀 8380

h264壓縮的主要過程。

巨集塊劃分-》幀內/幀間運動檢測-》dct變換,量化-》環路濾波-》熵編碼-》封裝資料寫slice

h264資料幀

編碼器每次輸出乙個slice,一幀資料可能分為多個slice,也可能乙個。大多數情況是乙個slice。

slice型別即nalu型別的定義如下:

0:未規定

1:非idr影象中不採用資料劃分的片段

2:非idr影象中a類資料劃分片段

3:非idr影象中b類資料劃分片段

4:非idr影象中c類資料劃分片段

5:idr影象的片段

6:補充增強資訊 (sei)

7:序列引數集

8:影象引數集

9:分割符

10:序列結束符

11:流結束符

12:填充資料

13 – 23:保留

24 – 31:未規定

1 h264資料幀中,只有i幀是關鍵幀,是被參考的幀。其它如p幀和b幀都是參照其它幀。(參考關係主要體現在巨集塊運動向量和殘差資料計算)

p幀永遠參考前面的幀,可能會參考很多幀,這個由預設值lookahead決定,b幀可能會前後參考。i幀只會有幀内巨集塊間的參考。

3 編碼中又個關鍵指標步長是什麼?

這個取樣週期就是步長的幅度差值。

4 巨集塊運動估計演算法是怎樣的?

巨集塊初始化後悔被分為16x16 ,16x8,8x16 8x8 的巨集塊,並且是將亮度y和色差訊號uv分開的。幀內運動估計,主要是左,右,右上,左上四個方向**。

5 什麼是半畫素內插

巨集塊左運動估計的時候,會有只運動了半個畫素的情況,這種情況下,通過在畫素之間插入估計的畫素值來計算巨集塊運動向量更精確。

6 sad和satd

sad是把整個巨集塊畫素拿來計算殘差,satd是先把巨集塊分為4x4的小塊,進行哈德曼變幻,然後把變幻後的亞畫素湧來計算殘差和運動向量。

以上介紹了h264壓縮的基本流程和一些常見的疑問。

備註:h264壓縮的大部分耗時都是在巨集塊左運動估計的時候,模式選擇和運動向量計算上。

H264編碼原理

條件 1.yuv格式為yuv420 2.解析度為640 480 3.幀率為15 建議碼流500kbps,通過計算可以得到h264壓縮比約為1 100。gop中幀與幀之間的差別小 有失真壓縮包括幀內壓縮和幀間壓縮,幀內壓縮解決的是空域資料冗餘問題,幀間壓縮解決的是時域資料冗餘的問題。無失真壓縮包括dc...

H264編碼原理

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

h264編碼分析 哥倫布編碼

1 首先h264為什麼選用哥倫布編碼?因為h264協議為了節省bits,沒有規定字段表示資料字段長度 資料字段可以根據自身的實際值,可長可短,這樣可以大程度上的節省bit。2 無符號指數哥倫布編碼如何編碼的?在實際資料前面有幾個0就表示,有效資料位數是多少,理解為長度字段,然後資料數值 數值 1,因...