數字影片概念

在本文中,我們將探討有助於全面理解如何在 Web 上處理影片的重要概念。

色彩編碼

表示影像或影片中的顏色,每個畫素需要幾個值。這些值取決於您在將顏色轉換為數值形式時如何“分割”顏色。有幾種顏色模型,影片編解碼器在編碼過程中以及解碼影片幀後會使用一種或多種模型來表示其畫素。

RGB

大多數計算機圖形模型使用 RGB 顏色系統,其中使用一定數量的資料位來表示單個畫素顏色的紅色、綠色和藍色分量,影像由這些畫素的二維陣列組成。有兩種主要方法用於表示 RGB 樣本:使用整數分量和使用浮點數分量。在使用整數分量時,RGB 顏色為紅色、綠色和藍色各使用 8 位,以及可能用於 alpha(透明度)的 8 位。

YUV

與 RGB 不同,YUV (或 Y'UV) 顏色編碼系統圍繞人類感知彩色影像的方式構建。這樣做可以在影片流中使用更少的總位元空間來表示顏色資料。

雖然“YUV”這個術語最初特指模擬彩色編碼,而 YCbCr 用於數字彩色,但今天“YUV”通常用於描述這種顏色系統。然而,今天這兩個術語都用於數字彩色。撇號(')表示正在使用伽馬校正。

審視人類視覺

我們能夠以這種方式表示影像,是因為由於生物學的原因,人眼在灰度方面的細節遠多於在彩色方面。人眼包含兩種型別的 感光器(感光細胞)。視杆細胞是高度敏感的光強度感測器。視錐細胞靈敏度較低,但能夠檢測顏色。

由於眼睛中的視杆細胞遠多於視錐細胞(約 1.2 億個視杆細胞對約 600 到 700 萬個視錐細胞),我們看到的灰度細節更多,而顏色細節要少得多。本質上,我們的眼睛就像一臺帶有兩個影像感測器晶片的相機:一個灰度感測器和一個彩色感測器。灰度感測器為 1.2 億畫素,而彩色感測器僅為約 700 萬畫素。這些感測器物理上佔據同一表面,稱為眼後部的 視網膜

有三種類型的視錐細胞,每種都對入射光的特定波長範圍以及該波長下的光強度作出反應。然後,每種型別的視錐細胞都會捕獲各種波長下的相對響應峰值,大腦利用這些資料來確定到達視網膜該部分的光的強度和色調。

當我們的眼睛捕捉場景時,它們實際上同時拍攝了兩張照片:一張細節豐富的灰度影像和一張在同一時間跨越視網膜的、略顯模糊的、解析度較低的彩色光對映。最終的彩色影像由大腦建立,它基本上是將顏色疊加到灰度畫素上。

YUV 概念

YUV 透過定義一個具有三個分量的顏色空間來工作:

亮度 (Y')

畫素的亮度。如果沒有另外兩個分量,幀中每個畫素的亮度會產生影像的灰度表示。例如,在 BT.709 (用於 HDTV) 中,亮度值是畫素的伽馬校正後的紅色、綠色和藍色分量的加權總和,使用公式 Y' = 0.2126R' + 0.7152G' + 0.0722B'。進行此加權是因為之前提到的眼睛中綠色、紅色和藍色視錐細胞的比例。

藍差 (U 或 Cb)

色度(顏色)樣本的藍色差分量。此值透過從伽馬校正後的藍色值中減去亮度來計算;即,U = B' - Y'

紅差 (V 或 Cr)

色度樣本的紅色差分量。透過從伽馬校正後的紅色值中減去亮度來計算:V = R' - Y'

色度子取樣

色度子取樣是將彩色畫素轉換為灰度影像以及一個 U 和 V 值矩陣的過程,該矩陣指示要對映到這些畫素的顏色。

由於顏色資料以比亮度低的解析度編碼,因此在解碼影片以將其繪製到螢幕時,每個畫素的顏色是透過計算給定畫素所屬的 4x2 塊的 U 和 V 值來確定的。此解碼操作必須映象編碼過程中使用的方法,該方法由三個用冒號(“:”)分隔的數字表示。

  • 第一個數字指定從 4x2 畫素塊編碼的每行中的亮度取樣數。此值基本上始終為 4,表示“使用所有亮度取樣”。
  • 第二個數字指定用於表示第一行畫素顏色的色度取樣數。
  • 第三個數字表示用於表示第二行畫素顏色的色度取樣數。

下表顯示了三種色度子取樣模型的示例。

4:2:0 4:2:2 4:4:4
亮度 Luminance of pixels in a 4:2 (8-pixel) block Luminance of pixels in a 4:2 (8-pixel) block Luminance of pixels in a 4:2 (8-pixel) block
色度 (U 和 V) A matrix of U and V values for a 4:2:0 decoding operation. The first row contains 2 chroma samples for U: a blue and a green. The first row's samples are duplicated in the second row for V. A matrix of U and V values for a 4:2:2 decoding operation. The first row contains 2 chroma samples for U: a blue and a green. The second row contains 2 chroma samples for V: a pink and a yellow. A matrix of U and V values for a 4:4:4 decoding operation. The first row contains 4 chroma samples for U: a light blue, a yellow, a green and a deep blue. The second row contains 4 chroma samples for V: a pink, a white, a red and a gray.
解碼後的畫素 A 4:2 block of decoded pixels after a 4:2:0 decoding operation that applies the 2 samples of the chroma matrix to each row in the block of luminance data. The colors of the samples become darker when applied to gray shades, black when applied to solid black, and remain unchanged when applied to white. A 4:2 block of decoded pixels after a 4:2:2 decoding operation that applies the 2 samples contained in each row of the chroma matrix to the corresponding rows in the block of luminance data. The colors of the samples become darker when applied to gray shades, black when applied to solid black and remain unchanged when applied to white. A 4:2 block of decoded pixels after a 4:4:4 decoding operation that applies the 4 samples contained in each row of the chroma matrix to the corresponding rows in the block of luminance data. The colors of the samples become darker when applied to gray shades, black when applied to solid black and remain unchanged when applied to white.

在所有這些中,亮度資料塊中每行的所有四個畫素都用於解碼影像。以 4:2:0 色度子取樣為例,在第一列中,數字 2 表示第一行色度資料包含兩個取樣;數字 0 表示第二行沒有自己的色度取樣,並且第一行的取樣將複製到第二行。換句話說,我們從源影像的每隔一行畫素中提取顏色資訊,並將其應用於由亮度表示的灰度影像。

第二列顯示 4:2:2 子取樣。四行亮度取樣組成的頂部行應用了兩個色度取樣,底部行的亮度也應用了兩個色度取樣。然後,由該塊表示的八個畫素共享四個色度取樣。

最後一個示例展示了 4:4:4 子取樣。每行有四個亮度取樣,每行也有四個色度取樣,因此塊所表示的每個畫素都單獨著色。

如果色度子取樣模型是 4:0:0 呢?這意味著使用所有亮度資料畫素,但每行應用 0 個色度取樣。那麼,生成的影像僅由亮度資料組成——灰度影像。

YUV 資料表示

由於影像以比彩色更詳細的灰度方式表示,因此 Y'、U 和 V 的值通常不會像 RGB 影像在記憶體中儲存的那樣,每個畫素一個樣本地一起儲存。

  • 影片的每一幀由一個亮度值矩陣 Y 表示,每個畫素的顏色使用 U 和 V 矩陣中的值計算。例如,在 AV1 編解碼器中,一個記錄儲存一個圖塊的編碼亮度,第二個記錄包含 U 和 V 值形式的色度資料。
  • 在廣播電視中,亮度訊號是主訊號,而色度資料則透過副載波傳輸。
  • JPEG 檔案型別的壓縮工作原理是首先將影像轉換為 Y'UV 顏色系統,然後壓縮該資料。Y'、Cb 和 Cr 的值都可以從 0 到 255。