詳解 YUV 格式(I420/YUV420/NV12/NV12/YUV422)

轉載自https://paaatrick.com/2020-01-26-yuv-pixel-formats/

YUVY'CbCr)是一種像素格式,常見於視頻編碼與靜態圖像。與 RGB 格式(紅-綠-藍)相反,YUV 分別由一個稱爲 Y(相當於灰度)的“亮度”分量(Luminance or Luma)和兩個稱爲 U(藍色投影 Cb)和 V(紅色投影 Cr)的“色度”分量(Chrominance or Chroma)表示,由此得名。

僅有 Y 分量而沒有 UV 分量信息,一樣可以顯示完整的黑白(灰度)圖像,解決了模擬信號電視黑白與彩色的兼容問題。

採樣

色度通道(UV)的採樣率可以低於亮度通道(Y),而不會顯着降低感知質量。一種稱爲 “A:B:C” 的表示法用於描述相對於 Y 採樣, U 和 V 的頻率:

  • 4:4:4 表示不降低色度(UV)通道的採樣率。每個 Y 分量對應一組 UV 分量。
  • 4:2:2 表示 2:1 水平下采樣,沒有垂直下采樣。每兩個 Y 分量共享一組 UV 分量。
  • 4:2:0 表示 2:1 水平下采樣,同時 2:1 垂直下采樣。每四個 Y 分量共享一組 UV 分量。
  • 4:1:1 表示 4:1 水平下采樣,沒有垂直下采樣。每四個 Y 分量共享一組 UV 分量。4:1:1 採樣比其他格式少見,本文不再詳細討論。

下圖顯示瞭如何針對每個下采樣率採樣色度。亮度樣本用十字表示,色度樣本用圓圈表示。

YUV Sampling

存儲格式

YUV 在存儲上通常分爲平面格式(Planar),半平面格式(Semi-Planar)以及打包格式(Packed)。

Planar 平面格式

平面格式有時也稱爲三面格式(Triplanar),即 Y, U, V 三個分量各自使用單獨的數組保存,這種三平面分離的格式比較方便視頻編碼。

YU12 (I420)

  • 4:2:0 Formats, 12 Bits per Pixel, 3 Planars

FOURCC I420

YU12I420,也叫 IYUV,屬於 YUV420P 格式。三個平面,分別存儲 Y U V 分量。每四個 Y 分量共享一組 UV 分量。U、V 平面的 strides, width 和 height 都是 Y 平面的一半,因此一個像素 12 bits,內存排列如下圖所示:

YU12 Format

從圖中可看出,U、V 平面的每行字節數(strides)、高(height)都是 Y 平面的一半。

I420 是音視頻開發中常用的一種格式。

YV12

  • 4:2:0 Formats, 12 Bits per Pixel, 3 Planars

FOURCC YV12

YV12I420 幾乎一樣,僅改變了 U, V 平面的順序。內存排列如下圖所示:

YU12 Format

J420

  • 4:2:0 Formats, 12 Bits per Pixel, 3 Planars

J420I420 完全相同,但具有完整範圍(0-255,full range)的亮度(Y)分量,而不是有限範圍(16-240,limited range,在 iOS 上也叫做 video range)。色度(UV)分量與 I420 中的完全相同。

IMC1

  • 4:2:0 Formats, 16 Bits per Pixel, 3 Planars

FOURCC IMC1

IMC1I420 類似,U, V 平面的寬(width)、高(height)是 Y 平面的一半,但是每行字節數(strides)與 Y 平面一致,因此 U, V 平面在內存上會有留空(padding),因此一個像素 16 bits,如圖所示:

IMC1 Format

IMC3

  • 4:2:0 Formats, 16 Bits per Pixel, 3 Planars

IMC3IMC1 幾乎一樣,僅改變了 U, V 平面的順序。內存排列如下圖所示:

IMC3 Format

I422

  • 4:2:2 Formats, 16 Bits per Pixel, 3 Planars

I422 屬於 YUV422P 格式。三個平面,分別存儲 Y U V 分量。每兩個 Y 分量共享一組 UV 分量。U、V 平面的 strides, width 是 Y 平面的一半,但 height 與 Y 平面一致,因此一個像素 16 bits,內存排列如下圖所示:

YUV422P

從圖中可看出,U、V 平面的每行字節數(strides)是 Y 平面的一半,高(height)與 Y 平面一致。

J422

  • 4:2:2 Formats, 16 Bits per Pixel, 3 Planars

J422I422 完全相同,但具有完整範圍(0-255,full range)的亮度(Y)分量,而不是有限範圍(16-240,limited range,在 iOS 上也叫做 video range)。色度(UV)分量與 I420 中的完全相同。

Semi-Planar 半平面格式

半平面格式具有兩個平面而不是三個平面,一個平面存儲亮度(Y)分量,另一個平面存儲兩個色度(UV)分量。有時也將它們稱爲雙平面格式(BiPlanar)。

NV12

  • 4:2:0 Formats, 12 Bits per Pixel, 2 Planars

FOURCC NV12

NV12 屬於 YUV420SP 格式。兩個平面,分別存儲 Y 分量 和 UV 分量。其中 UV 分量共用一個平面並且以 U, V, U, V 的順序交錯排列。每四個 Y 分量共享一組 UV 分量。

UV 平面的 strides, width 與 Y 平面一樣長,但 height 僅爲 Y 平面的一半。因此一個像素 12 bits,內存排列如下圖所示:

NV12 Format

從圖中可看出,UV 平面的每行字節數(strides)與 Y 平面一致,高(height)是 Y 平面的一半。

NV12 是 iOS 相機(AVCaptureOutput)可直接輸出的兩種視頻幀格式之一,另外一種是 BGRA32(kCVPixelFormatType_32BGRA)。

在 iOS 上,NV12 還分爲 Full Range (0-255, kCVPixelFormatType_420YpCbCr8BiPlanarFullRange) 和 Video Range (16-240, kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange),區別僅爲亮度(Y)分量的取值範圍,一般而言,Full Range 適用於靜態圖像(拍照),Video Range 適用於視頻採集(攝像)。

NV21

  • 4:2:0 Formats, 12 Bits per Pixel, 2 Planars

FOURCC NV21

NV21 屬於 YUV420SP,與 NV12 幾乎一致,區別是 UV 平面中 U 與 V 的排列順序顛倒,以 V, U, V, U 的順序交錯排列,內存排列如圖所示:

NV21 Format

NV21 是 Android 相機(Camera)默認的輸出格式。

Packed 打包格式

打包格式通常只有一個平面,所有亮度(Y)和色度(UV)數據都交織在一起。有點類似於 RGB 格式,只是使用了不同的色彩空間。

打包格式在網絡攝像頭中較爲常見。硬件設備使用多平面格式效率較低,因爲每個像素需要多次內存訪問。而打包格式由於僅一個平面,訪問內存的開銷較小。

AYUV

  • 4:4:4 Formats, 32 Bits per Pixel

FOURCC AYUV

AYUV 是 Packed 打包格式,其中每個像素編碼爲四個連續字節,每個像素在內存中按照 V, U, Y, A 的順序排列(A 指 alpha 通道),如下圖所示:

AYUV Format

YUYV (V422 / YUY2 / YUNV)

  • 4:2:2 Formats, 16 Bits per Pixel

FOURCC YUY2

YUYV 通常也稱作 V422YUY2YUNV

YUY2 是 Packed 打包格式,其中兩個像素共用一組 UV 分量,內存中按照 Y U Y V 的順序排列,如下圖所示:

YUYV Format

UYVY (Y422 / UYNV)

  • 4:2:2 Formats, 16 Bits per Pixel

FOURCC UYVY

UYVY 通常也稱作 Y422UYNV

UYVYYUYV 類似,只是亮度(Y)分量與色度(UV)分量排列順序顛倒,如下圖所示:

UYVY Format

參考資料

  1. Microsoft: Recommended 8-Bit YUV Formats for Video Rendering

  2. VideoLAN’s Wiki: YUV

  3. FOURCC: YUV pixel formats

  4. WWDC2011: Capturing from the Camera using AV Foundation on iOS 5

    </div>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章