因為最近看IMX6Q的VPU示例代碼有些概念不懂,所以看了《 基於H.264的視頻編碼處理技術與應用》這本書的前幾章了解了一下,做一個簡單的記錄。
顏色模型
我們平常能接觸到的是RGB和YUV。
RGB
RGB一般用在電視,顯示器等設備上,而非科學研究中,因為三種顏色分量放在一起表示,相互干擾,不便處理。而且會造成存儲空間的浪費。
YUV顏色空間:
其中Y代表亮度值,U和V表示色度,代表了顏色的色調Cr和飽和度Cb。
與RGB不同,其優點是亮度Y和色度UV是相互獨立的,占用頻寬小。如果只有Y信號,就是黑白彩色圖像。
因為人眼對顏色細節的分辨能力遠遠低於對亮度細節分辨能力,所以可以把幾個相鄰像素不同顏色值當做相同的顏色值來處理,以減少存儲容量,從而壓縮數據。按照不同的YCbCr的比率,可以分為YUV420、YUV422、YUV411和YUV444。
這篇博客對於他們的區別講的很好,主要差別在采樣率上,最后需要的存儲空間自然就不同了。
另外,YUV可以與RGB通過矩陣相互轉換。
編碼的基本原理
視頻編碼的目的是實現對視頻的壓縮,也可以稱作去除冗余。主要有以下幾種
分類 | 幀間冗余 | 幀內冗余 | 統計冗余 | 視覺冗余 |
---|---|---|---|---|
說明 | 低速運動物體 | 大片的藍天 | 根據概率分配碼字 | 人眼對某些信息不易感知 |
針對以上冗余解決辦法有運動補償、幀內預測、熵編碼、量化等。
I幀、P幀和B幀
I幀:幀內預測編碼幀,是獨立的,可以當做是單獨的一幅靜態畫面。視頻序列中的第一幀都是I幀,因為它是關鍵幀。
P幀:幀間預測編碼幀,與前一幀有關,需要用到本幀和前一幀的信息(可以是I幀,也可是P幀)。由於P幀對前面的P和I參考幀有着復雜的依耐性,因此對傳輸錯誤非常敏感。
B幀:雙向預測編碼幀,記錄的是本幀與前后幀的差別。B幀壓縮率高,但是對解碼性能要求較高。
一般視頻傳輸使用的是I幀和P幀,比如海康的某些相機編碼I幀間隔是50,中間有49幀P幀。
H264/AVC
一幀(frame)可以分為若干個片(slice),向下還可以細分為宏塊等,一圖勝千言:
上圖來自於這篇文章,它對一些H264的基本概念講的很通俗易懂。