天天看點

視訊基礎知識學習1

來自極客時間的視訊教程學習:

1、像素:

    像素是圖像的基本單元,一個個像素就組成了圖像。你可以認為像素就是圖像中的一個 點

2、分辨率

圖像(或視訊)的分辨率是指圖像的大小或尺寸。我們一般用像素個數來表示圖像的尺

寸。比如說一張 1920x1080 的圖像,前者 1920 指的是該圖像的寬度方向上有 1920 個像

素點,而後者 1080 指的是圖像的高度方向上有 1080 個像素點。

視訊行業常見的分辨率有 QCIF(176x144)、CIF(352x288)、D1(704x576 或

720x576),還有我們比較熟悉的 360P(640x360)、720P(1280x720)、

1080P(1920x1080)、4K(3840x2160)、8K(7680x4320)等。

3、

位深

一般來說,我們看到的彩色圖像中,都有三個通道,這三個通道就是 R、G、B 通道。簡單

來說就是,彩色圖像中的像素是有三個顔色值的,分别是紅、綠、藍三個值。也就是說我

們看到的那個帶有顔色的塊其實是由 R、G、B 三個值組成的(有的時候還會有 Alpha

值,代表透明度,我們這裡不展開讨論)。

通常 R、G、B 各占 8 個位,也就是一個位元組。8 個位能表示 256 種顔色值,那 3 個通道

的話就是 256 的 3 次方個顔色值,總共是 1677 萬種顔色。我們稱這種圖像是 8bit 圖

像,而這個 8bit 就是位深。

4、

Stride

接下來我們來看一個特别的概念——Stride。這個 Stride 不是圖像本身的屬性,但是視訊

開發者經常會碰到,也是經常會出問題的一個東西。我們團隊在工作中就多次遇到過由于

客戶沒有處理好這個東西,進而導緻播放的圖像出現“花屏”的情況。

Stride 也可以稱之為跨距,是圖像存儲的時候有的一個概念。

它指的是圖像存儲時記憶體中

每行像素所占用的空間。

你可能會問,一張圖像的分辨率确定了,那一行的像素值不就确

定了嗎?為什麼還需要跨距這個東西呢?其實,為了能夠快速讀取一行像素,我們一般會

對記憶體中的圖像實作記憶體對齊,比如 16 位元組對齊。

舉個例子,我們現在有一張 RGB 圖像,分辨率是 1278x720。我們将它存儲在記憶體當中,

一行像素需要 1278x3=3834 個位元組,3834 除以 16 無法整除。是以,沒有 16 位元組對

齊。是以如果需要對齊的話,我們需要在 3834 個位元組後面填充 6 個位元組,也就是 3840

個位元組做 16 位元組對齊,這樣這幅圖像的 Stride 就是 3840 了。如下圖所示:

視訊基礎知識學習1

這個地方你一定要注意,

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

。如果沒有跳

過的話,這 6 個位元組的像素就會被我們誤認為是下一行開始的 2 個像素(每個像素 R、

G、B 各占 1 個位元組,2 個像素共 6 個位元組)。那這樣得到的圖像就完全錯了,顯示出來

的就是“花屏”現象,螢幕會出現一條條的斜線。

幀率

1 秒鐘内圖像的數量就是幀率

。據研究表明,一般幀率達到 10~12 幀每秒,人眼就

會認為是流暢的了。當然,可能會有個體差異。

通常,我們在電影院看的電影幀率一般是 24fps(幀每秒),監控行業常用 25fps,而我

們聲網常用的幀率有 15fps、24fps 和 30fps。你可以根據自己的使用場景來具體設定你想

使用的幀率值

碼率

我們已經知道,視訊的幀率越高,1 秒鐘内的圖像資料量就會越大。通常我們存儲視訊的

時候需要對圖像進行壓縮之後再存儲,否則視訊會非常大。

那麼壓縮之後的視訊我們一般如何描述它的大小呢?一般對于一個視訊檔案,我們直接看

視訊的大小就可以了。但是在實時通信或者直播的時候,視訊是視訊流的形式,我們怎麼

衡量呢?

這就涉及到我接下來要介紹的概念——碼率。碼率是指視訊在機關時間内的資料量的大

小,一般是 1 秒鐘内的資料量,其機關一般是 Kb/s 或者 Mb/s。通常,

我們用壓縮工具壓

縮同一個原始視訊的時候,碼率越高,圖像的失真就會越小,視訊畫面就會越清晰

。但同