H.264中的帧
導言
高級視頻編碼 (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幀是很有用的。
總結
- 上一篇: 华为Type-C接口防腐蚀专利曝光 让你
- 下一篇: 吉家宠物出席观远数据智能决策峰会,宠物行