視頻編解碼基礎

文章目錄

    • 前戲
      • 編解碼技術流程
      • 主流視頻編碼標準
      • 視頻傳輸面臨的問題
      • 視頻傳輸差錯控制
      • 視頻傳輸Qos質量保證參數
      • 人類視覺系統HVS 以及相應編碼措施
    • 正餐
      • 編碼層次與碼流結構
      • PB幀編碼
      • IBBP序列編碼結構
      • 圖像編碼結構
      • 條帶編碼結構
      • 宏塊編碼結構
      • 塊編碼結構
      • 預測技術
      • 碼率控制
  • 實例H264

前戲

編解碼技術流程

1、預測:

去除空間冗余、時間冗余;

分為幀內預測、幀間預測

2、變換:

從時域變換到頻域,去除相鄰數據之間的相關性,去除空間冗余,分為:DCT余弦變換、小波變換

3、量化:

去除視覺冗余,通過降低圖像質量提高壓縮比

4、掃描:

將二位變換量化數據重新組織成一維的數據序列

4、熵編碼:

去除編碼冗余:變長編碼,算術編碼,霍夫曼編碼

霍夫曼編碼可以參考一下:

編解碼流程如下:

在這里插入圖片描述

主流視頻編碼標準

  • MPEG-2
  • MPEG-4 Simple Profile
  • H.264/AVC
  • AVS
  • VC-1

視頻傳輸面臨的問題

傳輸系統不可靠:

1、帶寬限制

2、信號衰減

3、噪聲干擾

4、傳輸延遲

傳輸會出現的問題:

1、不能解碼出正確的視頻

2、視頻播放延遲

視頻傳輸差錯控制

差錯控制解決了視頻傳輸過程中由于數據丟失or延遲導致的問題。

主要技術有:

1、信道編碼差錯控制技術

2、編碼器差錯恢復

3、解碼器差錯隱藏

視頻傳輸Qos質量保證參數

1、數據包的端到端延遲

2、帶寬:bit/s

3、數據包的流失率

4、數據包的延遲時間的波動

人類視覺系統HVS 以及相應編碼措施

HVS的構成:眼鏡、神經、大腦

HVS的特點:

1、對高頻信息不敏感

2、對高對比度更敏感

3、對亮度信息比色度信息更敏感

4、對運動信息更敏感

所以數字視頻系統的設計應該考慮:

1、丟棄高頻信息,只編碼低頻

2、提高邊緣信息的主觀質量

3、降低色度的解析度

4、對ROI區域進行特殊處理,如人臉部分

正餐

編碼層次與碼流結構

1、序列

2、圖像組

3、圖像

4、條帶

5、宏塊

6、塊

在這里插入圖片描述

PB幀編碼

當前幀:將要編碼的圖像

參考幀:預測塊所在的圖像

前向預測幀(P幀)

在這里插入圖片描述

雙向預測幀(B幀)

在這里插入圖片描述

IBBP序列編碼結構

序列:指的是一段連續編碼的并具有相同參數的視頻圖像

序列起始碼:指的是轉悠的一段比特串,表示一個序列的壓縮數據的開始。如MPEG-2的序列起始碼為16進制數000001(B3)

序列頭:指的是記錄序列的信息,包含檔次(Profile)、級別(Level)、寬度、高度、是否逐行序列、幀率等內容

序列結束碼:指的是一段專有的比特串,標識該序列的壓縮數據的結束。如MPEG-2的序列結束碼為16進制數000001(B7)

一段視頻將有一段序列幀組成

在這里插入圖片描述

圖像編碼結構

包括了:圖像、圖像起始碼、圖像頭

圖像起始碼:一段比特串,標識一個圖像的壓縮數據的開始,如MPEG-2的圖像起始碼為16進制數000000(00)

圖像頭:記錄圖像信息,包含圖像編碼類型、圖像距離、圖像編碼結構、圖像是否為逐行掃描

條帶編碼結構

條帶:多個宏塊的組合

條帶起始碼:專有的一段比特串,標識一個條帶的壓縮數據的開始。如MPEG-2的條帶起始碼為16進制數000001(0~AF)

條帶頭:記錄當前的條帶相關信息,如:條帶位置、條帶量化參數、宏塊編碼技術標識

一個圖像會被劃分為各個條帶

在這里插入圖片描述

宏塊編碼結構

宏塊:16*16的像素塊

宏塊內容:宏塊的編碼類型、編碼模式、參考幀索引、運動矢量信息、宏塊編碼系數等

塊編碼結構

1、88或者44的變換量化系數的熵編碼數據

2、CBP(code block pattern):用來指示塊的變換量化系數是否全為零。

對于YUV(4:2:0)編碼,CBP通常為6bit長,每一個bit對應了一個塊,當某一塊的變換量化系數全為0,其對應的比特位為0,否則為1

3、每個塊的變換量化系數的最后用一個EOB(end of block)符號來標識

預測技術

幀內預測,即空間預測,利用當前編碼塊周圍已經重構出來的像素預測當前塊

圖像編碼:I幀

幀間預測,即時間預測,利用時間上相鄰圖像的相關性來預測

包括:運動估計(Motion Estimation,ME),運動補償(Motion Compensation,MC)

圖像編碼:前向預測編碼圖像(P幀)、雙向預測編碼圖像(B幀)

在這里插入圖片描述

碼率控制

受到緩沖區、帶寬限制,編碼碼率不能無限制增長,需要通過碼率控制將編碼碼流控制在目標范圍內。

一般調整量化參數的手段控制碼率:

幀級控制

條帶級控制

宏塊控制

需要考慮的問題:

1、防止碼流有較大波動,導致緩沖區發生溢出

2、同時保持緩沖區盡可能充滿,讓圖像質量盡可能好且穩定

CBR(constant bit rate):比特率穩定,但圖像質量變化大。

VBR(variable bit rate):比特率波動大,但是圖像質量穩定

碼率控制算法分為碼率控制和分配,碼率控制屬于非標準技術,編碼端有,解碼端沒有。

實例H264

H.264是在MPEG-4技術的基礎之上建立起來的,其編解碼流程主要包括5個部分:幀間和幀內預測、變換和反變換、量化和反量化、環路濾波、熵編碼。

H.264與以前的國際標準如H.263和MPEG-4相比,最大的優勢體現在以下四個方面:

  • 幀內預測編碼

幀內編碼用來縮減圖像的空間冗余。為了提高H.264幀內編碼的效率,在給定幀中充分利用相鄰宏塊的空間相關性,相鄰的宏塊通常含有相似的屬性。因此,在對一給定宏塊編碼時,首先可以根據周圍的宏塊預測(典型的是根據左上角的宏塊,因為此宏塊已經被編碼處理),然后對預測值與實際值的差值進行編碼,這樣,相對于直接對該幀編碼而言,可以大大減小碼率。

  • 幀間預測編碼

幀間預測編碼利用連續幀中的時間冗余來進行運動估計和補償。H.264的運動補償支持以往的視頻編碼標準中的大部分關鍵特性,而且靈活地添加了更多的功能,除了支持P幀、B幀外,H.264還支持一種新的流間傳送幀——SP幀,如圖3所示。碼流中包含SP幀后,能在有類似內容但有不同碼率的碼流之間快速切換,同時支持隨機接入和快速回放模式。

  • 整數變換

在變換方面,H.264使用了基于4×4像素塊的類似于DCT的變換,但使用的是以整數為基礎的空間變換,不存在反變換,因為取舍而存在誤差的問題。與浮點運算相比,整數DCT變換會引起一些額外的誤差,但因為DCT變換后的量化也存在量化誤差,與之相比,整數DCT變換引起的量化誤差影響并不大。此外,整數DCT變換還具有減少運算量和復雜度,有利于向定點DSP移植的優點。

  • 量化

H.264中可選32種不同的量化步長,這與H.263中有31個量化步長很相似,但是在H.264中,步長是以12.5%的復合率遞進的,而不是一個固定常數。

在H.264中,變換系數的讀出方式也有兩種:之字形(Zigzag)掃描和雙掃描。大多數情況下使用簡單的之字形掃描;雙掃描僅用于使用較小量化級的塊內,有助于提高編碼效率。

  • 熵編碼

視頻編碼處理的最后一步就是熵編碼,在H.264中采用了兩種不同的熵編碼方法:通用可變長編碼(UVLC)和基于文本的自適應二進制算術編碼(CABAC)。

在H.263等標準中,根據要編碼的數據類型如變換系數、運動矢量等,采用不同的VLC碼表。H.264中的UVLC碼表提供了一個簡單的方法,不管符號表述什么類型的數據,都使用統一變字長編碼表。其優點是簡單;缺點是單一的碼表是從概率統計分布模型得出的,沒有考慮編碼符號間的相關性,在中高碼率時效果不是很好。

因此,H.264中還提供了可選的CABAC方法。算術編碼使編碼和解碼兩邊都能使用所有句法元素(變換系數、運動矢量)的概率模型。為了提高算術編碼的效率,通過內容建模的過程,使基本概率模型能適應隨視頻幀而改變的統計特性。內容建模提供了編碼符號的條件概率估計,利用合適的內容模型,存在于符號間的相關性可以通過選擇目前要編碼符號鄰近的已編碼符號的相應概率模型來去除,不同的句法元素通常保持不同的模型。

其優勢總結如下:

1.低碼率(Low Bit Rate):

和MPEG2和MPEG4 ASP等壓縮技術相比,在同等圖像質量下,采用H.264技術壓縮后的數據量只有MPEG2的1/8,MPEG4的1/3。

2.高質量的圖象:

H.264能提供連續、流暢的高質量圖象(DVD質量)。

3.容錯能力強:

H.264提供了解決在不穩定網絡環境下容易發生的丟包等錯誤的必要工具。

4.網絡適應性強:

H.264提供了網絡抽象層(Network Abstraction Layer),使得H.264的文件能容易地在不同網絡上傳輸(例如互聯網,CDMA,GPRS,WCDMA,CDMA2000等)。

H.264最大的優勢是具有很高的數據壓縮比率,在同等圖像質量的條件下,H.264的壓縮比是MPEG-2的2倍以上,是MPEG-4的1.5~2倍。舉個例子,原始文件的大小如果為88GB,采用MPEG-2壓縮標準壓縮后變成3.5GB,壓縮比為25∶1,而采用H.264壓縮標準壓縮后變為879MB,從88GB到879MB,H.264的壓縮比達到驚人的102∶1。低碼率(Low Bit Rate)對H.264的高的壓縮比起到了重要的作用,和MPEG-2和MPEG-4 ASP等壓縮技術相比,H.264壓縮技術將大大節省用戶的下載時間和數據流量收費。尤其值得一提的是,H.264在具有高壓縮比的同時還擁有高質量流暢的圖像,正因為如此,經過H.264壓縮的視頻數據,在網絡傳輸過程中所需要的帶寬更少,也更加經濟。

H.264 草案中包含了用于差錯消除的工具,便于壓縮視頻在誤碼、丟包多發環境中傳輸,如移動信道或IP信道中傳輸的健壯性。

為了抵御傳輸差錯,H.264視頻流中的時間同步可以通過采用幀內圖像刷新來完成,空間同步由條結構編碼(slice structured coding)來支持。同時為了便于誤碼以后的再同步,在一幅圖像的視頻數據中還提供了一定的重同步點。另外,幀內宏塊刷新和多參考宏塊允許編碼器在決定宏塊模式的時候不僅可以考慮編碼效率,還可以考慮傳輸信道的特性。

除了利用量化步長的改變來適應信道碼率外,在H.264中,還常利用數據分割的方法來應對信道碼率的變化。從總體上說,數據分割的概念就是在編碼器中生成具有不同優先級的視頻數據以支持網絡中的服務質量QoS。例如采用基于語法的數據分割(syntax-based data partitioning)方法,將每幀數據的按其重要性分為幾部分,這樣允許在緩沖區溢出時丟棄不太重要的信息。還可以采用類似的時間數據分割(temporal data partitioning)方法,通過在P幀和B幀中使用多個參考幀來完成。

在無線通信的應用中可以通過改變每一幀的量化精度或空間/時間分辨率來支持無線信道的大比特率變化。可是,在多播的情況下,要求編碼器對變化的各種比特率進行響應是不可能的。因此,不同于MPEG-4中采用的精細分級編碼FGS(Fine Granular Scalability)的方法(效率比較低),H.264采用流切換的SP幀來代替分級編碼。

H.264已被廣泛應用于實時視頻應用中,相比以往的方案使得在同等速率下,H.264能夠比H.263減小50%的碼率。也就是說,用戶即使是只利用 384kbit/s的帶寬,就可以享受H.263下高達 768kbit/s的高質量視頻服務。H.264 不但有助于節省龐大開支,還可以提高資源的使用效率,同時令達到商業質量的實時視頻服務擁有更多的潛在客戶。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/376554.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376554.shtml
英文地址,請注明出處:http://en.pswp.cn/news/376554.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

XShell 屏幕鎖定的恢復方法(Ctrl+Q)

操作XShell過程中很多時間大家會習慣性的按CtrlS進行保存. CtrlS在XShell的作用是屏幕鎖定,很多朋友會無法操作,會直接把窗口關閉。 解決方法: 快捷鍵 CtrlQ 即能完成解鎖!轉載于:https://www.cnblogs.com/liangle/p/3173475.html

adb端口被占用

程序不能執行,kill掉任務管理器里面adb服務,重新連接設備仍然有錯 查到可能是adb端口被占用 查看adb用的是哪個端口:C:\Users\wanglin>adb nodaemon server 查看誰占用了這個端口:C:\Users\wanglin>netstat -ano | findstr …

實時語音通訊丟包補償技術

文章目錄基于發送端丟包補償技術原理與媒體無關的前向差錯糾正媒體相關前向差錯糾正交織技術基于接受端丟包補償技術基于插入方法基于插值方法基于重構的方法應用建議非交互式交互式拓展閱讀參考丟包補償技術可以分為兩類:基于發送端補償、基于接受端補償 基于發送…

取得裝置可以顯示頁面的寬度

利用html中的div元素取得<div id"divGetWidth" width100%></div>Jquery:var width$(#divGetWidth).width(); //獲取元素寬度 Javascript:var objdocument.getElementById(divGetWidth);var width obj.offsetWidth轉載于:https://www.cnblogs.…

Xcode添加靜態庫以及編譯選項配置常見問題

本文轉載至 http://www.cnblogs.com/Quains/archive/2013/08/22/3276425.html 一,Xcode編譯出現Link錯誤,出現"duplicate symbols for architecture i386 clang"提示.問題:鏈接時,項目有重名文件.解決:根據錯誤提示,做如下檢查:1.Taraget->Build Settings->Li…

關于并發概念的一些筆記

目錄1、基于鎖的并發數據結構1、并發計數器2、懶惰計數器3、并發鏈表4、并發隊列5、并發散列表總結2、條件變量使用&#xff08;POSIX&#xff09;生產者/消費者 &#xff08;有界緩沖區問題&#xff09;覆蓋條件擴展3、信號量使用二值信號量&#xff08;鎖&#xff09;0值信號…

MYSQL常見出錯代碼 mysql error number

1016錯誤&#xff1a;文件無法打開&#xff0c;使用后臺修復或者使用phpmyadmin進行修復。1044錯誤&#xff1a;數據庫用戶權限不足&#xff0c;請聯系空間商解決1045錯誤&#xff1a;數據庫服務器/數據庫用戶名/數據庫名/數據庫密碼錯誤&#xff0c;請聯系空間商檢查帳戶。105…

建立apk定時自動打包系統第三篇——代碼自動更新、APP自動打包系統

我們的思路是每天下班后團隊各成員在指定的時間&#xff08;例如下午18:30&#xff09;之前把各自的代碼上傳到SVN&#xff0c;然后服務器在指定的時間&#xff08;例如下午18:30&#xff09;更新代碼、執行ant 打包命令、最后將apk包存放在指定目錄&#xff08;或者上傳指定ft…

對于線程并發模型與事件并發模型的思考

這里將以對話的形式進行&#xff1a; A&#xff1a; 普通的線程是可以被其他線程中斷掉的&#xff0c;而基于select、epoll的事件處理函數實際上是不可以被其他事件&#xff08;線程&#xff09;中斷的。 我這個理解對嗎&#xff1f; B&#xff1a; 圖片里的應該是對是否…

Cache 總結

這一文&#xff0c;讓我們分析一下&#xff0c;《淺談 Cache》 一文中的奇怪現象&#xff0c;事實上如今來看也并不奇怪了。在什么情況下 r1 和 r2 都為 0 呢&#xff1f;細致看代碼&#xff0c;你會發現&#xff0c;兩個線程分別被執行在不同的 CPU 核上&#xff0c;而且在線程…

c/c++常見類型轉換錯誤

文章目錄char轉int 高位符號擴展有符號int與無符號int比較關于一個bit的位域變量的取值范圍臨時變量溢出size_t死循環char轉int 高位符號擴展 int main() {char a 0x9A;int util;util (int)a;cout << a << endl;cout << util << endl;if (util >…

Javascript 裝載和執行

一兩個月前在淘寶內網里看到一個優化Javascript代碼的競賽&#xff0c;發現有不少的人對Javascript的執行和裝載的基礎并不懂&#xff0c;所以&#xff0c;從那天起我就想寫一篇文章&#xff0c;但一直耽擱了。 首先&#xff0c;我想說一下Javascript的裝載和執行。通常來說&am…

java sundry tips

1.關于Arrays 記得binarySearch方法返回的int 類型的數值的含義。 If the array contains multiple elements with the specified value, there is no guarantee which one will be found. 而且當查找數小于數組中任何一個數時返回-1 &#xff0c;當查找數大于數組中任何…

c++常見的10個類對象問題

文章目錄1、對象的淺復制2、構造函數中的操作符重載3、拷貝構造函數不能模板化4、析構函數未捕獲異常導致coredump5、構造函數拋出異常6、基類析構函數非虛導致內存泄漏7、刪除void*指針引發內存泄露8、成員函數尾部缺失const9、使用memset初始化class10、對象向下轉換失敗1、對…

Ubuntu 14.10 -- 異次元軟件世界

Ubuntu 14.10 中文桌面版/服務器正式版下載 - 華麗免費易于入門的 Linux 操作系統 [ 系統工具 - Linux // 2014-10-25 ]一說到 Linux&#xff0c;就不得不提目前最紅火的 Ubuntu 發行版了&#xff01;它擁有絢麗的界面&#xff0c;甚至跟以時尚為賣點的 Mac OSX 相比也有過之而…

maven 概念

這里maven倡導約定優于配置&#xff0c;maven的約定就是以下目錄結構src/main/java 下存放java類src/main/webapp 下存放頁面文件(需要手動創建)src/main/resources 下存放資源文件src/test/java 下存放單元測試代碼src/test/resources 下存放測試資源文件 Maven運行的生命周期…

System Design筆記:在線售票系統設計

文章目錄何為在線售票系統&#xff1f;系統目標和要求1、功能要求2、非功能性需求3、設計注意事項4、容量估算5、系統API1.SearchMovies2.ReserveSeats6、數據庫設計7、高級設計8、細節模塊設計9、流程服務器如何跟蹤所有尚未預訂的active預訂&#xff1f;服務器如何跟蹤所有等…

Response.Write具體介紹

問題一&#xff1a; Response.Write 后連接Response.Redirect &#xff0c;則Response.Write無法顯示&#xff0c;直接跳轉入Response.Redirect 的頁面。 解決方案&#xff1a; Response.Write("<script langugejavascript>alert(成功改動); window.location.hrefin…

SharePoint通過IP地址訪問

問題&#xff1a;SP站點通過計算機名稱可以訪問&#xff0c;但不能通過IP地址訪問 解決方案&#xff1a;打開SharePoint2010管理中心》應用程序管理》配置備用訪問映射》編輯公用 URL 備用訪問映射集&#xff1a;選擇要映射的網站集 默認:http://計算機名 Intranet &#xff1a…

公有云與私有云的差別(轉)

公有云與私有云的差別 發現每一個公司對私有云、公有云的定義都不一樣&#xff0c;能夠從公有云與私有云的差別上理解這個概念。下面轉載網絡上一個比較淺顯的解釋&#xff1a; 差別1&#xff1a;從云的建設地點劃分&#xff0c;公有云——互聯網上公布的云計算服務&#xff1b…