I幀,P幀,B幀,視頻碼率,幀率和分辨率 區(qū)別和理解

視頻壓縮中,每幀代表一幅靜止的圖像。而在實際壓縮時,會采取各種算法減少數(shù)據(jù)的容量,其中IPB就是最常見的。

簡單地說,I幀是關鍵幀,屬于幀內壓縮。就是和AVI的壓縮是一樣的。 P是向前搜索的意思。B是雙向搜索。他們都是基于I幀來壓縮數(shù)據(jù)。

I幀表示關鍵幀,你可以理解為這一幀畫面的完整保留;解碼時只需要本幀數(shù)據(jù)就可以完成(因為包含完整畫面)

P幀表示的是這一幀跟之前的一個關鍵幀(或P幀)的差別,解碼時需要用之前緩存的畫面疊加上本幀定義的差別,生成最終畫面。(也就是差別幀P幀沒有完整畫面數(shù)據(jù),只有與前一幀的畫面差別的數(shù)據(jù)

B幀是雙向差別幀,也就是B幀記錄的是本幀與前后幀的差別(具體比較復雜,有4種情況),換言之,要解碼B幀,不僅要取得之前的緩存畫面,還要解碼之后的畫面,通過前后畫面的與本幀數(shù)據(jù)的疊加取得最終的畫面。B幀壓縮率高,但是解碼時CPU會比較累~。

從上面的解釋看,我們知道I和P的解碼算法比較簡單,資源占用也比較少,I只要自己完成就行了,P呢,也只需要解碼器把前一個畫面緩存一下,遇到P時就使用之前緩存的畫面就好了,如果視頻流只有I和P,解碼器可以不管后面的數(shù)據(jù),邊讀邊解碼,線性前進。

但網(wǎng)絡上的電影很多都采用了B幀,因為B幀記錄的是前后幀的差別,比P幀能節(jié)約更多的空間,但這樣一來,文件小了,解碼器就麻煩了,因為在解碼時,不僅要用之前緩存的畫面,還要知道下一個I或者P的畫面(也就是說要預讀預解碼),而且,B幀不能簡單地丟掉,因為B幀其實也包含了畫面信息,如果簡單丟掉,并用之前的畫面簡單重復,就會造成畫面卡(其實就是丟幀了),并且由于網(wǎng)絡上的電影為了節(jié)約空間,往往使用相當多的B幀,B幀用的多,對不支持B幀的播放器就造成更大的困擾,畫面也就越卡

一般平均來說,I的壓縮率是7(跟JPG差不多),P是20,B可以達到50,可見使用B幀能節(jié)省大量空間,節(jié)省出來的空間可以用來保存多一些I幀,這樣在相同碼率下,可以提供更好的畫質。

下面舉例說明:


在如上圖中,GOP (Group of Pictures)長度為13,S0~S7 表示 8個視點,T0~T12 為 GOP的 13個時刻。每個 GOP包含幀數(shù)為視點數(shù) GOP 長度的乘積。在該圖中一個 GOP 中,包含94 個 B幀。B 幀占一個 GOP 總幀數(shù)的 90.38%。GOP 越長,B 幀所占比例更高,編碼的率失真性能越高。下圖測試序列 Race1 在不同 GOP 下的率失真性能對比。


總結 : I幀,P幀,B幀 理解看粗體字的標記,關鍵的點都標出了,一定要看重點。

分辨率:影響圖像大小,與圖像大小成正比:分辨率越高,圖像越大;分辨率越低,圖像越小。

視頻碼率:(1:傳輸碼率;2:編碼碼率)

碼率:影響體積,與體積成正比:碼率越大,體積越大;碼率越小,體積越小。

傳輸碼率:碼率就是數(shù)據(jù)傳輸時單位時間傳送的數(shù)據(jù)位數(shù),一般我們用的單位是kbps即千位每秒。也就是取樣率(并不等同與采樣率,采樣率的單位是Hz,表示每秒采樣的次數(shù)),單位時間內取樣率越大,精度就越高,處理出來的文件就越接近原始文件,但是文件體積與取樣率是成正比的,所以幾乎所有的編碼格式重視的都是如何用最低的碼率達到最少的失真,圍繞這個核心衍生出來cbr(固定碼率)與vbr(可變碼率), “碼率”就是失真度,碼率越高越清晰,反之則畫面粗糙而多馬賽克。

編碼碼率:單位時間的數(shù)據(jù)位數(shù),(下面的結論是針對編碼碼率來說的跟傳輸碼率沒啥關系)

1:在碼率一定的情況下,分辨率與清晰度成反比關系:分辨率越高,圖像越不清晰,分辨率越低,圖像越清晰。(一幀圖像就那么多數(shù)據(jù),分辨率(面積大)越高,碼率一定,相對圖像越不清晰了)

2:在分辨率一定的情況下,碼率與清晰度成正比關系,碼率越高,圖像越清晰;碼率越低,圖像越不清晰。

幀率:影響畫面流暢度,與畫面流暢度成正比,幀率越大,畫面越流暢;幀率越小,畫面越有跳動感。如果碼率為變量,則幀率也會影響體積,幀率越高,每秒鐘經過的畫面越多,需要的碼率也越高,體積也越大。幀率:就是在1秒鐘時間里傳輸?shù)膱D片的幀數(shù),也可以理解為圖形處理器每秒鐘能夠刷新幾次。


1.音頻碼率計算公式:

音頻碼率=采樣率 x 位深度 x 聲道= 44.1Khz x 16位 x 2聲道 = 1411.2 Kbps

2.文件大小 = 碼率 x 時長(s) = 文件大小 = 碼率 x 時長(s) = (Kbps )= (Kbps )/ 1024 Kb = (MB)

2.視頻文件大小計算

文件大小 = 碼率 x 時長(s)/8 = (Kbps )= (Kbps )/ 1024 Kb = (MB)


問題編解碼的音視頻同步問題原理

帶來一個問題:在視頻流中,先到來的 B 幀無法立即解碼,需要等待它依賴的后面的 I、P 幀先解碼完成,這樣一來播放時間與解碼時間不一致了,順序打亂了,那這些幀該如何播放呢?這時就需要我們來了解另外兩個概念:DTS 和 PTS。

DTS、PTS 的概念

DTS、PTS 的概念如下所述:

DTS(Decoding Time Stamp):即解碼時間戳,這個時間戳的意義在于告訴播放器該在什么時候解碼這一幀的數(shù)據(jù)。

PTS(Presentation Time Stamp):即顯示時間戳,這個時間戳用來告訴播放器該在什么時候顯示這一幀的數(shù)據(jù)。

需要注意的是:雖然 DTS、PTS 是用于指導播放端的行為,但它們是在編碼的時候由編碼器生成的。

當視頻流中沒有 B 幀時,通常 DTS 和 PTS 的順序是一致的。但如果有 B 幀時,就回到了我們前面說的問題:解碼順序和播放順序不一致了。

比如一個視頻中,幀的顯示順序是:I B B P,現(xiàn)在我們需要在解碼 B 幀時知道 P 幀中信息,因此這幾幀在視頻流中的順序可能是:I P B B,這時候就體現(xiàn)出每幀都有 DTS 和 PTS 的作用了。DTS 告訴我們該按什么順序解碼這幾幀圖像,PTS 告訴我們該按什么順序顯示這幾幀圖像。順序大概如下:

PTS:1423??

?DTS:1234

Stream: I P B B

音視頻的同步

上面說了視頻幀、DTS、PTS 相關的概念。我們都知道在一個媒體流中,除了視頻以外,通常還包括音頻。音頻的播放,也有 DTS、PTS 的概念,但是音頻沒有類似視頻中 B 幀,不需要雙向預測,所以音頻幀的 DTS、PTS 順序是一致的。

音頻視頻混合在一起播放,就呈現(xiàn)了我們常??吹降膹V義的視頻。在音視頻一起播放的時候,我們通常需要面臨一個問題:怎么去同步它們,以免出現(xiàn)畫不對聲的情況。

要實現(xiàn)音視頻同步,通常需要選擇一個參考時鐘,參考時鐘上的時間是線性遞增的,編碼音視頻流時依據(jù)參考時鐘上的時間給每幀數(shù)據(jù)打上時間戳。在播放時,讀取數(shù)據(jù)幀上的時間戳,同時參考當前參考時鐘上的時間來安排播放。這里的說的時間戳就是我們前面說的 PTS。實踐中,我們可以選擇:同步視頻到音頻、同步音頻到視頻、同步音頻和視頻到外部時鐘。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容