音視頻開發(一)——視頻數據格式

1. 概述

在我們進行視頻數據處理的時候,不可避免的要涉及不同的視頻數據格式,這裏的視頻格式指單獨的視頻幀的格式,不包括音頻數據。
接下來將對常見的視頻圖像格式進行介紹,並比較不同格式的適用場景。

2. RGB 格式

2.1 RGB 簡介

RGB即紅綠藍三原色,世界上絕大多數顏色都可以通過RGB按照不同的配比得到,這裏說的是絕大多數而沒有說全部,因爲仍然有些顏色無法通過三原色配比得到。而這些無法通過三原色配比得到的顏色,在視頻圖片處理過程中可以忽略,可能會有理論研究的意義。具體可以看顏色三角形.

RGB是最早出現的顏色空間,之後陸續又出現了 HSL、HSV、YUV 等,具體可以參考文章RGB、YUV和HSV顏色空間模型顏色空間:RGB,CMY,HSV,HSL,Lab詳解.

RGB 格式更加靠近設備端,設備採集的數據或者設備支持渲染的數據往往都是 RGB 格式的,下圖可以看出 RGB 和 YUV 的應用場景。圖片來自 Color image pipeline
在這裏插入圖片描述

2.2 RGB 存儲形式

RGB格式有多種存儲或者表示方式。
調色板
RGB1,RGB4,RGB8、RGB256等,都是通過調色板來表示的,就是在存儲顏色時,並不是存儲的真正的顏色數據,而是一個指向調色板的索引。

直接存儲顏色

  • 兩字節存儲,例如 RGB555、RGB565,每種基色都只佔5或6位。
  • 三字節存儲,有 RGB24,三種顏色各佔一個字節。
  • 四字節存儲,有RGB32,各分量佔用8位,剩下的8位作Alpha通道或者不用。

3. YUV 格式

3.1 簡介

YUV 是一種廣泛應用於視頻編解碼的圖形表示方式。Y 是圖形的亮度參數,U 和 V 表示圖形的色度和飽和度,研究表明人眼對亮度的敏感程度高於色度,所以在存儲圖形的時候,可以降低色度的數據量,達到壓縮的目的。

YUV 相對 RGB 的優勢:

  • YUV 中的 Y 就是表示的亮度,如果去掉 UV 維度,即得到黑白圖片,能夠實現彩色視頻對黑白顯示器的向下兼容。
  • YUV 能夠實現對圖形更好的壓縮效果,所以在視頻傳輸過程中,基本都是以 YUV 格式進行的。

3.2 YUV 存儲形式

按照色度信息採樣的頻率可以分爲以下三種:
YUV444 : 表示色度信息沒有減少採樣,即 YUV 各佔一個字節。
YUV422:表示色度信息減半採樣,每採樣兩個 Y,會採樣一個 U 和一個 V。
YUV420:表示色度信息按照亮度的四分之一採樣,每採樣四個 Y,會採樣一個 U 和一個 V。

最常用的是 YUV420,主要是能夠實現最好的壓縮效果,而視覺效果降低不明顯,YUV420根據UV 參數的相對存儲位置又可以分爲以下四種形式:
I420:YYYYYYYY UU VV
YV12:YYYYYYYY VV UU
NV12:YYYYYYYY UVUV
NV21:YYYYYYYY VUVU

4. RGB 和 YUV 之間的轉換

參考:
YUV格式詳解【轉】
YUV格式分析
YUV

//RGB --> YUV
Y = (0.257 * R) + (0.504 * G) + (0.098 * B) + 16

Cr = V = (0.439 * R) - (0.368 * G) - (0.071 * B) + 128

Cb = U = -( 0.148 * R) - (0.291 * G) + (0.439 * B) + 128

//YUV --> RGB
R = 1.164(Y - 16) + 1.596(V - 128)

G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)

R = 1.164(Y - 16) + 1.596(V - 128)

RGB取值範圍均爲 0- 255,Y = 0 - 255,U = -122 - +122,V = -157 - +157,以下是經過簡化的公式,運算量比上述公式要小一些。

// RGB --> YUV
Y = 0.299R + 0.587G + 0.114B

U'= (BY)*0.565

V'= (RY)*0.713

// YUV --> RGB
R = Y + 1.403V'

G = Y - 0.344U' - 0.714V'

B = Y + 1.770U'

關於 YUV 和 RGB 格式的圖片處理可以參考:視音頻數據處理入門:RGB、YUV像素數據處理

5. 小結

最近打算比較系統的學習音視頻的知識,這是開端,目前接觸最多的就是這兩種圖形表示方式,當然還有其他的,後面如果有必要再補充。

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