數字視頻技術介紹 之 基本術語

公衆號回覆:666,領取學習資源大禮包

這是一份循序漸進的視頻技術的介紹,來自 Github 倉庫:

https://github.com/leandromoreira/digital_video_introduction

本文檔旨在儘可能使用淺顯的詞語,豐富的圖像和實際例子介紹數字視頻概念,使這些知識能適用於各種場合。

有興趣瞭解更多內容的同學可以下載倉庫源碼,這裏只做摘錄,僅供參考。

基本術語

一個圖像可以視作一個二維矩陣。如果將色彩考慮進來,我們可以做出推廣:將這個圖像視作一個三維矩陣——多出來的維度用於儲存色彩信息。

如果我們選擇三原色(紅、綠、藍)代表這些色彩,這就定義了三個平面:第一個是紅色平面,第二個是綠色平面,最後一個是藍色平面。

an image is a 3d matrix RGB

我們把這個矩陣裏的每一個點稱爲像素(圖像元素)。像素的色彩由三原色的強度(通常用數值表示)表示。例如,一個紅色像素是指強度爲 0 的綠色,強度爲 0 的藍色和強度最大的紅色。粉色像素可以通過三種顏色的組合表示。如果規定強度的取值範圍是 0 到 255,紅色 255、綠色 192、藍色 203 則表示粉色。

編碼彩色圖像的其它方法

還有許多其它模型也可以用來表示色彩,進而組成圖像。例如,給每種顏色都標上序號(如下圖),這樣每個像素僅需一個字節就可以表示出來,而不是 RGB 模型通常所需的 3 個。在這樣一個模型裏我們可以用一個二維矩陣來代替三維矩陣去表示我們的色彩,這將節省存儲空間,但色彩的數量將會受限。

 

NES palette

例如以下幾張圖片。第一張包含所有顏色平面。剩下的分別是紅、綠、藍色平面(顯示爲灰調)(譯註:顏色強度高的地方顯示爲亮色,強度低爲暗色)。

RGB channels intensity

我們可以看到,對於最終的成像,紅色平面對強度的貢獻更多(三個平面最亮的是紅色平面),藍色平面(最後一張圖片)的貢獻大多隻在馬里奧的眼睛和他衣服的一部分。所有顏色平面對馬里奧的鬍子(最暗的部分)均貢獻較少。

存儲顏色的強度,需要佔用一定大小的數據空間,這個大小被稱爲顏色深度。假如每個顏色(平面)的強度佔用 8 bit(取值範圍爲 0 到 255),那麼顏色深度就是 24(8*3)bit,我們還可以推導出我們可以使用 2 的 24 次方種不同的顏色。

很棒的學習材料:現實世界的照片是如何拍攝成 0 和 1 的

圖片的另一個屬性是分辨率,即一個平面內像素的數量。通常表示成寬*高,例如下面這張 4x4 的圖片。

image resolution

自己動手:玩轉圖像和顏色

你可以使用 jupyter(python, numpy, matplotlib 等等)玩轉圖像。

你也可以學習圖像濾鏡(邊緣檢測,磨皮,模糊。。。)的原理。

圖像或視頻還有一個屬性是寬高比,它簡單地描述了圖像或像素的寬度和高度之間的比例關係。

當人們說這個電影或照片是 16:9 時,通常是指顯示寬高比(DAR),然而我們也可以有不同形狀的單個像素,我們稱爲像素寬高比(PAR)。

display aspect ratio


pixel aspect ratio

DVD 的 DAR 是 4:3

雖然 DVD 的實際分辨率是 704x480,但它依然保持 4:3 的寬高比,因爲它有一個 10:11(704x10/480x11)的 PAR。

現在我們可以將視頻定義爲在單位時間連續的 n 幀,這可以視作一個新的維度,n 即爲幀率,若單位時間爲秒,則等同於 FPS (每秒幀數 Frames Per Second)。

video

播放一段視頻每秒所需的數據量就是它的比特率(即常說的碼率)。

比特率 = 寬 * 高 * 顏色深度 * 幀每秒

例如,一段每秒 30 幀,每像素 24 bits,分辨率是 480x240 的視頻,如果我們不做任何壓縮,它將需要 82,944,000 比特每秒或 82.944 Mbps (30x480x240x24)。

比特率幾乎恆定時稱爲恆定比特率(CBR);但它也可以變化,稱爲可變比特率(VBR)。

這個圖形顯示了一個受限的 VBR,當幀爲黑色時不會花費太多的數據量。

 

constrained vbr

在早期,工程師們想出了一項技術能將視頻的感官幀率加倍而沒有消耗額外帶寬。這項技術被稱爲隔行掃描;總的來說,它在一個時間點發送一個畫面——畫面用於填充屏幕的一半,而下一個時間點發送的畫面用於填充屏幕的另一半。

如今的屏幕渲染大多使用逐行掃描技術。這是一種顯示、存儲、傳輸運動圖像的方法,每幀中的所有行都會被依次繪製。

interlaced vs progressive

現在我們知道了數字化圖像的原理;它的顏色的編排方式;給定幀率分辨率時,展示一個視頻需要花費多少比特率;它是恆定的(CBR)還是可變的(VBR);還有很多其它內容,如隔行掃描和 PAR。

自己動手:檢查視頻屬性

你可以使用 ffmpeg 或 mediainfo 檢查大多數屬性的解釋。

推薦閱讀:

或許是迄今爲止第一篇講解 fps 計算原理的文章吧

【音視頻連載-011】第二季 FFmpeg 一層一層獲取文件信息

推薦幾個堪稱教科書級別的 Android 音視頻入門項目

面試中的HashMap、Hashtable和ConcurrentHashMap,你知道多少?

覺得不錯,點個在看唄~

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