H.264中的幀

HolyZion發表於2023-11-21

導言

高階影片編碼 (AVC) 也稱為 H.264,是使用最廣泛的影片壓縮標準。它與所有主要的流式傳輸協議和容器格式相容。
當我們使用播放器播放一個影片時,通常會經過:解協議,解封裝,音影片解碼,音影片同步這幾個步驟。其中H.264就是影片解碼階段的標準。透過解封裝,可以將資料解析為H.264格式的資料流,透過解碼,可以將H.264格式的資料流輸出為非壓縮的顏色資料,如YUV,RGB等。

影片幀

在影片編碼中,影片由一系列連續的影像幀組成。每一幀都代表影片中的一個瞬間影像,而它們之間存在特定的關係。為了壓縮影片資料的大小,H.264中有三種不同的幀。

I幀

關鍵幀是影片序列中的關鍵參考點,它是獨立編碼的幀,不依賴於其他幀。
關鍵幀包含完整的資訊,可以獨立解碼出網站的影像。基於其特性,播放器在進行快進操作時,一般都會跳轉到I幀,確保在該關鍵幀之後的播放過程中可以正常解碼和顯示影片。這樣可以有效減少解碼所需的計算量,提高快進操作的響應速度。

P幀

預測幀是相對於關鍵幀的幀,它透過對前面的關鍵幀或預測幀進行預測來編碼。
P幀相對於I幀具有較小的檔案大小,因為它只儲存相對於參考幀的差異資訊。但是在進行解碼時,P幀也需要依賴之前的幀進行解碼。

B幀

雙向預測幀引入了更復雜的預測方式,利用前後的關鍵幀和預測幀進行雙向預測。
相對於關鍵幀(I 幀)和預測幀(P 幀)具有更高的壓縮效率和更復雜的結構,適當的引入B幀可以顯著的較小影片檔案的大小,提升影片的傳輸效率。

幀解碼和播放順序

由於一個影片檔案中可能存在I,B,P三種不同的影片幀,所以幀的解碼和播放順序可能會不同。在H.264中,有兩個時間戳,一個是PTS,一個是DTS:

  • PTS(Presentation Time Stamp):
    • PTS 表示影片幀應該被展示的時間。它指示影片幀何時應該在播放器中顯示給使用者。
    • PTS 的時間單位通常是毫秒(ms)或時鐘週期,取決於具體的應用和實現。
    • PTS 的值不僅受到幀自身的編碼時間影響,還受到解碼和顯示的延遲等因素的影響。
  • DTS(Decoding Time Stamp):
    • DTS 表示影片幀應該被解碼的時間。它指示影片幀何時應該被送入解碼器進行解碼。
    • 與 PTS 不同,DTS 主要關注解碼過程,而不是展示過程。
    • 在一些情況下,影片幀的 DTS 可能等於其 PTS,但在其他情況下可能存在差異,這取決於編碼和解碼過程中的各種因素。

在影片中沒有B幀時,影片的解碼順序和播放順序如下:

Stream: I P P P P P P 
   PTS: 1 2 3 4 5 6 7
   DTS: 1 2 3 4 5 6 7

在影片中存在B幀時,影片的解碼順序和播放順序如下:

Stream: I B B P B B P
   PTS: 1 2 3 4 5 6 7
   DTS: 1 3 4 2 6 7 5

GOP

全稱是Group of Pictures,即畫面組,是一組連續的畫面。
一個GOP由一系列影像幀組成,這些影像幀通常都是I幀,或者P幀,或者B幀。GOP的長度就是兩個I幀之間的距離。
在影片編碼中,GOP(Group of Pictures)的結構通常用"M"和"N"來表示:

  • M幀(IPredictive週期):表示在兩個I幀(包括第一個I幀)之間的幀數,即P幀和B幀的總數。M幀的設定影響著兩個I幀之間的編碼週期長度。
  • N幀(GOP週期):表示兩個連續I幀之間的總幀數,包括M幀、I幀以及I幀之間的所有幀。N幀定義了一個GOP的長度。

例如

IBBPBBPBBPBB

其中M=2,N=12。這表示兩個I幀之間有10幀,其中包含了2個P幀和8個B幀。這樣的結構有助於提高影片編碼的壓縮效率和壓縮質量。

IDR

I幀和IDR幀都是H.264影片編碼中的關鍵幀,所有的 IDR 幀都是 I 幀,但是並不是所有 I 幀都是 IDR 幀。
IDR幀在一些方面和I幀有一些區別。

  • IDR幀也是關鍵幀,但有一個重要的特性是它可以用來隨時重新整理解碼器的狀態。
  • 當解碼器在解碼過程中發生錯誤或需要進行隨機訪問時,通常會使用IDR幀來重新開始解碼。
  • IDR幀之後的幀不可以參考之前的幀。
    總體而言,IDR幀可以看作是一種特殊型別的I幀,具有附加的重新整理解碼器狀態的功能。在需要在任何時間點重新開始解碼時,IDR幀是很有用的。

相關文章