讀書筆記——新一代高效視訊編碼H.265HEVC原理、標準與實現
1.視訊編碼標準
視訊編碼標準只是規定了編碼碼流的語法語義和解碼器,只要求視訊編碼後的碼流符合標準的語法結構,解碼器就可以根據碼流的語法語義進行正常解碼。因此,符合某個視訊編碼標準的編碼器是有很大自由度的,只要編碼後的碼流符合標準的規定即可。
碼流中的資料的基本單元是語法元素,每個語法元素由若干位元組成,它表徵了某個特定的物理意義(如預測型別、qp等)。視訊編碼標準的語法規定了各個語法元素的組織結構,語義闡述了語法元素的具體含義。視訊編碼標準規定了編碼後碼流的語法語義,也就闡述了從碼流中提取語法元素並進行解釋的方法,也就是解碼的過程
2.HEVC簡介
HEVC視訊編碼標準的編碼框架仍採用傳統的混合編碼框架,包括預測、變換、量化、熵編碼、環路濾波。但HEVC幾乎在每個模組都引入了新的編碼技術。增加了基於四叉樹的塊劃分、35中幀內預測、幀間merge、AMVP技術、可變尺寸DCT變換、cabac、環路濾波增加了SAO等。
幀內預測:去除空間相關性。利用同一幀中的重構塊預測當前塊。具有35中預測模式。
幀間預測:去除時間相關性。利用已編碼的幀作為當前幀的參考影象,來獲得當前幀各個塊的運動資訊。包括了分層B幀預測結構,單向、雙向預測。
變換量化:通過對殘差資料進行變換量化以去除頻域相關性,有失真壓縮。變換使影象從時域變換到頻域,將能量集中到低頻區域。量化減小影象編碼的動態範圍。變換和量化原理上屬於兩個獨立的過程,但HEVC中,這兩個過程相互結合,減少了計算複雜度。
去方塊濾波:基於塊的編碼中,重構影象會出現塊效應,去方塊濾波可以消弱塊效應,提高影象主觀質量和壓縮效率。
樣點自適應補償:SAO濾波處於方塊濾波之後,通過解析去方塊濾波後的畫素的統計特性,為畫素新增相應的偏移值,可以在一定程度上消弱振鈴效應,提高影象主觀質量和壓縮效率。
熵編碼:將編碼控制資料、量化變換系數、幀內預測資料、運動資料等編碼為二進位制碼流進行儲存或傳輸。HEVC採用CABAC進行熵編碼,引入並行處理框架,在速度、壓縮和記憶體佔用等方面有了大幅改善。
3.樹形編碼塊
HEVC引入樹形編碼單元CTU,其尺寸由編碼器指定(一般為64*64)。1個CTU=1個亮度CTB+2個色度CTB+相關語法元素。HEVC引入全新語法單元:CU、PU、TU。
PU定義了所有與預測相關的資訊。
在一個CU內,TU可跨越多個PU。CU支援大小為4*4~32*32,以四叉樹形勢遞迴劃分。下圖為64*64的CTU的各個CU中TU的劃分。對於一個2N*2N的CU,split_transform_flag決定是否劃分為4個N*N的TU。SPS中決定了TU的最大劃分深度。
4.slice
一幅影象可以分割成一個或多個slice,每個slice都是獨立的
slice可以分為:I slice(所有CU都使用幀內預測);P slice(每個PU幀內、單向預測);B slice(每個PU幀內、單向、雙向預測)。
一個slice可以分為若干SS(slice segment),包含一個獨立的SS(它涉及的句法元素由自身決定)和若干依賴SS(它涉及的句法元素由已解碼的獨立SS決定,依賴SS共享獨立SS的一些資訊),以獨立SS作為該slice的開始。一個SS包含整數個CTU,且這些CTU分佈在同一個NAL中。SS可以作為一個分組來傳送視訊編碼資料,一個slice內的SS可以相互參考。
5.Tile
一幅影象不僅可以劃分為若干個slice,還可以劃分為若干個tile,tile都是矩形。每個tile包含整數個CTU,其可以獨立解碼。劃分tile的目的是:增強並行處理能力時,不引入新的錯誤擴散。在同一幅影象中,可以同時存在:slice包含多個tile,tile包含多個slice。
HEVC中slice和tile都是為了獨立解碼,tile為矩形,slice為條狀形。每個slice/SS和tile至少滿足以下兩個條件之一:
1.一個slice/SS中所有CTU屬於同一個tile;
2.一個tile中所有CTU屬於同一個slice/SS
6.檔次、層、級別
檔次profile規定編碼器可用哪些編碼工具或演算法;級別level和層tier根據解碼端負載和儲存空間對關鍵引數進行限制(如最大采用頻率、最大影象尺寸、解析度等);
HEVC包含了三種檔次:main(最常用);main 10(同時支援8bit和10bit);main still picture(支援單個靜止影象)。限制條件如下:
1.只支援4:2:0的採用
2.使用了tile就不能使用wpp,tile解析度至少為256*64
3.main和main still picture支援8bit畫素深度;main10支援10bit,main still picture不支援幀間預測。
HEVC規定了2個層(main tier和high tier)和13個級別(4和4以上的level支援high tier)。符合某一tier/level的解碼器能夠解碼當前以及比當前tier/level低的所有碼流。
7.GOP和引數集
GOP分為:closed GOP和open GOP。每個closed GOP以IDR幀開始,各個GOP間相互獨立;open GOP中,第一個GOP以IDR幀開始,後續GOP以non-IDR幀開始,即可以參考前面的GOP。
NAL根據是否裝載視訊編碼資料非分為VCLU、non-VCLU。引數集(VPS、SPS、PPS)作為non-VCLU傳輸,保證了關鍵資料的高魯棒性。一個SS壓縮資料生成一個VCLU傳輸,最終視訊序列的碼流由一系列SS生成的多個VCLU和分割標示資料和引數集資料組成。分割標誌資料用於區分一個SS屬於哪幅影象。
8.merge、AMVP
空域和時域相鄰塊的mv有一定的相關性,HEVC在mv預測方面提出merge和AMVP技術。merge和AMVP技術通過空域和時域已編碼塊構建候選mv列表,選取最優的一個當作當前PU的預測mv。merge不存在MVD,AMVP存在MVD,且候選列表的構建方式和長度均不同。skip是merge的一種特殊模式,區別在於傳輸時無殘差。
merge:index + 殘差
AMVP:index + MVD + 殘差
skip:skip flag + index
skip=merge+cbf=0 (cbf=0時,殘差的變換系數全為0)
9.率失真優化
視訊編碼的目的是在保證一定視訊質量下儘可能減少編碼位元率,或在一定編碼位元率限制下儘量減小編碼失真。編碼器的主要工作是以某種策略選擇最優的編碼引數,以實現最優的編碼效能。基於率失真理論的編碼引數優化方法稱為率失真優化。
在允許的失真下,能夠把信源資訊壓縮到什麼程度?針對這個問題,夏農在1959年發表了“保真度準則下的離散信源編碼定理”,定義了資訊率失真函式R(D).
由夏農第一和第三定理可知:無失真信源壓縮的極限值是信源熵H(X),有失真壓縮的極限值是R(D)函式。第三定理是一個最優編碼方法存在定理,但實際的R(D)計算還存在大量問題:實際信源模型構建;失真的度量;R(D)條件極小值求解。
為了求解R(D)的極小值問題,使用拉格朗日優化法,通過引入拉格朗日因子λ,轉換為非約束性問題:J=D+λR
在約束性問題中,一般先給定R而不是λ,因此在優化前就要確定λ。λ獲得的方法:根據經驗選擇;根據QP得到。
RDO並不屬於視訊編碼標準的範疇,RDO是最主要的用於編碼引數選擇的優化技術。HEVC的RDO分為影象組層、片層、CTU層(確定最優的CU劃分)、CU層(確定最優的PU TU劃分)和PU層(確定最優的預測模式及引數)。
HM章的RDO分為:位元速率控制部分確定QP;拉格朗日優化確定每個CU除了QP外其他編碼引數。HM中RDO主要用於確定CU劃分模式、PU TU模式、PU預測引數等。
RDO更詳細的說明
10.位元速率控制
速率控制:通過選擇一系列編碼引數,使得視訊編碼後的位元率滿足所需要的速率限制,並使得編碼失真儘量小。屬於率失真優化範疇。重點是確定與速率相關的QP。
在實際的編碼標準中擁有獨立量化引數的最小單位通常是CU。由於採用幀間預測等技術,CU的率失真效能相互依賴,直接使用拉格朗日優化來確定QP複雜度極高,實際的速率控制分為:
1.位元分配:根據總的目標位元數確定每個CU的最優目標位元數。
2.確定QP:根據速率和QP的關係模型,為每個CU根據其目標位元數獨立確定其QP。
速率控制演算法通常無法保證實際編碼速率與目標速率完全一致,為了減小二者間的差別,通常在編碼器和通道間建立一個數據緩衝區——“緩衝(buffer)機制”。緩衝機制能使編碼速率更好的匹配通道速率,但會消耗儲存空間,會引入時延。緩衝區大小由最大時延、成本決定。
為了降低複雜度,通常採用分級的方式來簡化目標位元分配問題:GOP級、影象級、CU級。即為每個GOP確定目標位元數,然後根據每個GOP的目標位元數來確定其中每一幅影象的目標位元數,最後確定其中每個CU的目標位元數。
RC更具體的說明
相關推薦
讀書筆記——新一代高效視訊編碼H.265HEVC原理、標準與實現
1.視訊編碼標準 視訊編碼標準只是規定了編碼碼流的語法語義和解碼器,只要求視訊編碼後的碼流符合標準的語法結構,解碼器就可以根據碼流的語法語義進行正常解碼。因此,符合某個視訊編碼標準的編碼器是有很大自由度的,只要編碼後的碼流符合標準的規定即可。
【讀書精華分享】《分散式實時處理系統 原理、架構與實現》盧譽聲著/2016年
【分享說明】: 我會花很多時間或淺或深的研讀一本書,然後總結一些提煉出來的精華,用簡短的語言,讓其他人能夠用很少的時間大致知道這本書能帶給自己的價值,如果適用自己,鼓勵買一本正本實體書細讀
『TensorFlow』讀書筆記_降噪自編碼器
沒有 tutorials oftp transfer 初始化 hot nis gauss ant 『TensorFlow』降噪自編碼器設計 之前學習過的代碼,又敲了一遍,新的收獲也還是有的,因為這次註釋寫的比較詳盡,所以再次記錄一下,具體的相關知識查閱之前寫的文章即可(見
《編碼-隱匿在計算機背後的語言》 —— 讀書筆記(一):編碼
分享圖片 信號 組合 大小寫 不變 缺點 改變 有著 書寫 1. 至親密友 1) 什麽是編碼?編碼是一種用來在機器與人之間傳遞信息的方式,編碼就是交流。 2)莫爾斯電碼,只有點和劃(國際求救信號:SOS ...---...),缺點是不區分大小寫。
讀書筆記之《高效程式設計師的45個習慣----敏捷開發之道》 摘錄
讀書筆記之《高效程式設計師的45個習慣----敏捷開發之道》摘錄 此次原創的意思是指這個文章中的內容是由筆者從《高效程式設計師的45個習慣----敏捷開發之道》書中摘錄,而不是別人摘錄的,但是內容並非筆者原創,所摘錄的內容的
4K視訊編碼 H 264 H 265 VP9誰主沉浮
4K視訊編碼:H.264、H.265、VP9誰主沉浮視訊編碼、解碼以及視訊格式的內容可謂浩如煙海,隨便拿出一部分內容都可以寫一本厚厚的書,今天我們也不可能一一給各個視訊編碼做傳,簡單來說說主要的視訊編碼的故事吧。江湖上流傳的視訊編碼標準不下數十種,每種標準都可以說是廠商與各利益
讀書筆記《如何高效學習》
中國大學生的特點是上課隨便聽、考前瘋狂記、半年忘光光。如果學習的知識不能應用到生活中,那麼學習這些知識將變得毫無意義。本書的作者是個學習狂人,12個月內自學完成4年麻省理工學院計算機學科的33門課程,我們一起來學習下,他是怎麼學習的。
關於LED電視機視訊編碼H.264,MPEG4,MPEG2能支援哪些格式的視訊檔案
MPEG4封裝格式能支援.MPG、.3GP、.MP4等視訊檔案格式的視訊。 今天買了一臺很普通的LED電視機,當前電視機基本都提供USB介面,以便播放U盤或者行動硬碟的視訊資源,可是在問賣家電視機支援什麼格式的視訊檔案時,他告訴我支援H.264,MPEG4,M
讀書筆記---《如何高效學習》
學習是需要方法的,特別是在當今資訊爆炸的時代,如何高效的處理資訊、有機的整合知識,已經成為學習的關鍵。如果只用一種方式瞭解某樣事物,你就不會真正瞭解她,瞭解事物真正含義的祕密取決於如何將其
[讀書筆記]H.265/HEVC:原理,標準與實現
第一章 1影象是視訊訊號的基本單位 幀 畫素(Pixel) 視訊序列(三維矩陣): N*M:空間域; 時間域 幀率(fps):平滑連續需要25-30以上 2原始視訊資料量巨大,視訊編碼即視訊壓縮,其目的是儘可能去除視訊資料中的多餘成分.減少編碼或者編碼後的資料量 資
音視訊前沿:新一代 AV1 視訊標準究竟是怎樣一種存在?
AV1是開放媒體聯盟Alliance for Open Media (AOM) 開發的第一代視訊編碼標準,自推出以來獲得了產業界巨大關注和支援。騰訊多媒體實驗室也加入進來和其他公司團隊一同積極推動AV1編碼器的優化和落地,為客戶提供高效能和高效率的雲端編碼服務。本文是對騰訊多媒體實驗室專家研究員趙欣老師在「
【讀書筆記】計算機網絡1章:課程介紹、協議、分層
視頻 打印 http dns 物理層 size cli 電子商務 ann 改變 這是我在Coursera上的學習筆記。課程名稱為《Computer Networks》。出自University of Washington。 因為計算機網絡才誕生不久
《你不知道的javascript上卷》讀書筆記(kyle simpson 著,趙望野、梁譯)
def javascrip arr fin type fine sim imp func 一、關於this篇: 1.this實際上是在函數被調用時發生的綁定,它指向什麽完全取決於函數在哪裏被調用 2.this優先級:new>顯示綁定>隱式綁定>默認綁定。
讀書筆記-【從Paxos到ZooKeeper分散式一致性原理與實踐】 第七章 Zk技術內幕
系統模型 資料模型 ZNode是ZK中資料的最小單元,每個ZNode上都可以儲存資料,同時還可以掛載子節點,形成一個層次化的名稱空間——樹. 樹 Zk中每個資料節點都稱為ZNode,所有ZNode形成樹形結構。 事務ID 事務是指ZK改變
資料結構(C語言)讀書筆記6:棧的應用之括號匹配的C程式碼實現
括號匹配的演算法思想: 初始化一個空棧,掃描表示式,依次讀入字元,知道掃描完或者出現錯誤匹配。對於讀入的每個字元,分以下情況處理: (1)、如果是‘’(“”或“【”,將其壓入棧。 (2)、如果是“)”,則根據當前棧頂元素的值分情況考慮。若棧頂元素是“(”,則匹配成功,否則為
《Java核心技術》第10版讀書筆記之Chap5(2)——方法呼叫過程、final、型別轉換、abstract與訪問識別符號
方法呼叫過程 假設在原始碼中有這樣一行: manager.setBonus(2300); 下面來看看javac編譯器是如何處理的: 檢查根據物件型別和函式名稱,在該類成員方法及其父類中有呼叫權的成員方法中尋找到所有名字匹配的方法。在本例中,mana
【java讀書筆記】——Collection集合之六大介面(Collection、Set、List、Map、Iterator和Comparable)
兩個月之前準備軟考時,簡單的從理論上總結了最常用的資料結構和演算法,比如:線性表,連結串列,圖。在進行java開發時,jdk為我們提供了一系列相應的類來實現基本的資料結構。jdk所提供的
Python下opencv使用筆記(一)(圖像簡單讀取、顯示與儲存)
操作 灰度圖 清晰 ren from tty ims 圖像 type 寫在之前 從去年開始關註python這個軟件,途中間間斷斷看與學過一些關於python的東西。感覺python確實是一個簡單優美、easy上手的腳本編程語言,眾多的第三方庫使得py
【隨堂筆記】unity中socket的用法(二、伺服器與客戶端之間簡單的資料傳遞)
主要實現伺服器與客戶端之間簡單的資料傳輸(單次) 伺服器程式碼 using System; using System.Net; using System.Net.Sockets; namespace SeverSocket { class Program {
web前端學習(三)css學習筆記部分(5)-- CSS動畫--頁面特效、HTML與CSS3簡單頁面效果實例
key cti 樣式 描述 ans 轉換方法 動畫效果 ansi order CSS動畫--頁面特效部分內容目前僅僅觀看了解內容,記錄簡單筆記,之後工作了進行內容的補充 7. CSS動畫--頁面特效 7.1 2D、3D轉換 7.1.1 通過CSS3轉換,我們能夠對