YUV420格式解析

來源:互聯網
上載者:User

YUV是指亮度參量和色度參量分開表示的像素格式,而這樣分開的好處就是不但可以避免相互幹擾,還可以降低色度的採樣率而不會對映像品質影響太大。YUV是一個比較籠統地說法,針對它的具體相片順序,可以分為很多種具體的格式。

YUV格式解析1(播放器——project2)根據板卡api設計實現yuv420格式的視頻播放器開啟*.mp4;*.264類型的檔案,實現其播放。使用的視頻格式是YUV420格式YUV格式通常有兩大類:打包(packed)格式和平面(planar)格式。前者將YUV分量存放在同一個數組中,通常是幾個相鄰的像素組成一個宏像素(macro-pixel);而後者使用三個數組分開存放YUV三個分量,就像是一個三維平面一樣。表2.3中的YUY2到Y211都是打包格式,而IF09到YVU9都是平面格式。(注意:在介紹各種具體格式時,YUV各分量都會帶有下標,如Y0、U0、V0表示第一個像素的YUV分量,Y1、U1、V1表示第二個像素的YUV分量,以此類推。)MEDIASUBTYPE_YUY2 YUY2格式,以4:2:2方式打包MEDIASUBTYPE_YUYV YUYV格式(實際格式與YUY2相同)MEDIASUBTYPE_YVYU YVYU格式,以4:2:2方式打包MEDIASUBTYPE_UYVY UYVY格式,以4:2:2方式打包MEDIASUBTYPE_AYUV 帶Alpha通道的4:4:4 YUV格式MEDIASUBTYPE_Y41P Y41P格式,以4:1:1方式打包MEDIASUBTYPE_Y411 Y411格式(實際格式與Y41P相同)MEDIASUBTYPE_Y211 Y211格式MEDIASUBTYPE_IF09 IF09格式MEDIASUBTYPE_IYUV IYUV格式MEDIASUBTYPE_YV12 YV12格式MEDIASUBTYPE_YVU9 YVU9格式               表2.3YUV 採樣

YUV 的優點之一是,色度頻道的採樣率可比 Y 頻道低,同時不會明顯降低視覺品質。有一種標記法可用來描述 U 和 V 與 Y 的採樣頻率比例,這個標記法稱為 A:B:C 標記法:

?

4:4:4 表示色度頻道沒有下採樣。

?

4:2:2 表示 2:1 的水平下採樣,沒有垂直下採樣。對於每兩個 U 範例或 V 範例,每個掃描行都包含四個 Y 範例。

?

4:2:0 表示 2:1 的水平下採樣,2:1 的垂直下採樣。

?

4:1:1 表示 4:1 的水平下採樣,沒有垂直下採樣。對於每個 U 範例或 V 範例,每個掃描行都包含四個 Y 範例。與其他格式相比,4:1:1 採樣不太常用,本文不對其進行詳細討論。

圖 1 顯示了 4:4:4 圖片中使用的採樣網格。燈光範例用叉來表示,色度範例則用圈表示。

 

4:2:2 採樣的這種主要形式在 ITU-R Recommendation BT.601 中進行了定義。圖 2 顯示了此標準定義的採樣網格。

4:2:0 採樣有兩種常見的變化形式。其中一種形式用於 MPEG-2 視頻,另一種形式用於 MPEG-1 以及 ITU-T recommendations H.261 和 H.263。圖 3 顯示了 MPEG-1 方案中使用的採樣網格,圖 4 顯示了 MPEG-2 方案中使用的採樣網格。

圖 3. YUV 4:2:0 範例位置(MPEG-1 方案)

與 MPEG-1 方案相比,在 MPEG-2 方案與為 4:2:2 和 4:4:4 格式定義的採樣網格之間進行轉換更簡單一些。因此,在 Windows 中首選 MPEG-2 方案,應該考慮將其作為 4:2:0 格式的預設轉換方案。

表面定義

本節講述推薦用於視頻呈現的 8 位 YUV 格式。這些格式可以分為幾個類別:

?

4:4:4 格式,每像素 32 位

?

4:2:2 格式,每像素 16 位

?

4:2:0 格式,每像素 16 位

?

4:2:0 格式,每像素 12 位

首先,您應該理解下列概念,這樣才能理解接下來的內容:

?

表面原點。對於本文講述的 YUV 格式,原點 (0,0) 總是位於表面的左上方。

?

跨距。表面的跨距,有時也稱為間距,指的是表面的寬度,以位元組數表示。對於一個表面原點位於左上方的表面來說,跨距總是正數。

?

對齊。表面的對齊是根據圖形顯示驅動程式的不同而定的。表面始終應該 DWORD 對齊,就是說,表面中的各個行肯定都是從 32 位 (DWORD) 邊界開始的。對齊可以大於 32 位,但具體取決於硬體的需求。

?

打包格式與平面格式。YUV 格式可以分為打包 格式和平面 格式。在打包格式中,Y、U 和 V 組件儲存在一個數組中。像素被組織到了一些巨像素組中,巨像素組的布局取決于格式。在平面格式中,Y、U 和 V 組件作為三個單獨的平面進行儲存。

4:4:4 格式,每像素 32 位

推薦一個 4:4:4 格式,FOURCC 碼為 AYUV。這是一個打包格式,其中每個像素都被編碼為四個連續位元組,其組織順序如下所示。

標記了 A 的位元組包含 alpha 的值。

4:2:2 格式,每像素 16 位

支援兩個 4:2:2 格式,FOURCC 碼如下:

?

YUY2

?

UYVY

兩個都是打包格式,其中每個巨像素都是編碼為四個連續位元組的兩個像素。這樣會使得色度水平下採樣乘以係數 2。

YUY2

在 YUY2 格式中,資料可被視為一個不帶加號或減號的 char 值組成的數組,其中第一個位元組包含第一個 Y 範例,第二個位元組包含第一個 U (Cb) 範例,第三個位元組包含第二個 Y 範例,第四個位元組包含第一個 V (Cr) 範例, 6 所示。

 

如果該映像被看作由兩個 little-endian WORD 值組成的數組,則第一個 WORD 在最低有效位 (LSB) 中包含 Y0,在最高有效位 (MSB) 中包含 U。第二個 WORD 在 LSB 中包含 Y1,在 MSB 中包含 V。

YUY2 是用於 Microsoft DirectX? Video Acceleration (DirectX VA) 的首選 4:2:2 像素格式。預期它會成為支援 4:2:2 視頻的 DirectX VA 加速器的中期要求。

UYVY

此格式與 YUY2 相同,只是位元組順序是與之相反的 — 就是說,色度位元組和燈光位元組是翻轉的(圖 7)。如果該映像被看作由兩個 little-endian WORD 值組成的數組,則第一個 WORD 在 LSB 中包含 U,在 MSB 中包含 Y0,第二個 WORD 在 LSB 中包含 V,在 MSB 中包含 Y1。

4:2:0 格式,每像素 16 位

推薦兩個 4:2:0 每像素 16 位格式,FOURCC 碼如下:

?

IMC1

?

IMC3

兩個 FOURCC 碼都是平面格式。色度頻道在水平方向和垂直方向上都要以係數 2 來進行再次採樣。

IMC1

所有 Y 範例都會作為不帶加號或減號的 char 值組成的數組首先顯示在記憶體中。後面跟著所有 V (Cr) 範例,然後是所有 U (Cb) 範例。V 和 U 平面與 Y 平面具有相同的跨距,從而產生 8 所示的記憶體的未使用地區。

IMC3

此格式與 IMC1 相同,只是 U 和 V 平面進行了交換:

 

4:2:0 格式,每像素 12 位

推薦四個 4:2:0 每像素 12 位格式,FOURCC 碼如下:

?

IMC2

?

IMC4

?

YV12

?

NV12

在所有這些格式中,色度頻道在水平方向和垂直方向上都要以係數 2 來進行再次採樣。

IMC2

此格式與 IMC1 相同,只是 V (Cr) 和 U (Cb) 行在半跨距邊界處進行了交錯。換句話說,就是色度地區中的每個完整跨距行都以一行 V 範例開始,然後是一行在下一個半跨距邊界處開始的 U 範例(圖 10)。此布局與 IMC1 相比,能夠更加高效地利用地址空間。它的色度地址空間縮小了一半,因此整體地址空間縮小了 25%。在各個 4:2:0 格式中,IMC2 是第二首選格式,排在 NV12 之後。

 

IMC4

此格式與 IMC2 相同,只是 U (Cb) 和 V (Cr) 行進行了交換:

YV12

所有 Y 範例都會作為不帶加號或減號的 char 值組成的數組首先顯示在記憶體中。此數組後面緊接著所有 V (Cr) 範例。V 平面的跨距為 Y 平面跨距的一半,V 平麵包含的行為 Y 平麵包含行的一半。V 平面後面緊接著所有 U (Cb) 範例,它的跨距和行數與 V 平面相同(圖 12)。

NV12

所有 Y 範例都會作為由不帶加號或減號的 char 值組成的數組首先顯示在記憶體中,並且行數為偶數。Y 平面後面緊接著一個由不帶加號或減號的 char 值組成的數組,其中包含了打包的 U (Cb) 和 V (Cr) 範例, 13 所示。當組合的 U-V 數組被視為一個由 little-endian WORD 值組成的數組時,LSB 包含 U 值,MSB 包含 V 值。NV12 是用於 DirectX VA 的首選 4:2:0 像素格式。預期它會成為支援 4:2:0 視頻的 DirectX VA 加速器的中期要求。

 

YUV格式解析2又確認了一下H264的視頻格式——H264支援4:2:0的連續或隔行視頻的編碼和解碼YUV(亦稱YCrCb)是被歐洲電視系統所採用的一種顏色編碼方法(屬於PAL)。YUV主要用於最佳化彩色視頻訊號的傳輸,使其向後相容老式黑白電視。與RGB視頻訊號傳輸相比,它最大的優點在於只需佔用極少的頻寬(RGB要求三個獨立的視頻訊號同時傳輸)。其中“Y”表示明亮度(Luminance或Luma),也就是灰階值;而“U”和“V”表示的則是色度(Chrominance或Chroma),作用是描述影像色彩及飽和度,用於指定像素的顏色。“亮度”是通過RGB輸入訊號來建立的,方法是將RGB訊號的特定部分疊加到一起。“色度”則定義了顏色的兩個方面—色調與飽和度,分別用Cr和CB來表示。其中,Cr反映了GB輸入訊號紅色部分與RGB訊號亮度值之間的差異。而CB反映的是RGB輸入訊號藍色部分與RGB訊號亮度值之同的差異。  補充一下場的概念——場的概念不是從DV才開始有的,電視系統已經有了(當然,DV和電視的關係大家都知道)歸根結底還是掃描的問題,具體到PAL制式是:
每秒25幀,每幀兩場,掃描線(包括電視機的電子束)自上而下先掃描一場,然後再自上而下掃描第二場
之所以引入場的概念,我的理解是主要為了在有限的頻寬和成本內使畫面運動更加平滑和消除閃爍感。
這兩個場的掃描線是一條一條互相間隔開的,比如說對於一個幀來講,最上面一條線編號為0,緊挨著的是1,再下來是2,3,4,5,6。。。。那麼第一場也許是0,2,4,6;也許是1,3,5,7——這就是隔行掃描
在漸進式掃描模式下,就是掃描線按照0,1,2,3,4,5的順序依次掃描,很明顯,這時候就不存在場的概念了。下面區分一下YUV和YCbCrYUV色彩模型來源於RGB模型,該模型的特點是將亮度和色度分離開,從而適合於影像處理領域。應用:類比領域Y'= 0.299*R' + 0.587*G' + 0.114*B'U'= -0.147*R' - 0.289*G' + 0.436*B' = 0.492*(B'- Y')V'= 0.615*R' - 0.515*G' - 0.100*B' = 0.877*(R'- Y')R' = Y' + 1.140*V'G' = Y' - 0.394*U' - 0.581*V'B' = Y' + 2.032*U'YCbCr模型來源於YUV模型。YCbCr是 YUV 色彩空間的位移版本.應用:數位視訊,ITU-R BT.601建議Y’ = 0.257*R' + 0.504*G' + 0.098*B' + 16Cb' = -0.148*R' - 0.291*G' + 0.439*B' + 128Cr' = 0.439*R' - 0.368*G' - 0.071*B' + 128R' = 1.164*(Y’-16) + 1.596*(Cr'-128)G' = 1.164*(Y’-16) - 0.813*(Cr'-128) - 0.392*(Cb'-128)B' = 1.164*(Y’-16) + 2.017*(Cb'-128)PS: 上面各個符號都帶了一撇,表示該符號在原值基礎上進行了色差補正坡形,色差補正坡形有助於彌補在消除鋸齒的過程中,線性分配伽馬值所帶來的細節損失,使映像細節更加豐富。在沒有採用色差補正坡形的情況下,暗部細節不容易顯現出來,而採用了這一映像增強技術以後,映像的層次更加明晰了。所以說H264裡面的YUV應屬於YCbCr.
下面再仔細談談YUV格式, YUV格式通常有兩大類:打包(packed)格式和平面(planar)格式。前者將YUV分量存放在同一個數組中,通常是幾個相鄰的像素組成一個宏像素(macro-pixel);而後者使用三個數組分開存放YUV三個分量,就像是一個三維平面一樣。我們常說得YUV420屬於planar格式的YUV, 顏色比例如下:Y0U0V0             Y1                 Y2U2V2                      Y3Y4                 Y5                 Y6                          Y7Y8U8V8             Y9                 Y10U10V10                   Y11Y12                Y13                Y14                         Y15其他格式YUV可以點這裡查看詳細內容, 而在YUV檔案中YUV420又是怎麼儲存的呢? 在常見H264測試的YUV序列中,例如CIF映像大小的YUV序列(352*288),在檔案開始並沒有檔案頭,直接就是YUV資料,先存第一幀的Y資訊,長度為352*288個byte, 然後是第一幀U資訊長度是352*288/4個byte, 最後是第一幀的V資訊,長度是352*288/4個byte, 因此可以算出第一幀資料總長度是352*288*1.5,即152064個byte, 如果這個序列是300幀的話, 那麼序列總長度即為152064*300=44550KB,這也就是為什麼常見的300幀CIF序列總是44M的原因.

4:4:4採樣就是說三種元素Y,Cb,Cr有同樣的解析度,這樣的話,在每一個像素點上都對這三種元素進行採樣.數字4是指在水平方向上對於各種元素的採樣率,比如說,每四個亮度採樣點就有四個Cb的Cr採樣值.4:4:4採樣完整地保留了所有的資訊值.4:2:2採樣中(有時記為YUY2),色度元素在縱向與亮度值有同樣的解析度,而在橫向則是亮度解析度的一半(4:2:2表示每四個亮度值就有兩個Cb和Cr採樣.)4:2:2視頻用來構造高品質的視頻彩色訊號.

在流行的4:2:0採樣格式中(常記為YV12)Cb和Cr在水平和垂直方向上有Y解析度的一半.4:2:0有些不同,因為它並不是指在實際採樣中使用4:2:0,而是在編碼史中定義這種編碼方法是用來區別於4:4:4和4:2:2方法的).4:2:0採樣被廣泛地應用於消費應用中,比如視頻會議,數字電視和DVD儲存中。因為每個顏色差別元素中包含了四分之一的Y採樣元素量,那麼4:2:0YCbCr視頻需要剛好4: 4:4或RGB視頻中採樣量的一半。

4:2:0採樣有時被描述是一個"每像素12位"的方法。這麼說的原因可以從對四個像素的採樣中看出. 使用4:4:4採樣,一共要進行12次採樣,對每一個Y,Cb和Cr,就需要12*8=96位,平均下來要96/4=24位。使用4:2:0就需要6*8 =48位,平均每個像素48/4=12位。

在一個4:2:0隔行掃描的視頻序列中,對應於一個完整的視訊框架的Y,Cb,Cr採樣分配到兩個場中。可以得到,隔行掃描的總採樣數跟漸進式掃描中使用的採樣數目是相同的。

對比一下:Y41P(和Y411)(packed格式)格式為每個像素保留Y分量,而UV分量在水平方向上每4個像素採樣一次。一個宏像素為12個位元組,實際表示8個像素。映像資料中YUV分量排列順序如下: U0 Y0 V0 Y1 U4 Y2 V4 Y3 Y4 Y5 Y6 Y8 …IYUV格式(planar)為每個像素都提取Y分量,而在UV分量的提取時,首先將映像分成若干個2 x 2的宏塊,然後每個宏塊提取一個U分量和一個V分量。YV12格式與IYUV類似,但仍然是平面模式。YUV411、YUV420格式多見於DV資料中,前者用於NTSC制,後者用於PAL制。YUV411為每個像素都提取Y分量,而UV分量在水平方向上每4個像素採樣一次。YUV420並非V分量採樣為0,而是跟YUV411相比,在水平方向上提高一倍色差採樣頻率,在垂直方向上以U/V間隔的方式減小一半色差採樣,如所示。(好像顯示不出來突像)

各種格式的具體使用位元的需求(使用4:2:0採樣,對於每個元素用8個位大小表示):

格式: Sub-QCIF 亮度解析度: 128*96   每幀使用的位: 147456
格式: QCIF   亮度解析度: 176*144   每幀使用的位: 304128
格式: CIF   亮度解析度: 352*288   每幀使用的位: 1216512
格式: 4CIF   亮度解析度: 704*576   每幀使用的位: 4866048

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.