H.264/AVC視頻編解碼技術詳解系列筆記 是對 H.264/AVC視頻編解碼技術詳解 課程的學習
文章目錄
- 人與世界的交互
- 視頻信號的表示方法
- 視頻壓縮編碼
- 視頻信息為什么可以被壓縮?
- 視頻壓縮編碼的分類:
- 視頻壓縮編碼的基本技術
人與世界的交互
從遠古時代開始,人類就在不斷為適應環境、改造環境而艱苦斗爭。
人類通過嗅覺、觸覺、聽覺、視覺等來適應社會,而視覺尤為重要,后來人們希望用更直觀的形式記錄所看到的東西,因此有了象形文字到現代文字的演變,以及壁畫到繪畫、照片、視頻的演變。
視頻通過每一幀的圖像表達信息,視頻包含的音頻可以提供大量信息,視頻通過圖像的運動、場景的變換提供信息,視頻信息是最接近人的直觀體驗的信息表達方式,是最高效的信息記錄方式。
視頻信號的表示方法
在真實的世界中,視頻影像處理的是模擬信號,為了適應現在的計算機,模擬的信號必須轉換成數字格式,才能進行下一步的傳輸和處理。
在數字格式的視頻信號中,組成視頻的基本結構是一幀幀連續而關聯的圖像。組成每一幀圖像的基本結構是成平面緊密排列的像素。每一個像素代表圖像中一個彩色的點,由顏色的三基色分別取不同的分量構成:
R:紅色分量
G:綠色分量
B:藍色分量
RGB顏色空間:
- RGB顏色空間常用于顯示器系統
- RGB顏色空間由紅綠藍三基色構成,每一個像素至少有三個顏色分量構成
- RGB三個分量每一個分量以1字節表示,則可以表示成256*256*256種不同的顏色,1字節=8bit,2^8=256
- 常見的圖像格式如位圖(bmp)格式以RGB形式保存
YUV顏色空間
- 實際的編解碼等視頻處理中,YUV格式比RGB格式更為常用
- YUV格式中,一個像素分別用亮度和色度分量表示,每一個像素由一個亮度分類Y和兩個色度分量U、V組成
- YUV格式中的亮度與色度分量可以與表示的像素一一對應,也可以對色度分量的數據進行采樣,即色度分量少于亮度分量,這樣處理的原因是因為人的感官對亮度信息的敏感度遠高于對色度信息的敏感度
- YUV格式的優勢是,可以減少色度分量的采樣率,這樣既可以不對圖像造成太大的影響,又可以減少數據的存儲量,還可以兼容黑白和彩色的顯示設備。顯示設備是黑白:將色度分量去掉,只需要亮度分量即可。
- YUV圖像的常見色度采樣方式有:4:4:4,4:2:2,4:2:0(最常用)
4:4:4
4:2:2:即每兩個像素共用一個U分量一個V分量
4:2:0:每四個像素只對應了一個U分量一個V分量
視頻壓縮編碼
編碼:將信息按照一定規則使用某種形式的碼流表示與傳輸
常需要編碼的信息:文字、語音、視頻、控制信息等
視頻編碼的主要目的:數據壓縮
- 動態圖像的RGB/YUV表示,數據量極大
- 存儲空間和傳輸帶寬完全無法滿足像素格式視頻保存傳輸的要求
圖像的每個像素的三個顏色分量:RGB,每個顏色分量以8bit保存,每像素至少需要3bytes
分辨率1280*720的一幀圖像:3byte*1280*720b≈2.64Mb
25frame/sec的視頻,所需碼率(碼率:視頻碼率就是數據傳輸時單位時間傳送的數據位數,一般單位是kbps即千位每秒):1280*720*8*3*25=553Mb/sec,該碼率已經超過傳輸帶寬的極限了,如果是分辨率更大的視頻,則其碼率會更大
因此,我們需要對視頻進行壓縮。
視頻信息為什么可以被壓縮?
- 時間冗余:視頻相鄰的兩幀之間內容相似,存在運動關系
- 空間冗余:視頻的某一幀內部的相鄰像素存在相似性
- 編碼冗余:視頻中不同數據出現的概率不同
- 視覺冗余:觀眾的視覺系統對視頻中不同的部分敏感度不同
視頻壓縮編碼的分類:
- 基于波形的編碼【方法更主流】
- 特點:編碼的數據針對每一幀圖像包含的像素值,即采樣像素的波形
- 方法:利用像素之間在時間和空間上的相關性,采用預測編碼和變換編碼結合的基于塊的混合編碼方法
- 代表:MPEG-1,MPEG-2,H.264,H.265等
- 基于內容的編碼【太復雜】
- 特點:將視頻幀分成對應不同物體的區域,分別對其編碼
- 方法:針對不同物體的形狀、運動和紋理進行編碼
- 代表:MPEG-4
視頻壓縮編碼的基本技術
- 預測編碼:傳輸預測像素值與實際像素值之差,利用時間或空間相鄰像素之間較強的相關性
- 幀內預測:預測值與實際值位于同一幀內,用于消除圖像的空間冗余
- 幀間預測:實際值位于當前幀,預測值位于參考幀,用于消除圖像的時間冗余,相比幀內預測壓縮率更高,由于幀間預測參考了其他幀的數據,因此,不能獨立解碼,所以只能在獲取參考幀數據之后,才能重建當前幀
- 變換編碼:對視頻造成有限的可以容忍的損失來獲取相對更高的編碼效率,造成信息損失的部分,就在其變換量化的部分,在進行量化之前,先將像素由空間域變換到頻域,針對變換系數進行編碼
- 可用于視頻變換編碼的正交變換:DCT變換、K-L變換
- 熵編碼:熵編碼用于消除視頻信息中的冗余,由于信源中每一個符號出現的概率并不一致,導致使用同一長度的編碼表示符號可能會造成浪費,通過熵編碼,利用信源的統計特性進行壓縮編碼,可消除由于符號概率導致的冗余
- 常用方法:變長編碼、算數編碼