天天看點

音視訊開發基礎知識(1)——圖像基本概念像素分辨率位深Stride幀率碼率RGBYUV

像素

**像素是圖像的基本單元,一個個像素就組成了圖像。你可以認為像素就是圖像中的一個點。**在下面這張圖中,你可以看到一個個方塊,這些方塊就是像素。

音視訊開發基礎知識(1)——圖像基本概念像素分辨率位深Stride幀率碼率RGBYUV

分辨率

圖像(或視訊)的分辨率是指圖像的大小或尺寸。我們一般用像素個數來表示圖像的尺寸。比如說一張1920x1080的圖像,前者1920指的是該圖像的寬度方向上有1920個像素點,而後者1080指的是圖像的高 度方向上有1080個像素點。

視訊行業常見的分辨率有QCIF (176x144)、CIF (352x288)、D1 (704x576或720x576),還有我們 比較熟悉的360P (640x360)、720P (1280x720)、1080P (1920x1080)、4K (3840x2160)、8K (7680x4320)等。

音視訊開發基礎知識(1)——圖像基本概念像素分辨率位深Stride幀率碼率RGBYUV

1 .像素就隻是一個帯有顔色的小塊。

2.不能簡單地認為分辨率數值越高的圖像就越清晰。

原始圖像的話,分辨率越高确實會越清晰,但是我們看到的 圖像往往是經過後期處理的,比如放大縮小,或者磨皮美顔。經過處理過後的圖像,尤其是放大之後的圖 像,分辨率很高,但是它并沒有很清晰。

因為放大的圖像是通過"插值"處理得到的,而插值的像素是使用鄰近像素經過插值算法計算得到的, 跟實際相機拍攝的像素是不一樣的,相當于"腦補"出來的像素值。

位深

一般來說,我們看到的彩色圖像中,都有三個通道,這三個通道就是R、G、B通道,(有的時候還會有Alpha值,代表透明度)

通常R、G、B各占8個位,我們稱這種圖像是8bit圖像,而這個8bit就是位深,位深越大,我們能夠表示的顔色值就越多,目前我們大多數情 況下看到的圖像以及視訊還是8bit位深的。

Stride

Stride也可以稱之為跨距,指的是圖像存儲時記憶體中每行像素所占用的 空間。跨距為了能夠快速讀取一行像素,我們一般會對記憶體中的圖像實作記憶體對齊,比如16位元組對齊。

舉個例子,我們現在有一張RGB圖像,分辨率是1278x720。我們将它存儲在記憶體當中,一行像素需要 1278x3 = 3834個位元組,3834除以16無法整除。是以,沒有16位元組對齊。是以如果需要對齊的話,我們需 要在3834個位元組後面填充6個位元組,也就是3840個位元組做16位元組對齊,這樣這幅圖像的Stride就是3840 了。如下圖所示:

音視訊開發基礎知識(1)——圖像基本概念像素分辨率位深Stride幀率碼率RGBYUV

也就是說,每讀取一行資料時候需要跳過這多餘的6個位元組

幀率

FPS(frame per second 每秒鐘要多少幀畫面)

幀率:影響畫面流暢度,與畫面流暢度成正比:

幀率越大,畫面越流暢;

幀率越小,畫面越有跳動感。

碼率

編碼器每秒編出的資料大小,機關是kbps,比如800kbps代表編碼器每秒産生800kb(或100KB)的資料。

音視訊開發基礎知識(1)——圖像基本概念像素分辨率位深Stride幀率碼率RGBYUV

RGB

RGB中的值不一定是按R-G-B順序排列的,也可能是G-B-R順序

音視訊開發基礎知識(1)——圖像基本概念像素分辨率位深Stride幀率碼率RGBYUV

YUV

YUV 顔色編碼采用的是 明亮度 和 色度 來指定像素的顔色。

其中,Y 表示明亮度(Luminance、Luma),而 U 和 V 表示色度(Chrominance、Chroma)。

YUV主要分為YUV 4:4:4,YUV 4:2:2,YUV 4:2:0幾種常用類型。

音視訊開發基礎知識(1)——圖像基本概念像素分辨率位深Stride幀率碼率RGBYUV
音視訊開發基礎知識(1)——圖像基本概念像素分辨率位深Stride幀率碼率RGBYUV
音視訊開發基礎知識(1)——圖像基本概念像素分辨率位深Stride幀率碼率RGBYUV

1.YUV 4:4:4, 每一個Y對應一組UV。

2.YUV 4:2:2,每兩個Y共用一組UV。

3.YUV 4:2:0,每四個Y共用一組UV。

1.YUV 4:4:4采樣

1個像素存儲示意圖

音視訊開發基礎知識(1)——圖像基本概念像素分辨率位深Stride幀率碼率RGBYUV

舉個例子 :

假如圖像像素為:[Y0 U0 V0]、[Y1 U1 V1]、[Y2 U2 V2]、[Y3 U3 V3]

那麼采樣的碼流為:Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3

最後映射出的像素點依舊為 [Y0 U0 V0]、[Y1 U1 V1]、[Y2 U2 V2]、[Y3 U3 V3]

這種采樣方式的圖像和 RGB 顔色模型的圖像大小是一樣,并沒有達到節省帶寬的目的

2.YUV 4:2:2 采樣

有4種類型

1)YU16 (或者稱為I422、YUV422P),Planar格式

音視訊開發基礎知識(1)——圖像基本概念像素分辨率位深Stride幀率碼率RGBYUV

2)YV16 (YUV422P),Planar格式

音視訊開發基礎知識(1)——圖像基本概念像素分辨率位深Stride幀率碼率RGBYUV

3)NV16(YUV422SP),Packed格式

音視訊開發基礎知識(1)——圖像基本概念像素分辨率位深Stride幀率碼率RGBYUV

4)NV61(YUV422SP),Packed格式

音視訊開發基礎知識(1)——圖像基本概念像素分辨率位深Stride幀率碼率RGBYUV

舉個例子 :

假如圖像像素為:[Y0 U0 V0]、[Y1 U1 V1]、[Y2 U2 V2]、[Y3 U3 V3]

那麼采樣的碼流為:Y0 U0 Y1 V1 Y2 U2 Y3 V3

其中,每采樣過一個像素點,都會采樣其 Y 分量,而 U、V 分量就會間隔一個采集一個。

最後映射出的像素點為 [Y0 U0 V1]、[Y1 U0 V1]、[Y2 U2 V3]、[Y3 U2 V3]

一張 1280 * 720 大小的圖檔,在 YUV 4:2:2 采樣時的大小為:

(1280 * 720 * 8 + 1280 * 720 * 0.5 * 8 * 2)/ 8 / 1024 / 1024 = 1.76 MB 。

3.YUV 4:2:0

1)YU12(I420,YUV420P),Planar格式

音視訊開發基礎知識(1)——圖像基本概念像素分辨率位深Stride幀率碼率RGBYUV

2)YV12(YUV420P),Planar格式

音視訊開發基礎知識(1)——圖像基本概念像素分辨率位深Stride幀率碼率RGBYUV

3)NV12(YUV420SP),Packed格式

音視訊開發基礎知識(1)——圖像基本概念像素分辨率位深Stride幀率碼率RGBYUV

4)NV21(YUV420SP),Packed格式

音視訊開發基礎知識(1)——圖像基本概念像素分辨率位深Stride幀率碼率RGBYUV

舉個例子 :

假設圖像像素為:

[Y0 U0 V0]、[Y1 U1 V1]、 [Y2 U2 V2]、 [Y3 U3 V3]

[Y5 U5 V5]、[Y6 U6 V6]、 [Y7 U7 V7] 、[Y8 U8 V8]

那麼采樣的碼流為:Y0 U0 Y1 Y2 U2 Y3 Y5 V5 Y6 Y7 V7 Y8

其中,每采樣過一個像素點,都會采樣其 Y 分量,而 U、V 分量就會間隔一行按照 2 : 1 進行采樣。

最後映射出的像素點為:

[Y0 U0 V5]、[Y1 U0 V5]、[Y2 U2 V7]、[Y3 U2 V7]

[Y5 U0 V5]、[Y6 U0 V5]、[Y7 U2 V7]、[Y8 U2 V7]

一張 1280 * 720 大小的圖檔,在 YUV 4:2:0 采樣時的大小為:

(1280 * 720 * 8 + 1280 * 720 * 0.25 * 8 * 2)/ 8 / 1024 / 1024 = 1.32 MB 。

YUV 存儲格式

YUV 的存儲格式,有兩種:

planar 平面格式

指先連續存儲所有像素點的 Y 分量,然後存儲 U 分量,最後是 V 分量。

packed 打包模式

指每個像素點的 Y、U、V 分量是連續交替存儲的。

音視訊開發基礎知識(1)——圖像基本概念像素分辨率位深Stride幀率碼率RGBYUV

RGB 到 YUV 的轉換

對于圖像顯示器來說,它是通過 RGB 模型來顯示圖像的,而在傳輸圖像資料時又是使用 YUV 模型,這是因為 YUV 模型可以節省帶寬。是以就需要采集圖像時将 RGB 模型轉換到 YUV 模型,顯示時再将 YUV 模型轉換為 RGB 模型。

RGB 到 YUV 的轉換,就是将圖像所有像素點的 R、G、B 分量轉換到 Y、U、V 分量。

有如下公式進行轉換:

音視訊開發基礎知識(1)——圖像基本概念像素分辨率位深Stride幀率碼率RGBYUV

更多音視訊項目Demo代碼詳見我的GitHub:https://github.com/king-ma1993