H264系列十二 H.264概述

參考
【H.264/AVC視頻編解碼技術(shù)詳解】一. 視頻信息與壓縮編碼
【H.264/AVC視頻編解碼技術(shù)詳解】二. 主流視頻編碼標(biāo)準(zhǔn)的發(fā)展
【H.264/AVC視頻編解碼技術(shù)詳解】三. H.264簡介
H.264/AVC視頻編解碼技術(shù)詳解】四. 常見H.264視頻編解碼器(X264和JM)及參考軟件JM的下載與編解碼

一、視頻編碼標(biāo)準(zhǔn)化組織

從事視頻編碼算法的標(biāo)準(zhǔn)化組織主要有兩個(gè),ITU-T和ISO。

  • ITU-T,全稱International Telecommunications Union - Telecommunication Standardization Sector,即國際電信聯(lián)盟——電信標(biāo)準(zhǔn)分局。該組織下設(shè)的VECG(Video Coding Experts Group)主要負(fù)責(zé)面向?qū)崟r(shí)通信領(lǐng)域的標(biāo)準(zhǔn)制定,主要制定了H.261/H263/H263+/H263++等標(biāo)準(zhǔn)。
  • ISO,全稱International Standards Organization,即國際標(biāo)準(zhǔn)化組織。該組織下屬的MPEG(Motion Picture Experts Group),即移動(dòng)圖像專家組主要負(fù)責(zé)面向視頻存儲(chǔ)、廣播電視、網(wǎng)絡(luò)傳輸?shù)囊曨l標(biāo)準(zhǔn),主要制定了MPEG-1/MPEG-4等。

實(shí)際上,真正在業(yè)界產(chǎn)生較強(qiáng)影響力的標(biāo)準(zhǔn)均是由兩個(gè)組織合作產(chǎn)生的。比如MPEG-2、H.264/AVC和H.265/HEVC等。不同標(biāo)準(zhǔn)組織制定的視頻編碼標(biāo)準(zhǔn)的發(fā)展如下圖所示:


image.png

嚴(yán)格地講,H.264標(biāo)準(zhǔn)是屬于MPEG-4家族的一部分,即MPEG-4系列文檔ISO-14496的第10部分,因此又稱作MPEG-4/AVC。同MPEG-4重點(diǎn)考慮的靈活性和交互性不同,H.264著重強(qiáng)調(diào)更高的編碼壓縮率和傳輸可靠性,在數(shù)字電視廣播、實(shí)時(shí)視頻通信、網(wǎng)絡(luò)流媒體等領(lǐng)域具有廣泛的應(yīng)用。

除了上述兩個(gè)組織之外,其他比較有影響力的標(biāo)準(zhǔn)還有:

  • Google:VP8/VP9;
  • Microsoft : VC-1;
  • 國產(chǎn)自主標(biāo)準(zhǔn):AVS/AVS+/AVS2
二、視頻壓縮編碼的基本技術(shù)

視頻信息之所以存在大量可以被壓縮的空間,是因?yàn)槠渲斜旧砭痛嬖诖罅康臄?shù)據(jù)冗余。其主要類型有:

  • 時(shí)間冗余:視頻相鄰的兩幀之間內(nèi)容相似,存在運(yùn)動(dòng)關(guān)系
  • 空間冗余:視頻的某一幀內(nèi)部的相鄰像素存在相似性
  • 編碼冗余:視頻中不同數(shù)據(jù)出現(xiàn)的概率不同
  • 視覺冗余:觀眾的視覺系統(tǒng)對(duì)視頻中不同的部分敏感度不同

針對(duì)這些不同類型的冗余信息,在各種視頻編碼的標(biāo)準(zhǔn)算法中都有不同的技術(shù)專門應(yīng)對(duì),以通過不同的角度提高壓縮的比率。

1. 預(yù)測編碼

預(yù)測編碼可以用于處理視頻中的時(shí)間和空間域的冗余。視頻處理中的預(yù)測編碼主要分為兩大類:幀內(nèi)預(yù)測和幀間預(yù)測。

  • 幀內(nèi)預(yù)測:預(yù)測值與實(shí)際值位于同一幀內(nèi),用于消除圖像的空間冗余;幀內(nèi)預(yù)測的特點(diǎn)是壓縮率相對(duì)較低,然而可以獨(dú)立解碼,不依賴其他幀的數(shù)據(jù);通常視頻中的關(guān)鍵幀都采用幀內(nèi)預(yù)測。
  • 幀間預(yù)測:幀間預(yù)測的實(shí)際值位于當(dāng)前幀,預(yù)測值位于參考幀,用于消除圖像的時(shí)間冗余;幀間預(yù)測的壓縮率高于幀內(nèi)預(yù)測,然而不能獨(dú)立解碼,必須在獲取參考幀數(shù)據(jù)之后才能重建當(dāng)前幀。

通常在視頻碼流中,I幀全部使用幀內(nèi)編碼,P幀/B幀中的數(shù)據(jù)可能使用幀內(nèi)或者幀間編碼。

2. 變換編碼

所謂變換編碼是指,將給定的圖象變換到另一個(gè)數(shù)據(jù)域如頻域上,使得大量的信息能用較少的數(shù)據(jù)來表示,從而達(dá)到壓縮的目的。

目前主流的視頻編碼算法均屬于有損編碼,通過對(duì)視頻造成有限而可以容忍的損失,獲取相對(duì)更高的編碼效率。而造成信息損失的部分即在于變換量化這一部分。在進(jìn)行量化之前,首先需要將圖像信息從空間域通過變換編碼變換至頻域,并計(jì)算其變換系數(shù)供后續(xù)的編碼。

在視頻編碼算法中通常使用正交變換進(jìn)行變換編碼,常用的正交變換方法有:離散余弦變換(DCT)離散正弦變換(DST)、K-L變換等。

3. 熵編碼

視頻編碼中的熵編碼方法主要用于消除視頻信息中的統(tǒng)計(jì)冗余。由于信源中每一個(gè)符號(hào)出現(xiàn)的概率并不一致,這就導(dǎo)致使用同樣長度的碼字表示所有的符號(hào)會(huì)造成浪費(fèi)。通過熵編碼,針對(duì)不同的語法元素分配不同長度的碼元,可以有效消除視頻信息中由于符號(hào)概率導(dǎo)致的冗余。

在視頻編碼算法中常用的熵編碼方法有變長編碼和算術(shù)編碼等,具體來說主要有:

  • UVLC(Universal Variable Length Coding):主要采用指數(shù)哥倫布編碼
  • CAVLC(Context Adaptive Variable Length Coding):上下文自適應(yīng)的變長編碼
  • CABAC(Context Adaptive Binary Arithmetic Coding):上下文自適應(yīng)的二進(jìn)制算數(shù)編碼

根據(jù)不同的語法元素類型指定不同的編碼方式。通過這兩種熵編碼方式達(dá)到一種編碼效率與運(yùn)算復(fù)雜度之間的平衡。

三、VCL NAL

視頻編碼中采用的如預(yù)測編碼、變化量化、熵編碼等編碼工具主要工作在slice層或以下,這一層通常被稱為“視頻編碼層”(Video Coding Layer, VCL)。

相對(duì)的,在slice以上所進(jìn)行的數(shù)據(jù)和算法通常稱之為“網(wǎng)絡(luò)抽象層”(Network Abstraction Layer, NAL)。設(shè)計(jì)定義NAL層的主要意義在于提升H.264格式的視頻對(duì)網(wǎng)絡(luò)傳輸和數(shù)據(jù)存儲(chǔ)的親和性。

四、檔次與級(jí)別

為了適應(yīng)不同的應(yīng)用場景,H.264也定義了三種不同的檔次:

  • 基準(zhǔn)檔次(Baseline Profile):主要用于視頻會(huì)議、可視電話等低延時(shí)實(shí)時(shí)通信領(lǐng)域;支持I條帶和P條帶,熵編碼支持CAVLC算法。
  • 主要檔次(Main Profile):主要用于數(shù)字電視廣播、數(shù)字視頻數(shù)據(jù)存儲(chǔ)等;支持視頻場編碼、B條帶雙向預(yù)測和加權(quán)預(yù)測,熵編碼支持CAVLC和CABAC算法。
  • 擴(kuò)展檔次(Extended Profile):主要用于網(wǎng)絡(luò)視頻直播與點(diǎn)播等;支持基準(zhǔn)檔次的所有特性,并支持SI和SP條帶,支持?jǐn)?shù)據(jù)分割以改進(jìn)誤碼性能,支持B條帶和加權(quán)預(yù)測,但不支持CABAC和場編碼。

CAVLC支援所有的H.264 profiles,CABAC則不支援Baseline以及Extended profiles。

image.png

五、常見編解碼器X264 JM

我們已經(jīng)知道,H.264是一種視頻壓縮標(biāo)準(zhǔn),其只規(guī)定了符合標(biāo)準(zhǔn)的碼流的格式,以及碼流中各個(gè)語法元素的解析方法。H.264標(biāo)準(zhǔn)并未規(guī)定編碼器的實(shí)現(xiàn)或流程,這給了不同的廠商或組織在編碼實(shí)現(xiàn)方面極大的自由度,并產(chǎn)生了一些比較著名的開源H.264編解碼器工程。其中H.264編碼器中最著名的兩個(gè)當(dāng)屬JM和X264,這二者都屬于H.264編碼標(biāo)準(zhǔn)的一種實(shí)現(xiàn)形式。

  • JM:JM通常被認(rèn)為是H.264標(biāo)準(zhǔn)制定團(tuán)隊(duì)所認(rèn)可的官方參考軟件,基本實(shí)現(xiàn)了H.264標(biāo)準(zhǔn)的全部特征。JM在運(yùn)行時(shí)的運(yùn)算過程較為復(fù)雜,而且沒有采用匯編優(yōu)化等加速方法,因此運(yùn)行速度較慢,很難達(dá)到實(shí)時(shí)編解碼。通常主要用于編解碼技術(shù)的科學(xué)研究領(lǐng)域,目前(2016.7)最新版本為JM 19。
  • X264:X264是另一個(gè)著名的H.264開源視頻編碼器,由開源組織VideoLan開發(fā)制定。X264是目前企業(yè)界應(yīng)用最為廣泛的開源編碼器,主要因?yàn)閄264相對(duì)于JM進(jìn)行了大量的優(yōu)化與簡化,使其運(yùn)行效率大幅提高,主要有對(duì)編碼代價(jià)計(jì)算方法的簡化以及添加了MMX、SSE匯編優(yōu)化等部分。雖然編碼的質(zhì)量在某些情況下相對(duì)于JM略有下降,但是已無法掩蓋其在可應(yīng)用性,尤其是實(shí)時(shí)編碼方面無可比擬的優(yōu)勢。

參考JM和x264是什么關(guān)系?
再看JM encoder和x264, 自己編碼一下,就可以發(fā)現(xiàn),JM encoder實(shí)在太慢了,x264則相當(dāng)快. 為什么呢?因?yàn)榫唧w實(shí)現(xiàn)的方式不一樣,打個(gè)簡單比方JM encoder就像一個(gè)學(xué)院派的老師,比較嚴(yán)謹(jǐn),略帶完美主義情結(jié),力求面面俱到, x264更像一個(gè)公司的大牛,少去了許多華而不實(shí)的東西,奉行實(shí)用至上,閹割掉一些看上去很美的東西, 所以編碼效率那是相當(dāng)高啊.

初學(xué)H.264時(shí),聽別人說研究學(xué)術(shù)用JM,實(shí)際應(yīng)用用x264. 其實(shí)不然,每個(gè)人的需求不同,研究學(xué)術(shù)就要用JM?要看研究的是什么東西,有些人做的是基于H.264的研究,而不是專門研究H.264, 動(dòng)輒要編碼上千幀,如果用JM,那就太慢了. 對(duì)某些基于H.264的研究者來說,運(yùn)動(dòng)估計(jì)是怎么估計(jì)出來的一點(diǎn)都不重要,熵編碼是如何實(shí)現(xiàn)的一點(diǎn)都不重要,重要的是知道在哪個(gè)地方提取什么參量. 話說,人各有志,所以,到底用JM還是x264也是不過是人各有所需罷了.

六、H264學(xué)習(xí)資源匯總

H264官方中文版PDF

Akagi201/h.264-guide.md

雷霄驊[總結(jié)]視音頻編解碼技術(shù)零基礎(chǔ)學(xué)習(xí)方法

韋易笑 試簡介視頻編碼技術(shù)?
韋易笑 學(xué)習(xí)視頻編碼、解碼知識(shí)需要哪些前置知識(shí)?

H.264/AVC視頻編解碼技術(shù)詳解系列

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在保證視頻圖像質(zhì)量的前提下,HEVC通過增加一定的計(jì)算復(fù)雜度,可以實(shí)現(xiàn)碼流在H.264/AVC的基礎(chǔ)上降低50%。...
    加劉景長閱讀 8,306評(píng)論 0 6
  • FFmpeg X264編碼參數(shù) 目錄 碼率控制 1 X264的preset和tune 2 編碼延時(shí)建議...
    古則閱讀 31,036評(píng)論 1 15
  • ### YUV顏色空間 視頻是由一幀一幀的數(shù)據(jù)連接而成,而一幀視頻數(shù)據(jù)其實(shí)就是一張圖片。 yuv是一種圖片儲(chǔ)存格式...
    天使君閱讀 3,682評(píng)論 0 4
  • 版本記錄 版本號(hào)時(shí)間V1.02017.12.17 前言 對(duì)于做過音視頻的開發(fā)者,編解碼都不陌生,接下來這幾篇就詳細(xì)...
    刀客傳奇閱讀 9,047評(píng)論 0 2
  • 觀看了一場群眾性的乒乓球比賽,單看名字就比較有意思,有母子組,父子組,夫妻組,爺孫組,比賽現(xiàn)場年齡差距非常大,...
    林多多1995閱讀 272評(píng)論 0 0

友情鏈接更多精彩內(nèi)容