DAV首頁(yè)
數字音視工程網(wǎng)

微信公眾號

數字音視工程網(wǎng)

手機DAV

null
null
null
卓華,
null
null
null
null
null
null

我的位置:

share

成豐技術(shù)分享丨全面解讀,關(guān)于視頻、幀和編解碼的基礎知識

來(lái)源:上海成豐線(xiàn)纜        編輯:小藺    2021-09-17 17:18:30     加入收藏

從18年12月接手在基于x86平臺的邊緣計算設備上進(jìn)行取流解碼的工作至今,已有數月。筆者還記得當初對流媒體、視頻、幀、圖像等概念完全云里霧里,慢慢跟著(zhù)項目...

  從18年12月接手在基于x86平臺的邊緣計算設備上進(jìn)行取流解碼的工作至今,已有數月。筆者還記得當初對流媒體、視頻、幀、圖像等概念完全云里霧里,慢慢跟著(zhù)項目一步步學(xué)習走過(guò)來(lái),受益良多,以這篇文章勵志作為后續繼續學(xué)習的里程碑吧!

  本文將介紹的是:

  視頻的基礎知識。

  包括:視頻協(xié)議和格式、視頻流。

  視頻幀的基礎知識。

  包括:YUV幀格式、常見(jiàn)的幀名詞(幀率fps、分辨率、碼率)、“奇怪”的幀名詞(1080p和1080i)、視頻編解碼而衍生的幀名詞(GOP、I\B\P幀)。

   01視頻的基礎知識

       相信所有人對視頻一定不陌生,平時(shí)也一定經(jīng)常在各大視頻網(wǎng)站(如騰訊視頻、嗶哩嗶哩)瀏覽,甚至偶爾也會(huì )把視頻緩存到本地,保存成.mkv,.avi文件之類(lèi)啦。前者是我們常說(shuō)的『網(wǎng)絡(luò )流媒體』,后者是『本地視頻文件』。提到這里,兩個(gè)問(wèn)題來(lái)了:

  ? 本地視頻文件常見(jiàn)有MP4、MKV、AVI等,這些都是什么?有什么區別?

  ? 在騰訊視頻、嗶哩嗶哩網(wǎng)上看的視頻,與本地播放的MP4、MKV、AVI文件,有什么區別?

  介紹第一個(gè)問(wèn)題之前,必須引入一個(gè)名詞『視頻封裝格式』,簡(jiǎn)稱(chēng)『視頻格式』,也稱(chēng)為『容器』。有的說(shuō)法還要區分是視頻文件格式和視頻封裝格式,本文統一稱(chēng)『視頻封裝格式』。

  視頻格式

  問(wèn)題1:本地視頻文件常見(jiàn)有MP4、MKV、AVI等,這些都是什么?有什么區別?

  本地視頻文件常見(jiàn)有MP4、MKV、AVI等,這些都是什么?有什么區別? 問(wèn)題1引申:對要做視音頻處理的開(kāi)發(fā)們來(lái)說(shuō),接觸MP4、MKV、AVI等各種格式視音頻文件時(shí),有什么需要注意的嗎?

  視音頻處理可以延展出很多領(lǐng)域,包括解碼、編碼、過(guò)濾、增強處理等等。筆者目前只在解碼領(lǐng)域探索,答案是:對于解碼而言,沒(méi)有區別。其他領(lǐng)域暫不清楚。

  『視頻封裝格式』,是在編碼的視音頻基礎上進(jìn)行一次“包裝”,添加與播放相關(guān)的協(xié)議數據(這個(gè)是筆者的認知,如有表述不準確,歡迎批評指正)。目前主流開(kāi)源的框架,在“解包裝”工作上做的已經(jīng)非常成熟了,如FFMpeg,提供了用于打開(kāi)視音頻的API,開(kāi)發(fā)人員無(wú)需關(guān)注具體視頻格式,直接可以取出視音頻流做處理。

  接下來(lái),介紹第二個(gè)問(wèn)題,筆者再引入名詞『視頻協(xié)議』,也有說(shuō)法認為『視頻協(xié)議』也屬于『視頻封裝格式』。

  視頻協(xié)議

  問(wèn)題2:在騰訊視頻、嗶哩嗶哩網(wǎng)上看的視頻,與本地播放的MP4、MKV、AVI文件,有什么區別?

  『視頻協(xié)議』是針對網(wǎng)絡(luò )流媒體而言的,也就是只有在有網(wǎng)絡(luò )時(shí)通過(guò)瀏覽器或者移動(dòng)端APP才能看到的視頻,目前常見(jiàn)的協(xié)議有RTSP、RTMP、HLS、HTTP等。筆者短暫地接觸過(guò)GStreamer開(kāi)發(fā),在連接到RSTP視頻時(shí),發(fā)現除了視音頻流和metadata之外,還攜帶了播放的信令。

  也有文章會(huì )把『視頻協(xié)議』歸入『視頻封裝格式』。筆者看來(lái),這么分類(lèi)也有其道理:『視頻協(xié)議』和『視頻封裝格式』都同時(shí)攜帶了視音頻和metadata,以及協(xié)議/格式需要的其他信息。以FFMpeg為例,并不區分視頻格式和視頻協(xié)議;但是GStreamer的話(huà),還是需要指定『視頻協(xié)議』,但是不區分『視頻封裝格式』。

  剝開(kāi)『視頻封裝格式』和『視頻協(xié)議』的外殼,接下來(lái)了解視音頻流本身,這才是流媒體領(lǐng)域中真正的主角。本文僅介紹視頻流。

  視頻流

  就視頻流而言,相信大家平時(shí)一定經(jīng)常聽(tīng)到類(lèi)似“h264碼流”、“yuv流”、“編碼流”、“解碼流”,“原始流”、“裸流”,“壓縮后的流”或者“未壓縮的流”等等。歸納而言,提到『視頻流』的時(shí)候,一定只有兩種形式:

  ? 經(jīng)過(guò)壓縮算法壓縮的流數據,稱(chēng)為『編碼流』,又因為目前壓縮/編碼算法以H264為主,因此也常常稱(chēng)為『H264碼流』。

  ? 未經(jīng)壓縮的流數據,是解碼后的流數據,稱(chēng)為『原始流』,可以想象視頻是由一幅一幅在時(shí)間上連續的“圖像”組成的,而因為視頻內部的“圖像”是『YUV』(后文將介紹),因此也常常稱(chēng)為『YUV流』。

  總結出現的名稱(chēng),“h264碼流”、“編碼流”、“壓縮后的流”是壓縮/編碼后的視頻流;而“yuv流”、“解碼流”、“未壓縮的流”則是未經(jīng)壓縮/編碼的視頻流。“裸流”是一個(gè)具有歧義的詞,是上下文內容,既可以是前者,也可以是后者。

  因此,如果以后閱讀任何流媒體相關(guān)的文章時(shí),看到『視頻流』都應該搞清楚,這究竟是編碼/壓縮的,還是沒(méi)有。在生活中,接觸到的視頻文件絕大部分都是編碼/壓縮后的;在網(wǎng)絡(luò )傳輸場(chǎng)景中,絕大部分也是編碼/壓縮后的。只有在視頻播放時(shí),觀(guān)眾觀(guān)賞到的時(shí)一幀幀被『轉碼』為『RGB』的解碼后視頻流。

  編碼/壓縮在流媒體領(lǐng)域是一項非常重要的技術(shù):從『H264碼流』到『YUV流』的過(guò)程稱(chēng)為解碼,反之稱(chēng)為編碼。

  02  

  流媒體領(lǐng)域,『流』很重要,『流』的基本元素『幀』同樣重要。原因在于:對于視頻編碼/壓縮而言,它的核心是采用盡量小的空間存儲一組時(shí)間上連續的幀數據;而對于視頻解碼而言,就是把被編碼/壓縮后的一組幀數據盡量恢復成原來(lái)的樣子。能夠被100%恢復的編碼/壓縮算法稱(chēng)為無(wú)損壓縮,反之稱(chēng)為有損壓縮(雖然無(wú)損壓縮是最理想的,但是在很多實(shí)際場(chǎng)景中為了追求高壓縮率,比如為了減小網(wǎng)絡(luò )帶寬壓力,常常不得不選擇有損壓縮)。由此可見(jiàn),『幀』是視頻流媒體領(lǐng)域的核心。接下來(lái),一起來(lái)認識什么是『幀』。

  『幀』,可以聯(lián)想成我們平時(shí)看到的一幅幅“圖像”,只不過(guò)我們平時(shí)接觸的圖片是『RGB』格式的,而視頻幀通常是『YUV』格式的。既然提到了『RGB』和『YUV』,那么就來(lái)了解下幀的格式『YUV』,引出第一個(gè)問(wèn)題:

  問(wèn)題3:幀為什么采用『YUV』格式?『YUV』是什么?

  為此,筆者曾經(jīng)花了很久去了解顏色空間、電視成像的發(fā)展史等,整理結論如下:

  在達到最大壓縮率的情況下,能夠保證對人眼感知的失真度最小?!篩UV』的三通道中,其中"Y"表示明亮度(Lumina nce或Luma),也就是灰階值;而"U"和"V"表示的則是色度(Chrominance或Chroma)。有一堆科學(xué)家研究發(fā)現,人眼對UV的敏感度最低,因此可以極大比例地壓縮UV兩個(gè)通道的數值。見(jiàn)視頻編解碼學(xué)習一 yuv格式。

  為了向前兼容黑白電視。這個(gè)就涉及歷史原因了,筆者非常推薦零基礎入門(mén)音視頻開(kāi)發(fā)。歷史上在制定視頻幀格式時(shí),是有人提出過(guò)用RGB的,最終決定用YUV的真正原因其實(shí)是這個(gè)(見(jiàn)影像使用YUV格式,為什麼不用RGB呢?。

  接下來(lái)解釋『YUV』是什么,筆者以為,『YUV』是一種廣義的概念,在視頻領(lǐng)域,當提到『YUV』的時(shí)候,往往是以下幾個(gè)意思:

  顏色空間

  “Y”表示明亮度(Luminance、Luma),“U”和“V”則是色度(Chrominance)、濃度(Chroma)。這里表示的是色彩空間的基,即類(lèi)似XYZ坐標系的一種色標表示基準,也就是說(shuō)每一種顏色可以通過(guò)三維向量來(lái)表示。與其類(lèi)似的還有RGB顏色空間、HSV顏色空間等。下圖來(lái)自How does the YUV color coding work?

  ▲ 圖1. YUV坐標軸示意圖

  隨著(zhù)通信行業(yè)的發(fā)展,實(shí)際應用之多之復雜,導致『YUV』衍生出了一個(gè)大家族。接觸視頻領(lǐng)域的一定聽(tīng)說(shuō)過(guò)YCbCr,甚至還有YPbPr、YIQ等。它們有的已經(jīng)被時(shí)代淘汰,有的現在還在使用。之所以出現『YUV』大家族,完全是因為實(shí)際電路系統之間的差異,導致要從『YUV』轉到『RGB』空間,實(shí)際對應的轉化系數是有些許差異的,于是各個(gè)部門(mén)開(kāi)始制定各種規范,才有了我們現在看到的『YUV』大家族。

  YCbCr是專(zhuān)門(mén)針對數字電路而誕生的;YPbPr則是模擬電路。但是,現在是數字時(shí)代,所以為了模擬電路而生的YPbPr已經(jīng)逐漸被淘汰了,而YCbCr還一直發(fā)揮著(zhù)作用。因此現在,YCbCr有時(shí)也會(huì )被簡(jiǎn)單地稱(chēng)為/認為『YUV』。

  采樣率

  讀者可能聽(tīng)說(shuō)過(guò)“YUV444”,“YUV422”,“YUV420”,到這里可能會(huì )納悶:“YUV不是顏色空間嗎?為什么后面還會(huì )跟著(zhù)一串數字?” 因為當你看到YUV后面跟著(zhù)一串數字的時(shí)候,『YUV』已經(jīng)不再是顏色空間的基本含義了,而是意味著(zhù)在原始『YUV流』上的采樣。

  在以前流媒體剛剛興起時(shí),還沒(méi)有什么4G/5G,當時(shí)為了減小網(wǎng)絡(luò )傳輸的帶寬的壓力,可謂做了種種努力。除了編碼/壓縮之外,YUV采樣率也是一種。

  444,422和420是三種『YUV』(在數字電路中指代YCbCr)的采樣,三位數分別代表Y\U\V(數字電路中為Y\Cb\Cr,本段后同)通道的抽樣比。所以可以理解,444是全采樣;而422是對Y進(jìn)行全采樣,對U\V分別進(jìn)行1/2均勻采樣。有趣的問(wèn)題來(lái)了,420難道是完全丟棄了V通道/分量數據嘛?答案是否定的。

  首先,必須要搞明白一個(gè)問(wèn)題,一幀圖像是由一個(gè)個(gè)像素組成的矩形,譬如4x4的尺寸的圖像,就是由16個(gè)像素點(diǎn)組成的。在平時(shí)接觸的『RGB』圖像中,每個(gè)像素必然至少由R\G\B這三個(gè)通道組成的(有的圖像還有\alpha分量),每個(gè)分量的取值一般都是[0,255],也就是[2^0,2^8],因此經(jīng)常說(shuō)一個(gè)像素占用3字節(如果還有其他分量,比如RGBA,就另當別論)?!篩UV』圖像同理,它的每個(gè)像素是由Y\U\V組成的。

  接下來(lái),從整張圖像宏觀(guān)考慮采樣問(wèn)題。還是以4X4的圖像為例,444的如下圖2-1,這個(gè)是形象化成圖像的樣子,實(shí)際在機器內存儲并不是這樣,具體可以參見(jiàn)博客《圖像原始格式一探究竟》。422和420分別如下圖2-2和2-3。

  ▲ 圖2-1. YUV444采樣示意圖

  圖2-1對應YUV444采樣,即全采樣,圖示中可以看出每個(gè)像素中的Y\U\V通道都保留下來(lái)了,一般來(lái)說(shuō)YUV444太大了,因此很少使用。

  ▲ 圖2-2. YUV422采樣示意圖

  圖2-2對應YUV422采樣,這種采樣方式是:每個(gè)掃描線(xiàn)或者說(shuō)每行相鄰2個(gè)像素,只取1個(gè)像素的U\V分量。此外,可以計算出來(lái),每個(gè)像素占用的大小為原來(lái)的2/3,因此說(shuō)YUV422是YUV444的2/3大小。

  這個(gè)時(shí)候就有一個(gè)問(wèn)題,在『YUV』轉『RGB』時(shí),被抽走了U\V分量的像素要怎么辦呢?做法很簡(jiǎn)單,就是相鄰2個(gè)像素的Y分量公用保留著(zhù)的U\V分量。

  ▲  圖2-2. YUV422采樣示意圖

  圖2-3對應YUV420采樣,這種采樣方式是:隔行進(jìn)行YUV422每行采樣的辦法,即相鄰2個(gè)像素只取1個(gè)像素的U\V分量;下一行丟棄所有的U\V分量。此外,可以計算出來(lái),每個(gè)像素占用的大小為原來(lái)的1/2,因此說(shuō)YUV420是YUV444的1/2大小?;謴蚒\V分量的辦法同YUV422,只不過(guò)這里是2X2的矩陣共享保留著(zhù)的U\V分量。

  這種設計辦法真的很巧妙!前文提到的"人眼對UV的敏感度最低,因此可以極大比例地壓縮UV兩個(gè)通道的數值",且對于圖像而言,相鄰的區域像素的色彩、飽和度一般非常接近,因此這種以2X2矩陣為基本單位,只保留1組U\V分量合情合理。

  編碼/存儲格式

  大家肯定還聽(tīng)說(shuō)過(guò)YV12、YU12、NV12、NV21吧,看到這里是不是又納悶:“后面的數字怎么變成2個(gè)了?而且前面的英文字母還變了?”

  以上統稱(chēng)為『視頻的存儲格式』,也就是說(shuō),計算機是如何存儲一幀視頻的。

  首先,『視頻的存儲格式』總分為兩大類(lèi):『打包格式(packed)』和『平面格式(planar)』。前者又被稱(chēng)作『緊湊格式(packed)』。其實(shí)除此之外還有『半平面模式(Semi-Planar)』,估計是使用的比較少,因此在很多文章中常被忽略。

  筆者很感興趣,為什么會(huì )出現『打包格式』和『平面格式』兩大派系,網(wǎng)上搜了很多資料也沒(méi)找到原因,博客【音視頻基礎】:I420、YV12、NV12、NV21等常見(jiàn)的YUV420存儲格式提到了需要約定存儲格式,但也沒(méi)提到為什么會(huì )分成這兩種。要么就是派系之爭,類(lèi)似貝葉斯學(xué)派和頻率學(xué)派;要么就是實(shí)際應用中逐漸衍生出這兩大格式。時(shí)至今日,這兩個(gè)格式還在被使用,因此對于多媒體開(kāi)發(fā)者們都有必要了解。

  『打包格式』是把Y\U\V分量交叉存儲,『平面格式』則是把Y\U\V嚴格分開(kāi)存儲,『半平面模式』介于兩者之間,Y分量分開(kāi)存儲,U\V交叉存儲。

  以下圖為例說(shuō)明『打包格式』、『平面格式』和『半平面模式』應該是非常清楚的,圖摘自博客YUV格式初探:

  ▲  圖3-1. YUV420P存儲示意圖

  ▲  圖3-2. YUV420SP存儲示意圖

  ▲  圖3-3. YUV420Packet存儲示意圖

  但是關(guān)于上圖的『打包格式』,筆者是是有一點(diǎn)疑惑的,大多數的說(shuō)法是”Y\U\V通道交叉存儲,相鄰的像素盡量打包在一起“,圖3-3中U1后面跟著(zhù)的是U2而不是V1,而且Y\U\V的排列方式似乎也不完全是交叉?筆者嘗試在網(wǎng)上搜索『打包格式』更多的例子,沒(méi)有找到特別好的資料,【這里給自己挖一個(gè)坑吧】。

  接下來(lái),我們繼續了解一些幀相關(guān)的概念。

  常見(jiàn)的幀名詞

  幀率(FPS)

  『幀率』,FPS,全稱(chēng)Frames Per Second。指每秒傳輸的幀數,或者每秒顯示的幀數,一般來(lái)說(shuō),『幀率』影響畫(huà)面流暢度,且成正比:幀率越大,畫(huà)面越流暢;幀率越小,畫(huà)面越有跳動(dòng)感。一個(gè)較權威的說(shuō)法:當視頻幀率不低于24fps時(shí),人眼才會(huì )覺(jué)得視頻時(shí)連貫的,稱(chēng)為“視覺(jué)暫留”現象。因此,才有說(shuō)法:盡管『幀率』越高越流暢,但在很多實(shí)際應用場(chǎng)景中24fps就可以了。

  分辨率(Resolution)

  『分辨率』,也常被俗稱(chēng)為『圖像的尺寸』或者『圖像的大小』。指一幀圖像包含的像素的多少,常見(jiàn)有1280x720(720P),1920X1080(1080P)等規格?!悍直媛省挥绊憟D像大小,且與之成正比:『分辨率』越高,圖像越大;反之,圖像越小。

  碼率(BPS)

  『碼率』,BPS,全稱(chēng)Bits Per Second。指每秒傳送的數據位數,常見(jiàn)單位KBPS(千位每秒)和MBPS(兆位每秒)。筆者認為這個(gè)概念真正要理解起來(lái)還是需要好好說(shuō)明的,網(wǎng)上一說(shuō):“『碼率』與體積成正比:碼率越大,體積越大;碼率越小,體積越小”;另一說(shuō):“『碼率』越大,說(shuō)明單位時(shí)間內取樣率越大,數據流精度就越高,這樣表現出來(lái)的的效果就是:視頻畫(huà)面更清晰畫(huà)質(zhì)更高”;還有說(shuō)法是:”『碼率』就是『失真度』“。但是筆者有一段時(shí)間就是不理解,每秒傳輸的數據越大,為什么必然就對應畫(huà)面更清晰?還有體積怎么理解呢?且看下文”三者之間的關(guān)系“。

  『幀率』『分辨率』和『碼率』三者之間的關(guān)系

  最理想的情況是畫(huà)面越清晰、越流暢是最好的。但在實(shí)際應用中,還需要結合硬件的處理能力、實(shí)際帶寬條件選擇。高『幀率』高『分辨率』,也就意味著(zhù)高『碼率』,也意味著(zhù)需要高帶寬和強大的硬件能力進(jìn)行編解碼和圖像處理。所以『幀率』和『分辨率』應該視情況而定。

  要說(shuō)三者之間的關(guān)系,其實(shí)就是對于『碼率』的理解。在碼率(BPS)概念中提到了幾段摘自網(wǎng)上的說(shuō)法,說(shuō)的都太模糊了,筆者直到閱讀了文章Video Bitrate Vs. Frame Rate,才真的理解了『碼率』。

  首先,這些說(shuō)法都沒(méi)有交代一個(gè)前提:『幀率』、『分辨率』和『壓縮率』都會(huì )影響『碼率』。Video Bitrate Vs. Frame Rate](https://www.techwalla.com/articles/video-bitrate-vs-frame-rate)文章在一開(kāi)始就明確指出:

  Bitrate serves as a more general indicator of quality, with higher resolutions, higher frame rates and lower compression all leading to an increased bitrate.

  『碼率』是更廣泛的(視頻)質(zhì)量指標:更高的『分辨率』,更高的『幀率』和更低的『壓縮率』,都會(huì )導致『碼率』增加。

  文章后面又特別強調『分辨率』和『壓縮率』對『碼率』的影響:高分辨率意味著(zhù)圖片可以包括更多的細節,低壓縮率意味著(zhù)圖片壓縮損失越少,即失真越少,越清晰。那為什么不特地討論『幀率』呢?筆者認為原因有二:一個(gè)是『幀率』的影響非常直觀(guān),每秒幀數增加必然導致數據量增加;另一個(gè)是實(shí)際應用場(chǎng)景中『幀率』是相對固定的,我們觀(guān)看的一般視頻都在25-30fps之間,現在一些高幀視頻是60fps,可見(jiàn)視頻『幀率』在實(shí)際場(chǎng)景中被討論的很少。

  奇怪的幀名詞:1080p和1080i、場(chǎng)

  筆者僅僅出于覺(jué)得有趣才放上來(lái)的,1080p和1080i、場(chǎng)都是相對比較“老”的概念了,在還是CRT電視的時(shí)代,顯示器顯示畫(huà)面都是靠電子槍一行一行掃描畫(huà)面才能產(chǎn)生一副完整的圖像,這就被稱(chēng)作『場(chǎng)』,后來(lái)這個(gè)名詞也不常使用了,被取代它的是『幀』。

  1080p和1080i也是『場(chǎng)』同一時(shí)期的概念:

  ? ${數字}i的字母”i“表示Interlace,代表隔行掃描,比如奇數『場(chǎng)』只掃描奇數行,后一『場(chǎng)』即偶數『場(chǎng)』只掃描偶數行。這在過(guò)去是非常有用的,當時(shí)網(wǎng)絡(luò )條件差,帶寬受限,隔行掃描可以很大程度上減少傳輸的數據,又不至于影響觀(guān)眾觀(guān)看體驗。

  ? ${數字}p的字母”p“表示Progressive,即逐行掃描,也就是一『場(chǎng)』把全部畫(huà)面掃描完整。這是后來(lái)才提出的概念,這也代表時(shí)代進(jìn)步,帶寬條件上來(lái)了。

  既然都是老概念了,那為什么還要再提呢?借用文章1080P和1080i是什么意思?第一段來(lái)說(shuō):

  進(jìn)入液晶時(shí)代的如今,隔行和逐行其實(shí)已經(jīng)沒(méi)有太大的意義了,現在的電視或者是顯示器都屬于固定像素設備,像素點(diǎn)同時(shí)發(fā)光,并不需要掃描,但是硬要說(shuō)的話(huà)可以認為現在的顯示設備都是逐行掃描的,但也并不是說(shuō)1080P和1080i等就可以淘汰了,畢竟還涉及到攝像機的格式,不過(guò)普通觀(guān)眾也不會(huì )關(guān)心是用什么攝像機拍的,只關(guān)心呈現出來(lái)的樣貌就好了。

  視頻『幀』和編解碼密切相關(guān),因此還有不少『幀』的概念是和視頻編解碼相關(guān)的。

  視頻編解碼而衍生的幀名詞

  I幀、P幀、B幀和IDR幀

  但凡接觸過(guò)一點(diǎn)視頻編解碼的讀者,一定見(jiàn)過(guò)I\P\B幀,至于IDR可能見(jiàn)的少一些。下面,簡(jiǎn)單解釋每種類(lèi)型:

  ? I幀,英文全寫(xiě)Intra Picture,又稱(chēng)幀內編碼幀,俗稱(chēng)關(guān)鍵幀。一般來(lái)說(shuō)I幀不需要依賴(lài)前后幀信息,可獨立進(jìn)行解碼。有數據表明,僅I幀的壓縮率,可以達到7,這里其實(shí)可以把I幀的壓縮等同于單獨壓縮一幅圖片。至于說(shuō)I幀的壓縮只壓縮了空間上的冗余信息,放在后續編碼相關(guān)的系列文章中會(huì )詳述?!具@里再挖一個(gè)坑,免得自己忘記了】

  ? P幀,英文全寫(xiě)predictive-frame,又稱(chēng)前向預測編碼幀,也有幀間預測編碼幀。顧名思義,P幀需要依賴(lài)前面的I幀或者P幀才能進(jìn)行編解碼,因為一般來(lái)說(shuō),P幀存儲的是當前幀畫(huà)面與前一幀(前一幀可能是I幀也可能是P幀)的差別,較專(zhuān)業(yè)的說(shuō)法是壓縮了時(shí)間冗余信息,或者說(shuō)提取了運動(dòng)特性。P幀的壓縮率約在20左右,幾乎所有的H264編碼流都帶有大量的P幀。

  ? B幀,英文全寫(xiě)bi-directional interpolatedprediction frame,又稱(chēng) 雙向預測內插編碼幀,簡(jiǎn)稱(chēng)雙向預測編碼幀。B幀非常特殊,它存儲的是本幀與前后幀的差別,因此帶有B幀的視頻在解碼時(shí)的邏輯會(huì )更復雜些,CPU開(kāi)銷(xiāo)會(huì )更大。因此,不是所有的視頻都帶有B幀,筆者目前還沒(méi)有接觸過(guò)帶B幀的視頻?!菊业綆幀視頻一定要珍藏起來(lái)好好研究!】不過(guò),B幀的壓縮率能夠達到50甚至更高,在壓縮率指標上還是很客觀(guān)的。

  ? IDR幀,英文全寫(xiě)Instantaneous Decoding Refresh,翻譯過(guò)來(lái)是即時(shí)解碼刷新。聽(tīng)上去,這類(lèi)幀并不是名詞概念,倒像是個(gè)動(dòng)詞?IDR幀是一種特殊的I幀,它是為了服務(wù)于編解碼而提出的概念,IDR幀的作用是立刻刷新,使錯誤不致傳播,從IDR幀開(kāi)始,重新算一個(gè)新的序列開(kāi)始編碼(摘自博客H264中I幀和IDR幀的區別)。

  I/P/B幀,并不是依據視頻幀數據內部的元素的不同來(lái)區分的,從解碼后的幀本身而言,它們沒(méi)有任何區別。僅僅是在編碼時(shí),對幀處理的方式不同而已。

  ? GOP,英文全稱(chēng)Group Of Pictures,一般來(lái)說(shuō),指的就是兩個(gè)I幀之間的間隔,嚴格來(lái)說(shuō),是兩個(gè)IDR幀之間的間隔。筆者對GOP研究的不多,對于網(wǎng)上的說(shuō)法:“GOP在一定程度上會(huì )影響視頻畫(huà)面質(zhì)量 - 在碼率相同的情況下,GOP越大,意味著(zhù)P\B幀越多,也就更容易獲取較好的圖像質(zhì)量”這個(gè)說(shuō)法存疑。

  ? PTS、DTS,筆者是在對視頻文件硬做解碼的時(shí)候,發(fā)現實(shí)際解碼輸出的fps是硬解的能力上限,比如一個(gè)24fps的視頻文件,在用硬件解碼時(shí),能夠達到100+,當時(shí)接到一個(gè)需求是:“需要控制視頻文件的解碼率,讓它和文件的fps保持一致”。后來(lái)查閱了大量的資料,進(jìn)而了解了DTS和PTS的概念:

  ? DTS,英文全稱(chēng)Decoding Time Stamp,即解碼時(shí)間戳,這個(gè)時(shí)間戳的意義在于告訴解碼器該在什么時(shí)候解碼這一幀的數據。

  ? PTS,英文全稱(chēng)Presentation Time Stamp,即顯示時(shí)間戳,這個(gè)時(shí)間戳用來(lái)告訴播放器該在什么時(shí)候顯示這一幀的數據。

  這個(gè)概念在做視音頻同步的時(shí)候特別重要,尤其是PTS,目前常見(jiàn)的視音頻同步的三種策略“同步到音頻的PTS”、“同步到視頻的PTS”和“同步到系統/外部時(shí)鐘”,都是基于PTS完成的。

  

  往期精彩回顧

  原創(chuàng ) | 淺談音頻電纜的選擇

  原創(chuàng ) | 探討麥克風(fēng)線(xiàn)纜高頻衰減成因及解決方法

  原創(chuàng ) | 導體材料我們該如何抉擇?

  原創(chuàng )丨HDMI2.1有源光纜/鎧裝有源光纜

  原創(chuàng ) | 芯片壽命?分辨率與帶寬?兼容性?一文解答有源光纜系列產(chǎn)品問(wèn)題

原創(chuàng ) | 一文看懂電阻、阻抗、特性阻抗

免責聲明:本文來(lái)源于上海成豐線(xiàn)纜,本文僅代表作者個(gè)人觀(guān)點(diǎn),本站不作任何保證和承諾,若有任何疑問(wèn),請與本文作者聯(lián)系或有侵權行為聯(lián)系本站刪除。
掃一掃關(guān)注數字音視工程網(wǎng)公眾號

相關(guān)閱讀related

    評論comment

     
    驗證碼:
    您還能輸入500
      国产av福利久久精品can动漫|2021精品国产自在现线|亚洲无线观看国产高清|欧洲人妻丰满av无码久久不卡|欧美情侣性视频