參考學習資料:https://blog.csdn.net/qq_28258885/article/details/116192244
視頻編碼基礎
圖像
像素
-
在消費級別,每個像素使用8bit來表示–0~255,其中,0:黑色;255:白色
-
在工業(yè)級別,使用10bit來表達一個像素–0~1023,精度高,顏色細膩,細節(jié)更豐富
-
事實是:幾乎沒有硬件芯片、移動設備、軟件支持10bit。
顏色深度
存儲顏色的強度,需要占用一定大小的數(shù)據(jù)空間,這個大小被稱為顏色深度。假如每個顏色的強度占用 8 bit(取值范圍為 0 到 255,即 2 8 2^8 28),那么顏色深度就是 24(8*3)bit(因為RGB三個顏色),我們還可以推導出我們可以使用 2 24 2^{24} 224種不同的顏色。
分辨率
即一個平面內像素的數(shù)量。通常表示成寬*高
視頻行業(yè)常見的分辨率,我們比較熟悉的360P (640x360)、720P (1280x720)、1080P (1920x1080)、4K (3840x2160)、8K (7680x4320)
我發(fā)現(xiàn)寬都是高的1.77777倍
視頻
幀率
幀率(FRames rate)= 幀數(shù)(Frames)/時間(Time)
若單位時間為秒,則等同于 FPS (每秒幀數(shù) Frames Per Second)。
碼率、帶寬、體積
碼率:每秒鐘的數(shù)據(jù)量
比特率:以bit表示數(shù)據(jù)量的碼率,bps(bits per second)
比特率 = 寬 * 高 * 顏色深度 * 幀每秒
帶寬:有時指帶寬能力,有時指使用了多少帶寬,也即達到了多少碼率,后一種情況帶寬和碼率同義
體積和容量:體積一般指文件大?。纯偟臄?shù)據(jù)量,區(qū)別于碼率表示每秒數(shù)據(jù)量)。容量一般指能力
總結:
- 碼率和帶寬針對傳輸,體積和容量針對存儲。
- 對于視頻編碼,節(jié)省碼率/帶寬/體積,意思差不多
為什么要壓縮視頻
- 以一集FHD《生活大爆炸》為例:
1080p(1920x1080) YUV 4:2:0的圖像格式,每秒拍攝24幀,視頻長度為22分鐘
-
1 pixel => YUV 4:2:0 @1.5 bytes (1 + ? + ? ) 一個像素
-
1 pictrue => 1920x1080x1.5 bytes = 3MB 一個圖片
-
1 second @ 24fps => 24x3M = 72MB => 576M bps
傳輸帶寬576M bps 不壓縮,不可能在線實時收看
所以要壓縮,消除冗余
為此,我們可以
利用視覺特性:和區(qū)分顏色相比,我們區(qū)分亮度要更加敏銳。
時間上的重復:一段視頻包含很多只有一點小小改變的圖像。
圖像內的重復:每一幀也包含很多顏色相同或相似的區(qū)域。
我們的眼睛對亮度比對顏色更敏感
幀類型
在介紹去除冗余的方法前,需要了解幀類型。
I幀(幀內,關鍵幀)
P幀(預測)
P 幀利用了一個事實:當前的畫面幾乎總能使用之前的一幀進行渲染。
實際情況中,一般使用一個I幀多個P幀。但是P幀不能太多,因為離上一個I幀越遠,預測難度就越大,丟失的信息也就越多。
B幀(雙向預測)
引用前面和后面的幀去做更好的壓縮
消除冗余的方法
時間冗余(幀間預測)
我們可以做個減法,我們簡單地用 0 號幀減去 1 號幀,得到殘差,這樣我們就只需要對殘差進行編碼。
但我們有一個更好的方法來節(jié)省數(shù)據(jù)量。
首先,我們將0 號幀
視為一個個分塊的集合,然后我們將嘗試將 幀 1
和 幀 0
上的塊相匹配。我們可以將這看作是運動預測。
運動補償是一種描述相鄰幀(相鄰在這里表示在編碼關系上相鄰,在播放順序上兩幀未必相鄰)差別的方法
具體來說是描述前面一幀(相鄰在這里表示在編碼關系上的前面,在播放順序上未必在當前幀前面)的每個小塊怎樣移動到當前幀中的某個位置去。
我們預計那個球會從 x=0, y=25
移動到 x=6, y=26
,x 和 y 的值就是運動向量。進一步節(jié)省數(shù)據(jù)量的方法是,只編碼這兩者運動向量的差。所以,最終運動向量就是 x=6 (6-0), y=1 (26-25)
。
實際情況下,這個球會被切成 n 個分區(qū),但處理過程是相同的。
幀上的物體以三維方式移動,當球移動到背景時會變小。當我們嘗試尋找匹配的塊,找不到完美匹配的塊是正常的。這是一張運動預測與實際值相疊加的圖片。
但我們能看到當我們使用運動預測時,編碼的數(shù)據(jù)量少于使用簡單的殘差幀技術
空間冗余(幀內預測)
如果我們分析一個視頻里的每一幀,我們會看到有許多區(qū)域是相互關聯(lián)的
視頻編碼器關鍵技術
是什么?就是用于壓縮或解壓數(shù)字視頻的軟件或硬件
1.分區(qū)
有許多原因,比如,當我們分割圖片時,我們可以更精確的處理預測,在微小移動的部分使用較小的分區(qū),而在靜態(tài)背景上使用較大的分區(qū)。
通常,編解碼器將這些分區(qū)組織成切片(slices )或條帶(tiles),宏(或編碼樹單元)和許多子分區(qū)。
這些分區(qū)的最大大小有所不同,HEVC 設置成 64x64,而 AVC 使用 16x16,但子分區(qū)可以達到 4x4 的大小。
2.預測
一旦我們有了分區(qū),就可以在它們之上做出預測。
- 對于幀間預測,我們需要發(fā)送運動向量和殘差
- 對于幀內預測,我們需要發(fā)送預測方向和殘差
3.轉換
4.量化
有損的
5.熵編碼
在我們量化數(shù)據(jù)(圖像塊/切片/幀)之后,我們仍然可以以無損的方式來壓縮它。有許多方法(算法)可用來壓縮數(shù)據(jù)。
熵編碼技術是視頻編碼技術中基礎性關鍵技術,在經(jīng)典編碼框架中處于系統(tǒng)末端,負責對編碼過程中的變換系數(shù)、運動矢量等信息進行熵編碼,并完成最終編碼碼流的組織。
熵編碼目標是利用信息熵原理進行數(shù)據(jù)的最終壓縮,去除信源符號在信息表達上的冗余。
編碼器與解碼器
小結
編碼器:時間復雜度比解碼器高很多,編碼器對每一塊圖像內容要嘗試很多種工具,挑選更好的工具
解碼器:根據(jù)標準語法語義解析碼流,生成一塊內容只需要執(zhí)行指定的工具,沒有挑選過程,不用執(zhí)行多種工具
解碼器需要支持標準規(guī)定的所有工具;而編碼器不必
那編碼和解碼為什么能匹配工作?
因為編碼和解碼用同一種算法
那解碼器怎么知道編碼器用了什么算法?
有"標準"規(guī)定,在碼流里面比如說開頭有110110,解碼器解析到這一串就知道用的是什么算法
視頻編碼標準
ITU-T和MPEG,后來他們一起合作,所以命名的時候就包含兩個組織;例如H.264/MPEG-4 AVC,H.264代表是ITU-T,MPEG-4 AVC代表MPEG
YUV模型
有一種模型將亮度(LUMA)和色度(cb,cr)分離開,它被稱為 YUV模型。
我們的眼睛對亮度比對顏色更敏感
色度子采樣
一旦我們能從圖像中分離出亮度和色度,我們就可以利用人類視覺系統(tǒng)對亮度比色度更敏感的特點,選擇性地剔除信息。色度子采樣是一種編碼圖像時,使色度分辨率低于亮度的技術。
四個亮度像素共享一個色度像素
現(xiàn)代編解碼器中使用的常用方案是: 4:4:4 (沒有子采樣), 4:2:2, 4:2:0,
第二個參數(shù)代表第一行分成幾塊
第三個參數(shù)代表第二行分成幾塊文章來源:http://www.zghlxwxcb.cn/news/detail-649835.html
如果我們使用 YCbCr 4:2:0 我們能減少一半的大小文章來源地址http://www.zghlxwxcb.cn/news/detail-649835.html
到了這里,關于視頻編碼及圖像基礎知識的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!