YUV視訊碼流介紹
視訊顏色編碼編碼常用的有RGB,YUV等,RGB也就是我們常說的三原色,一個畫素會採集三個向量,佔用更大的頻寬,常用於圖形的渲染。而YUV編碼,有更小的頻寬,常用於網路視訊的傳輸。
YUV介紹
YUV採用亮度/色度等來描述一個畫素。其中Y代表亮度,UV表示色度和濃度。
Y’UV,YUV,YCbCr,YPbPr等都是YUV格式。區別在於, Y’UV,YUV,是以前使用時電視,用來描述模擬訊號的,而YCbCr,YPbPr等是現在描述網路傳輸的數字訊號的。
YUV與RGB轉換
YUV的 U越大,顏色越藍,V越大,顏色越紅,RGB的轉換有很多,列一個簡單的轉換。
Y = 0.299 R + 0.587 G + 0.114 B
U = - 0.1687 R - 0.3313 G + 0.5 B + 128
V = 0.5 R - 0.4187 G - 0.0813 B + 128
反過來,RGB 也可以直接從YUV (256級別) 計算:
R = Y + 1.402 (Cr-128)
G = Y - 0.34414 (Cb-128) - 0.71414 (Cr-128)
B = Y + 1.772 (Cb-128)
YUV取樣方式
那麼在儲存時候,會將所以畫素的YUV儲存下來嗎?YUV相比RGB格式節約頻寬就是因為它採取一種抽樣的方式,相鄰畫素只採集Y,而畫素的UV在幾個周圍畫素點中是公用的。
所以,在YUV取樣時候,那些畫素UV公用等,具體怎麼取樣。就出現了幾種方式,主流的取樣方式有三種,YUV4:4:4,YUV4:2:2,YUV4:2:0。取樣方式用來描述一個巨集畫素,一個巨集畫素由4個畫素組成
YUV4:4:4代表1個巨集畫素,Y採集4次,U採集4次,V採集4次。
YUV4:4:2代表1個巨集畫素,Y採集4次,U採集4次,V採集2次。
YUV4:4:0代表1個巨集畫素,Y採集4次,U採集4次,V採集0次。
其中v為0次不代表就不會採集V,而是和U相互援引,下次就變為YUV4:0:4再下次又變成YUV4:4:0
RGB採集時每個分量採用8bit儲存,所以一個畫素需要8*3=24bit
而如果採用YUV4:1:1格式,一個畫素需要8bit+8/4+8/4=12bit,影象就壓縮了一半。
YUV分類方式
YUV格式分為兩大類:planar(平面格式)和packed(打包格式)。
對於planar的YUV格式,先連續儲存所有畫素點的Y,然後儲存所有畫素點的U,隨後是所有畫素點的V。如IF09,YVU9等格式。
比如採用YUV4:4:4採集的平面格式,Y1Y2Y3Y4Y5…U1U2U3U4U5…V1V2V3V4V5
對於packed的YUV格式,先存一個畫素點的YUV再存下一個畫素點的YUV。
YUV分類格式的不同,採集的格式也不同,在儲存時候也會有所不同。如YUV2,Y211等
比如採用YUV4:4:4採集的打包格式,Y1U1V1Y2U2V2Y3U3V3…
YUV的儲存方式
採用不同的分類格式和不同採集格式就有不同的儲存方式
YUV4:4:4的打包格式
//一個巨集畫素,兩行兩列四個畫素
[Y0U0V0] [Y1U1V1]
[Y2U2V2] [Y3U3V3]
//儲存的碼流
Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3
YUV4:2:2的打包格式
//一個巨集畫素,兩行兩列四個畫素
[Y0U0V0] [Y1U1V1]
[Y2U2V2] [Y3U3V3]
//儲存的碼流
//U和V橫向兩個畫素共用,所以橫向一個畫素採集U一個畫素採集V
Y0 U0 Y1 V1 Y2 U2 Y3 V3
//還原時候的畫素
[Y0U0V1] [Y1U0V1]
[Y2U2V3] [Y3U2V3]
YUV4:1:1的打包格式
//一個巨集畫素,兩行兩列四個畫素
[Y0U0V0] [Y1U1V1]
[Y2U2V2] [Y3U3V3]
//儲存的碼流
//U和V橫列向四個畫素共用,唯一的U由0來採集,唯一的V由2採集(列採集)
Y0 U0 Y1 Y2 V2 Y3
//還原時候的畫素
[Y0U0V2] [Y1U0V2]
[Y2U0V2] [Y3U0V2]
YUV4:2:0的打包格式
//一個巨集畫素,兩行兩列四個畫素
[Y0U0V0] [Y1U1V1] [Y4U4V4] [Y5U5V5]
[Y2U2V2] [Y3U3V3] [Y6U6V6] [Y7U7V7]
//儲存的碼流
//不表示V不採集而是代表Y與UV的比例為2:1。第一個巨集畫素採集U下一個就採集V
//所以一個畫素佔8+4=12bit
Y0 U0 Y1 Y2 U2 Y3 Y4 V4 Y5 Y6 V6 Y7
//還原時候的畫素
[Y0U0V4] [Y1U0V4] [Y4U0V4] [Y5U0V4]
[Y2U2V6] [Y3U2V6] [Y6U2V6] [Y7U2V6]