日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

视频压缩编码 gop(Group of Pictures)(I帧间隔)的概念、IDR、I帧(关键帧,intra picture)、P帧、B帧、帧内压缩、帧间压缩、pts(显示时间)、dts(解码时间)

發(fā)布時間:2025/3/20 编程问答 42 豆豆

文章目錄

    • 前言:
    • 關(guān)于視頻的基礎(chǔ)定義
    • GOP:Group of Pictures
    • 壓縮(也就是編碼)
      • 幀內(nèi)壓縮:自己本身壓縮,不參考其他的幀。
      • 幀間壓縮:參考其他視頻幀壓縮。
    • 解碼(解壓縮)
    • 為什么好多人說GOP是兩個I幀的間隔?
    • I幀:關(guān)鍵幀,intra picture
    • IDR幀:Instantaneous Decoding Refresh
    • P幀:Predictive Picture(預(yù)測編碼圖像幀)
    • B幀:Bidirectionally predicted picture(雙向預(yù)測編碼圖像幀)
    • 幀率:
    • 碼流:或者稱為碼率,只針對視頻數(shù)據(jù),單位時間內(nèi)視頻數(shù)據(jù)量大小,一般以秒為單位(KB/S)(碼率是通過什么算法控制的 ?)
    • 結(jié)尾
    • 0928更新GOP拉大和GOP拉長的問題(實際情況需要自己判斷)

前言:

最近看到一句話,

“GOP在一定程度上會影響視頻畫面質(zhì)量 - 在碼率相同的情況下,GOP越大,意味著P\B幀越多,也就更容易獲取較好的圖像質(zhì)量”

然后回顧了一下目前了解的視頻知識,發(fā)現(xiàn)怎么都想不明白這句話。

關(guān)于視頻的基礎(chǔ)定義

這里先科普下視頻編碼、解碼、GOP、IDR幀、I幀、P幀、B幀、幀率、碼流的基本定義。

GOP:Group of Pictures

顧名思義,就是一組圖片,在實際操作中,就是一組完整的視頻幀,怎么叫做完整的視頻幀?也就是說一個GOP拿出來,必須能夠完整的播放、顯示。

那GOP就可以推斷出來,必須是以I幀開頭,這樣后面的P幀和B幀才能跟據(jù)前向參考幀進行解碼顯示。

這樣也就能理解,為什么GOP是I幀的間隔,從當(dāng)前這個I幀開始,到下一個I幀結(jié)束(一?這里先放個問號)。

看圖,從這個I幀開始到下個I幀之前,就是一個GOP:
圖A

壓縮(也就是編碼)

這里我把壓縮和編碼當(dāng)作同一回事,視頻實際上就是一張張圖片連續(xù)的播放,就像小人書一樣,圖片連續(xù)播放,里面的畫面就好像動起來一樣。

視頻自然不能直接把一張張圖片保存或者傳輸,會浪費很多存儲、導(dǎo)致傳輸過程中,帶寬壓力特別大。

這里就需要把圖片進行壓縮,也就是編碼。將一張張圖片數(shù)據(jù)編碼成視頻幀,視頻幀就是一張張的圖片壓縮之后得到的。

壓縮分為幀內(nèi)壓縮和幀間壓縮。

幀內(nèi)壓縮:自己本身壓縮,不參考其他的幀。

舉個壓縮的例子,100 000,這個數(shù)字大家讀的時候,肯定不是一零零零零零零,大家會讀做10萬或者100K,我們會把后面三個0壓縮。

幀間壓縮:參考其他視頻幀壓縮。

再舉個 ,1 000 000,上面那個 ,我們讀做1000K,我們也可以讀做10個100K。當(dāng)然這只是示例,實際的幀間壓縮不可能這么簡單。

對于幀間壓縮來說,可以這樣理解,找不同(大家一起來找茬,這個都玩過),

比如記錄一個秒表的走動的視頻,秒表的背景是固定的,走動的只有秒表的數(shù)字或者指針,那么我們在I幀某保存一刻秒表的完整圖像,然后在下一刻只需要保存跟I幀中不同的部分,相同的部分只需要告訴播放器(解碼器),除了這一部分,其他部分跟參考幀的視頻數(shù)據(jù)相同。

這樣壓縮之后,這個視頻幀解碼就需要參考前面那一個參考幀的數(shù)據(jù),這就是幀間壓縮。

解碼(解壓縮)


圖B

如圖,純粹是為了理解參考幀和解碼順序(與實際有差別)。

  • 2號P幀參考幀是1號I幀,也就是說,解碼器需要根據(jù)1號I幀的內(nèi)容,才能還原2號P幀的圖像。
  • 4號B幀參考幀是3號和5號,那么視頻幀頭里面參考幀標(biāo)志會告訴解碼器,需要先解碼3號幀和5號幀。接下來解碼器會將參考幀3號和5號放入?yún)⒖紟蛄?#xff0c;然后再去解碼4號幀。(5號幀是參考的誰的?)
  • 可以看下8號幀,理解下它和6、7、9、10、11的解碼數(shù)據(jù)。
  • 回到問題一,GOP是兩個I幀的間隔。從這里說,一個GOP就是1-10號幀,但是10號幀還參考了11號幀,那就違反了GOP是一組完整的圖片的定義。所以嚴(yán)格意義上講GOP必須是以IDR幀開始,到下一個IDR幀結(jié)束,一個GOP的所有視頻幀的參考幀必須在GOP之中。
    視頻幀頭信息里面還會有pts和dts,pts代表顯示時間,dts代表解碼時間,這里的時間類似順序,越大,順序越靠后。

為什么好多人說GOP是兩個I幀的間隔?

對于直播來說,不會有B幀存在,就類似圖A,只有I幀和P幀的區(qū)別。

原因:直播的實時性要求決定了它不能一個幀到來的時候還要等待它后面的幀才能解碼。

I幀:關(guān)鍵幀,intra picture

寫個單詞,顯得專業(yè)。

I幀就是采取幀間壓縮的視頻幀,它可以單獨被解碼成一張完整的圖片。那么如果某個視頻都是I幀,那么一個I幀就是一個GOP。當(dāng)然一般情況下都不會這樣做。

IDR幀:Instantaneous Decoding Refresh

及時解碼刷新。我一般稱它為immediate refresh ,立刻刷新,IDR幀必須是一個I幀,但是I幀不一定是IDR幀,這個幀出現(xiàn)的時候,是告訴解碼器,可以清除掉所有的參考幀,這是一個全新的序列,新的GOP已經(jīng)開始。

P幀:Predictive Picture(預(yù)測編碼圖像幀)

會參考之前的I幀或者P幀,采用運動預(yù)測的方式進行幀間編碼。

B幀:Bidirectionally predicted picture(雙向預(yù)測編碼圖像幀)

雙向預(yù)測,從名字就可以看出,它需要進行雙向參考,也就是兩個參考幀,一個在它的前面,一個在它的后面,這就是它跟P幀的區(qū)別,多了一個參考幀,當(dāng)然壓縮率也會比P幀高。

幀率:

剛才提到,視頻其實就是一張張圖片連續(xù)播放。

那么就涉及到一個問題,一秒鐘播放多少張圖片?也就是一秒鐘多少個數(shù)據(jù)幀,這個數(shù)字就是幀率。

日常使用中,我目前見到的固定幀率的情況比較多,比如市面上一些智能攝像頭之類的。

碼流:或者稱為碼率,只針對視頻數(shù)據(jù),單位時間內(nèi)視頻數(shù)據(jù)量大小,一般以秒為單位(KB/S)(碼率是通過什么算法控制的 ?)

碼率=視頻數(shù)據(jù)大小/視頻時間長度。

對于直播之類的計算,碼流=視頻傳輸數(shù)據(jù)量/傳輸時間。

在直播中,兩種方式計算的碼流應(yīng)該是近似相等的,否則就會出現(xiàn)類似延時,卡頓等情況。

結(jié)尾

“GOP在一定程度上會影響視頻畫面質(zhì)量 -

在碼率相同的情況下,GOP越大,意味著P\B幀越多,也就更容易獲取較好的圖像質(zhì)量”

筆者看到了多次類似的話,細想總覺得有很多迷惑的地方。

首先,P/B幀的數(shù)量多少,只影響畫面流暢度,不影響圖像還原度和清晰度。

其次,碼率固定情況下,P/B越多,那就意味著單位時間內(nèi),P/B的大小更小(碼率=單位時間內(nèi)所有幀數(shù)據(jù)的大小之和),

P和B越小,意味著壓縮率更高,雖然視頻會更加流暢,但是圖像質(zhì)量也就是圖像還原度會更低。

在這種情況下,說容易獲得較好的圖像質(zhì)量好像有點牽強,畢竟人眼通常情況下超過24幀的幀率之后,就不會感覺到畫面卡頓。

幀率固定的情況下(這種情況下,我們可以視為碼流和GOP大小成正比例關(guān)系),GOP大小會影響畫面質(zhì)量。

比如看直播時候,如果畫面波動比較大,碼流就會大起來,這個時候就能分析出來,P幀會變大,畫面幅度大,導(dǎo)致壓縮率變低。

如果這個時候強制限制碼流的話,畫面可能會失真,可能出現(xiàn)馬賽克現(xiàn)象。(AR:所以避免馬賽克的話就是不能限制碼流?)

如果畫面靜止不動,那么P幀會很小,壓縮率很高,碼流也就是GOP大小自然會變小。(AR:GOP大小∝碼率?(正比于))

GOP拉大,碼率不變,幀率不變,那就是每個幀的數(shù)據(jù)量變大,壓縮率變低,畫面還原度變高

0928更新GOP拉大和GOP拉長的問題(實際情況需要自己判斷)

拉長是指本來1s產(chǎn)生一個GOP,也就是一秒一個IDR幀,但是改成2s一個GOP,幀率不變。

拉大是指GOP容量變大,本來1sGOP大小100KB,變成120KB,幀數(shù)不變。

如果GOP中幀數(shù)增加,在壓縮率穩(wěn)定的情況下(正常情況下壓縮率會變化,看圖像變化比例)必然會造成GOP變大,如果GOP大小保證不變,可以采取減少I幀(注意不是IDR幀)來換取更多的P和B幀。

(AR:我們的場景是圖像中小范圍波動,我們要保證這個小范圍的清晰度,需要增加更多的P幀?)

看到的許多文獻中,關(guān)于GOP拉大還是拉長都沒有說明,在計算碼流變化之中,需要明確GOP是怎么變化的。

根據(jù)我在直播攝像頭的觀察,在幀率固定的前提下,比如說2s一個I幀(上面說了直播一般I幀和IDR幀等同,沒有B幀),影響碼流大小的是畫面變化幅度,如果畫面靜止不動的話,碼流保持在很穩(wěn)定的狀態(tài);如果畫面變化幅度比較大,那碼流就會變大。

參考文章:關(guān)于GOP和幀率、碼率的關(guān)系

總結(jié)

以上是生活随笔為你收集整理的视频压缩编码 gop(Group of Pictures)(I帧间隔)的概念、IDR、I帧(关键帧,intra picture)、P帧、B帧、帧内压缩、帧间压缩、pts(显示时间)、dts(解码时间)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。