H264編碼原理詳解

前 言

  • 在日常生活中我們知道,電腦中的視頻文件先要通過視頻采集設備對物體進行采集,然后通過編碼核心部件得到mp4,rmvb等格式進行保存。有沒有可能不經(jīng)過上述核心編碼部件采集之后直接進行顯示呢?
    答案是可以的。
    那為什么還要進行編碼呢?答案是原始采集到的視頻數(shù)據(jù)為YUV格式,這種格式不經(jīng)過處理的話特別大,對于網(wǎng)絡傳輸和永久保存非常不利,為了解決這個問題,就需要對原原始的視頻數(shù)據(jù)進行壓縮處理。而H264則是目前一種流傳廣泛,成熟的視頻壓縮算法。
  • 先來看一個例子
    在學習H.264編碼之前,我們先了解一下在手機相機拍攝視頻的過程,如果Camera采集的YUV圖像不做任何處理進行傳輸,那么每秒鐘需要傳輸?shù)臄?shù)據(jù)量是多少?Camera采集的YUV圖像通常為YUV420,根據(jù)YUV420的采樣結(jié)構(gòu),YUV圖像中的一個像素中Y、U、V分量所占比例為1:1/4:1/4,而一個Y分量占1個字節(jié),也就是說對于YUV圖像,它的一個像素的大小為(1+1/4+1/4)Y=3/2個字節(jié)。如果直播時的幀率設置為30fps,當分辨率為1280x720,那么每秒需要傳輸?shù)臄?shù)據(jù)量為1280720(像素)30(幀)3/2(字節(jié))=39.5MB;當分辨率為1920x720,那么每秒需要傳輸?shù)臄?shù)據(jù)量接近60MB,這對于手機的存儲空間有很大考驗,因此,我們就必須在拍攝形成視頻文件保存在本地之前對采集的視頻數(shù)據(jù)進行壓縮編碼。

H26X簡介

H261

  • 目前國際上制定視頻編解碼技術(shù)的組織有兩個,一個是“國際電聯(lián)(ITU-T)”,它制定的標準有H.261、H.263、H.263+等,另一個是“國際標準化組織(ISO)”它制定的標準有MPEG-1、MPEG-2、MPEG-4等。
  • H.261是1990年ITU-T制定的一個視頻編碼標準,屬于視頻編解碼器。設計的目的是能夠在帶寬為64kbps的倍數(shù)的綜合業(yè)務數(shù)字網(wǎng)(ISDN for Integrated Services Digital Network)上質(zhì)量可接受的視頻信號。編碼程序設計的碼率是能夠在40kbps到2Mbps之間工作,能夠?qū)IF和QCIF分辨率的視頻進行編碼,即亮度分辨率分別是352x288和176x144,色度采用4:2:0采樣,分辨率分別是176x144和88x72。在1994年的時候,H.261使用向后兼容的技巧加入了一個能夠發(fā)送分辨率為704x576的靜止圖像的技術(shù)。
  • H.261是第一個實用的數(shù)字視頻編碼標準。H.261的設計相當成功,之后的視頻編碼國際標準基本上都是基于H.261相同的設計框架,包括MPEG-1, MPEG-2/H.262, H.263, 甚至 H.264。同樣,H.261開發(fā)委員會的基本的運作方式也被之后的視頻編碼標準開發(fā)組織所繼承。H.261使用了混合編碼框架,包括了基于運動補償?shù)膸g預測,基于離散余弦變換的空域變換編碼,量化,zig-zag掃描和熵編碼。
  • H.261編碼時基本的操作單位稱為宏塊。H.261使用YCbCr顏色空間,并采用4:2:0色度抽樣,每個宏塊包括16x16的亮度抽樣值和兩個相應的8x8的色度抽樣值。 H.261使用幀間預測來消除空域冗余,并使用了運動矢量來進行運動補償。變換編碼部分使用了一個8x8的離散余弦變換來消除空域的冗余,然后對變換后的系數(shù)進行階梯量化(這一步是有損壓縮),之后對量化后的變換系數(shù)進行Zig-zag掃描,并進行熵編碼(使用Run-Level變長編碼)來消除統(tǒng)計冗余。
  • 實際上H.261標準僅僅規(guī)定了如何進行視頻的解碼(后繼的各個視頻編碼標準也繼承了這種做法)。這樣的話,實際上開發(fā)者在編碼器的設計上擁有相當?shù)淖杂蓙碓O計編碼算法,只要他們的編碼器產(chǎn)生的碼流能夠被所有按照H.261規(guī)范制造的解碼器解碼就可以了。編碼器可以按照自己的需要對輸入的視頻進行任何預處理,解碼器也有自由對輸出的視頻在顯示之前進行任何后處理。去塊效應濾波器是一個有效的后處理技術(shù),它能明顯的減輕因為使用分塊運動補償編碼造成的塊效應(馬賽克)--在觀看低碼率視頻(例如網(wǎng)站上的視頻新聞)的時候我們都會注意到這種討厭的效應。因此,在之后的視頻編碼標準如H.264中就把去塊效應濾波器加為標準的一部分(即使在使用H.264的時候,再完成解碼后再增加一個標準外的去塊效應濾波器也能提高主觀視頻質(zhì)量)。
  • 后來的視頻編碼標準都可以說是在H.261的基礎上進行逐步改進,引入新功能得到的。現(xiàn)在的視頻編碼標準比起H.261來在各性能方面都有了很大的提高,這使得H.261成為了過時的標準,除了在一些視頻會議系統(tǒng)和網(wǎng)絡視頻中為了向后兼容還支持H.261,已經(jīng)基本上看不到使用H.261的產(chǎn)品了。但是這并不妨礙H.261成為視頻編碼領域一個重要的里程碑式的標準。

H262

  • H.262 是ITU-T的一個數(shù)字視頻編碼標準,屬于視頻編解碼器。H.262在技術(shù)內(nèi)容上和ISO/IEC的MPEG-2視頻標準(正式名稱是ISO/IEC 13818-2)一致。H.262是由ITU-T的VCEG組織和ISO/IEC的MPEG組織聯(lián)合制定的,所以制定完成后分別成為了兩個組織的標準,正式名稱是"ITU-T建議H.262"和"ISO/IEC 13818-2"。這兩個標準在所有的文字敘述上都是相同的(也許除了封面和標價之外)。

H263

  • H.263是由ITU-T制定的視頻會議用的低碼率視頻編碼標準,屬于視頻編解碼器。H.263最初設計為基于H.324的系統(tǒng)進行傳輸(即基于公共交換電話網(wǎng)和其它基于電路交換的網(wǎng)絡進行視頻會議和視頻電話)。后來發(fā)現(xiàn)H.263也可以成功的應用與H.323(基于RTP/IP網(wǎng)絡的視頻會議系統(tǒng)),H.320(基于綜合業(yè)務數(shù)字網(wǎng)的視頻會議系統(tǒng)),RTSP(流式媒體傳輸系統(tǒng))和SIP(基于因特網(wǎng)的視頻會議)。
    基于之前的視頻編碼國際標準(H.261,MPEG-1和H.262/MPEG-2),H.263的性能有了革命性的提高。它的第一版于1995年完成,在所有碼率下都優(yōu)于之前的H.261。之后還有在1998年增加了新的功能的第二版H.263+,或者叫H.263v2,以及在2000年完成的第三版H.263++,即H.263v3。
  • H.263v2 (通常也叫做H.263+或者1998年版H.263)是ITU-T H.263 視頻編碼標準第二版的非正式名稱。 它保持了原先版本H.263的所有技術(shù),但是通過增加了幾個附錄顯著的提高了編碼效率并提供了其它的一些能力,例如增強了抵抗傳輸通道的數(shù)據(jù)丟失的能力(Robustness)。

MPEGX系列標準

  • MPEG-1標準視頻編碼部分的基本方法法與H.261/ H.263相似,也采用運動補償?shù)膸g預測、二維DCT、VLC游程編碼等措施。此外還引入了幀內(nèi)幀(I)、預測幀(P)、雙向預測幀(B)和直流幀(D)等概念,進一步提高了編碼效率。在MPEG-1的基礎上,MPEG-2標準在提高圖像分辨率、兼容數(shù)字電視等方面做了一些改進,例如它的運動適量的精度為半像素;在編碼運算中(如運動估計和DCT)區(qū)分“幀”和“場”;引入了編碼的可分級性技術(shù),如空間可分級性、時間可分級性和信噪比可分級性等。近年推出的MPEG-4標準引入了基于視聽對象(AVO:Audio-Visual Object)的編碼,大大提高了視頻通信的交互能力和編碼效率。MPEG-4中還采用了一些新的技術(shù),如形狀編碼、自適應DCT、任意開頭視頻對象編碼等。但是MPEG-4的基本視頻編碼器還屬于和3相似的一類混合編碼器。

3 H.264標準

  • H.264則是由兩個組織聯(lián)合組建的聯(lián)合視頻組(JVT)共同制定的新數(shù)字視頻編碼標準,所以它既是ITU-T的H.264,又是ISO/IEC的MPEG-4高級視頻編碼(Advanced Video Coding,AVC),而且它將成為MPEG-4標準的第10部分。因此,不論是MPEG-4 AVC、MPEG-4 Part 10,還是ISO/IEC 14496-10,都是指H.264。
    從視頻標準的發(fā)展來看,H.264作為國際兩大標準組織確定的共同標準,全面覆蓋了視頻通信、廣播、存儲等各方面的應用,采用H264的視頻標準協(xié)議的會議電視系統(tǒng)是是合理的選擇。采用H264編碼協(xié)議的優(yōu)勢:
  • 不同大小和形狀的宏塊分割:H.264支持7種模式。最小可達4×4的小塊模式的運動補償為運動詳細信息的處理提高了性能,減少了方塊效應,提高了圖像的質(zhì)量。
  • 高精度的亞像素運動補償:在H.263中采用的是半像素精度的運動估計,而在H.264中可以采用1/4或者1/8像素精度的運動估值。運動估計后的殘差小。
  • 多幀預測:H.264提供可選的多幀預測功能,在幀間編碼時,可選5個不同的參考幀,提供了更好的糾錯性能,這樣更可以改善視頻圖像質(zhì)量。
  • 去塊濾波器:H.264定義了自適應去除塊效應的濾波器,這可以處理預測環(huán)路中的水平和垂直塊邊緣,大大減少了方塊效應。
  • 4×4塊的整數(shù)變換:由于用二變換塊的尺寸縮小,運動物體的劃分更精確,這樣,不但變換計算量比較小,而且在運動物體邊緣處的銜接誤疾差也大為減?。?/li>
  • 先進的量化方法:與H.263等的固定常數(shù)量化步長不同,H.264步長是以12.5%的復合率遞進的,并對色度系數(shù)采用了較小量化步長。這些措施提高了碼率控制的能力,并加強了彩色的逼真性。
    以下是各種算法的比較:


    image.png
  • 可以看出,在圖像編解碼效率上,H.264算法最為領先,MPEG-4和H.263算法基本相同,MPEG-2算法效率最低,但是當圖像質(zhì)量要求達到了一定的程度時,對帶寬的要求趨向歸一化,即在高帶寬(6M和以上)時,各種編碼算法提供的圖像質(zhì)量趨同。

H.264算法的局限性

  • 隨著近年來傳統(tǒng)的標清視頻向720P、1080P的高清視頻全面升級。在高清視頻快速發(fā)展下,H.264技術(shù)逐漸暴露了一些局限性。
  • 首先,由于分辨率的大大增加,單個宏塊所表示的圖像內(nèi)容信息大大減少,H.264所采用的4×4或8×8宏塊經(jīng)過整數(shù)變換后,低頻系數(shù)相似程度也大大提高,出現(xiàn)大量冗余,導致H.264編碼對高清視頻的壓縮效率明顯降低;
  • 其次,H264算法宏塊個數(shù)的爆發(fā)式增長,會導致每個編碼宏塊的預測模式、運動矢量、參考幀索引和量化級等宏塊級參數(shù)信息占用更多碼流資源,在有限帶寬中,分配給真正描述圖像內(nèi)容的殘差系數(shù)信息的可用帶寬明顯減少了;由于分辨率的提高,表示同一個運動的運動矢量幅值也將大大增加,H.264中采用基于空間域的運動矢量預測方式,對運動矢量差編碼使用的是哥倫布指數(shù)編碼,該編碼方式的特點是數(shù)值越大使用的比特數(shù)越多,因此,隨著運動矢量幅值的大幅增加,H264中用來對運動矢量進行預測以及編碼的壓縮率也將逐漸降低;
  • 最后,H.264的一些關鍵算法都要求串行編碼,并行度比較低,針對GPU/DSP/FPGA/ASIC等并行化程度非常高的CPU,H.264的這種串行化處理越來越成為制約運算性能的瓶頸。

H.265的特點

  • 基于上述原因,由MPEG和VCEG組成的國際數(shù)字視頻壓縮標準組織JVT在2005年已經(jīng)啟動了下一代數(shù)字視頻壓縮標準H.265的規(guī)劃,經(jīng)過這幾年的發(fā)展,已經(jīng)取得了階段性的成果和技術(shù)提升。
  • 更大的宏塊和變換塊。相對于H.264的4×4、8×8、16×16宏塊類型,H.265引入了32×32、64×64甚至于128×128 的宏塊,目的在于減少高清數(shù)字視頻的宏塊個數(shù),減少用于描述宏塊內(nèi)容的參數(shù)信息,同時整形變換塊大小也相應擴大,用于減少H.264中變換相鄰塊問的相似系數(shù)。
  • 使用新的MV(運動矢量)預測方式。區(qū)別于H.264基于空間域的運動矢量預測方式,H.265擴充更加多的方向進行幀內(nèi)預測,同時將預測塊的集合由原來的空間域擴展到時間域及空時混合域,通過率失真準則計算后選擇最佳的預測塊。使用該方法,在基本模式下測試,在與H.264相同質(zhì)量的情況下,得到平均為6.1%的壓縮增益,復雜圖像的壓縮增益甚至能提高到20%。
  • 更多的考慮并行化設計。當前芯片架構(gòu)已經(jīng)從單核性能逐漸往多核并行方向發(fā)展,H.265引入了Entropy slice、WPP 等并行運算思路,使用并行度更高的編碼算法,更有利于H.265在GPU/DSP/FPGA/ASIC等并行化程度非常高的CPU中快速高效的實現(xiàn)產(chǎn)業(yè)化。
  • 反復的質(zhì)量比較測試已經(jīng)表明,在相同的圖象質(zhì)量下,相比于H.264,通過H.265編碼的視頻大小將減少大約39-44%。由于質(zhì)量控制的測定方法不同,這個數(shù)據(jù)也會有相應的變化。
  • 通過主觀視覺測試得出的數(shù)據(jù)顯示,在碼率減少51-74%的情況下,H.265編碼視頻的質(zhì)量還能與H.264編碼視頻近似甚至更好,其本質(zhì)上說是比預期的信噪比(PSNR)要好。
  • H.265標準也同時支持4K(4096×2160)和8K(8192×4320)超高清視頻。可以說,H.265標準讓網(wǎng)絡視頻跟上了顯示屏“高分辨率化”的腳步。在對網(wǎng)絡的適應性方面H.265可很好運行在Internet等復雜網(wǎng)絡條件下。 同樣的內(nèi)容,H.265可以減少70-80%的帶寬消耗。這就可以在現(xiàn)有帶寬條件下輕松支持全高清1080p廣播。從長遠角度看,H.265標準將會成為超高清電視(UHDTV)的4K和8K分辨率的選擇。

YUV數(shù)據(jù)介紹

  • YUV 是一種彩色編碼系統(tǒng),主要用在視頻、圖形處理流水線中(pipeline)。相對于 RGB 顏色空間,設計 YUV 的目的就是為了編碼、傳輸?shù)姆奖?,減少帶寬占用和信息出錯。
  • YUV(亦稱YCrCb)是被歐洲電視系統(tǒng)所采用的一種顏色編碼方法(屬于PAL),是PAL和SECAM模擬彩色電視制式采用的顏色空間。其中的Y,U,V幾個字母不是英文單詞的組合詞,Y代表亮度,uv代表色差,u和v是構(gòu)成彩色的兩個分量。在現(xiàn)代彩色電視系統(tǒng)中,通常采用三管彩色攝影機或彩色CCD攝影機進行取像,然后把取得的彩色圖像信號經(jīng)分色、分別放大校正后得到RGB,再經(jīng)過矩陣變換電路得到亮度信號Y和兩個色差信號R-Y(即U)、B-Y(即V),最后發(fā)送端將亮度和色差三個信號分別進行編碼,用同一信道發(fā)送出去。這種色彩的表示方法就是所謂的YUV色彩空間表示。采用YUV色彩空間的重要性是它的亮度信號Y和色度信號U、V是分離的。如果只有 Y信號分量而沒有U、V信號分量,那么這樣表示的圖像就是黑白灰度圖像。彩色電視采用YUV空間正是為了用亮度信號Y解決彩色電視機與黑白電視機的相容問題,使黑白電視機也能接收彩色電視信號
  • Y’UV、YUV、YCbCr、YPbPr 幾個概念其實是一回事兒。由于歷史關系,Y’UV、YUV 主要是用在彩色電視中,用于模擬信號表示。YCbCr 是用在數(shù)字視頻、圖像的壓縮和傳輸,如 MPEG、JPEG。今天大家所講的 YUV 其實就是指 YCbCr。Y 表示亮度(luma),CbCr 表示色度(chroma)。

YUV采樣簡介

  • 我們常用的采樣比率分為三種。分別是4:4:4(YUV444)、4:2:2(YUV422)、4:2:0(YUV420)
  • 4:2:0格式是色度水平和垂直方向都是亮度的一半。


    image.png
  • 4:4:4格式是色度和亮度在水平和垂直方向都是一樣的。


    4:4:4

    4:2:2格式是色度水平方向上是亮度的一半,垂直方向相同。


    4:2:2

YUV存儲方式

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

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