<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          建議收藏 | H.265編碼原理入門(mén)

          共 7253字,需瀏覽 15分鐘

           ·

          2022-06-19 10:41

          視頻編碼的目的是為了壓縮原始視頻,壓縮的主要思路是從空間、時(shí)間、編碼、視覺(jué)等幾個(gè)主要角度去除冗余信息。由于 H.264 出色的數(shù)據(jù)壓縮比率和視頻質(zhì)量,成為當(dāng)前市場(chǎng)上最為流行的編解碼標(biāo)準(zhǔn)。而 H.265 是在 H.264 的基礎(chǔ)上,保證相同視頻質(zhì)量的同時(shí),視頻流的碼率還可以減少50%。隨著H.265編碼格式越來(lái)越流行,本文將主要介紹 H.265 的編碼原理,以下是 H.265 的編碼框架流程圖。



          01

          編碼結(jié)構(gòu)

          H.265在編碼結(jié)構(gòu)上分為視頻編碼層(VCL)網(wǎng)絡(luò)提取層(NAL)
          • VCL:Video Coding Layer,主要包括視頻壓縮引擎和圖像分塊的語(yǔ)法定義,原始視頻在 VCL 層,被編碼成視頻數(shù)據(jù)。簡(jiǎn)單版本的編碼過(guò)程如下:

            • 將每一幀的圖像分塊,將塊信息添加到碼流中;

            • 對(duì)單元塊進(jìn)行預(yù)測(cè)編碼,幀內(nèi)預(yù)測(cè)生成殘差,幀間預(yù)測(cè)進(jìn)行運(yùn)動(dòng)估計(jì)和運(yùn)動(dòng)補(bǔ)償;

            • 對(duì)殘差進(jìn)行變換,對(duì)變換系數(shù)進(jìn)行量化、掃描。

            • 對(duì)量化后的變換系數(shù)、運(yùn)動(dòng)信息、預(yù)測(cè)信息等進(jìn)行熵編碼,形成壓縮的視頻碼流輸出。

          • NAL:Network Abstraction Layer,主要定義數(shù)據(jù)的封裝格式,把 VCL 產(chǎn)生的視頻數(shù)據(jù)封裝成一個(gè)個(gè) NAL 單元的數(shù)據(jù)包,適配不同的網(wǎng)絡(luò)環(huán)境并傳輸。


          02

          分塊

          從編碼順序和結(jié)構(gòu)上講,H.265首先將一個(gè)視頻劃分成若干個(gè)序列,一個(gè)序列劃分成若干個(gè)圖像組(GOP),每一個(gè)GOP代表一組連續(xù)的視頻幀。H.265 在對(duì)圖像做預(yù)測(cè)編碼和變換編碼時(shí),會(huì)先對(duì)圖像進(jìn)行劃分,劃分方式是四叉樹(shù)。在劃分四叉樹(shù)時(shí),會(huì)將整個(gè)視頻幀劃分成若干個(gè)正方形的編碼樹(shù)塊(CTB),CTB 可以繼續(xù)劃分成編碼塊(CB),CB 還可以劃分為預(yù)測(cè)塊(PB)變換塊(TB)。因此,H.265對(duì)視頻的結(jié)構(gòu)劃分如下圖所示:

          同一位置處的一個(gè)亮度 CB 和兩個(gè)色度 CB ,加上一些相應(yīng)的語(yǔ)法元素,組成一個(gè)編碼單元(CU)。CU 是決定進(jìn)行幀內(nèi)預(yù)測(cè)、幀間預(yù)測(cè)、Skip/Merge模式的單元。

          同一位置處的一個(gè)亮度 CTB 和兩個(gè)色度 CTB ,加上一些相應(yīng)的語(yǔ)法元素,和包含的 CU ,組成一個(gè)編碼樹(shù)單元(CTU)。CTU 相當(dāng)于 H.264 中的宏塊,區(qū)別是 CTU 的尺寸是由編碼器制定,最大可以支持到 64x64,最小可以支持到 16x16。而宏塊的大小固定為 16x16。

          一個(gè) CTU 在進(jìn)行編碼時(shí),按照深度優(yōu)先的順序進(jìn)行 CU 編碼,像數(shù)據(jù)結(jié)構(gòu)中的四叉樹(shù)一樣,一個(gè)大的方塊代表父節(jié)點(diǎn),里面有四個(gè)小方塊分別代表四個(gè)子節(jié)點(diǎn)。


          03

          預(yù)測(cè)

          視頻的本質(zhì)是由一系列連續(xù)的視頻幀組成,在單個(gè)視頻幀內(nèi)部和多個(gè)視頻幀之間都存在大量的冗余。從空間的角度看,單個(gè)視頻幀內(nèi)部的像素點(diǎn)之間的像素值相差很小。從時(shí)間的角度看,兩個(gè)連續(xù)的視頻幀之間也有很多相同的像素點(diǎn)。預(yù)測(cè)編碼就是基于圖像統(tǒng)計(jì)特性進(jìn)行數(shù)據(jù)壓縮的一種方法,利用了圖像在時(shí)間和空間上的相關(guān)性,通過(guò)已經(jīng)重建的像素?cái)?shù)據(jù)預(yù)測(cè)當(dāng)前正在編碼的像素。

          3.1 幀內(nèi)預(yù)測(cè)

          幀內(nèi)預(yù)測(cè)是指用于預(yù)測(cè)的像素和當(dāng)前正在編碼的像素都在同一個(gè)視頻幀內(nèi),并且一般都在鄰近的區(qū)域內(nèi)。由于鄰近的像素之間有很強(qiáng)的相關(guān)性,像素值一般都非常接近,發(fā)生突變的概率非常小,差值都是0或者非常小的數(shù)。所以,幀內(nèi)預(yù)測(cè)編碼后傳輸?shù)氖穷A(yù)測(cè)值和真實(shí)值之間的差值,即0附近的值,叫做預(yù)測(cè)誤差殘差,這樣就用較少的比特傳輸,達(dá)到壓縮的效果。

          H.265幀內(nèi)預(yù)測(cè)編碼以塊為單位,使用相鄰已經(jīng)重建的塊的重建值對(duì)正在編碼的塊進(jìn)行預(yù)測(cè)。預(yù)測(cè)分量分為亮度和色度兩個(gè),對(duì)應(yīng)的預(yù)測(cè)塊分別是亮度預(yù)測(cè)塊和色度預(yù)測(cè)塊。為了適應(yīng)高清視頻的內(nèi)容特征,提高預(yù)測(cè)精度,H.265采用了更加豐富的預(yù)測(cè)塊尺寸和預(yù)測(cè)模式。

          H.265亮度預(yù)測(cè)塊的尺寸在4*4到32*32之間,所有尺寸的預(yù)測(cè)塊都有35種預(yù)測(cè)模式,這些預(yù)測(cè)模式可以分為3類(lèi):平面(Planar)模式、直流(DC)模式和角度(Angular)模式。

          • Planar模式:亮度模式0,適用于像素值變換緩慢的區(qū)域,例如像素漸變的場(chǎng)景。對(duì)預(yù)測(cè)塊中的每個(gè)像素都使用不同的預(yù)測(cè)值。預(yù)測(cè)值等于:該像素在水平和垂直兩個(gè)方向線(xiàn)性插值的平均值。

          • DC模式:亮度模式1,適用于圖像的大面積平坦區(qū)域,該模式對(duì)預(yù)測(cè)塊中的所有像素都使用相同的預(yù)測(cè)值。

            • 如果預(yù)測(cè)塊是正方形,預(yù)測(cè)值等于左邊和上邊的參考像素的平均值;

            • 如果預(yù)測(cè)塊是長(zhǎng)方形,預(yù)測(cè)值等于長(zhǎng)的那一邊的平均值;

          • 角度模式:亮度模式2~34,總共33個(gè)預(yù)測(cè)方向,其中模式10是水平方向,模式26是垂直方向。角度模式每個(gè)像素的預(yù)測(cè)值都是從對(duì)應(yīng)預(yù)測(cè)方向前已經(jīng)重建的像素集的樣值進(jìn)行水平或垂直方向偏移角度預(yù)測(cè)。

          由于彩色視頻中,相同位置的色度信號(hào)和亮度信號(hào)的特征類(lèi)似,因此色度預(yù)測(cè)塊和亮度預(yù)測(cè)塊的預(yù)測(cè)模式也類(lèi)似。H.265中色度預(yù)測(cè)塊的預(yù)測(cè)模式有Planar模式、垂直模式、水平模式、DC模式和導(dǎo)出模式5種:

          • Planar模式:色度模式0,和亮度模式0一樣。

          • 垂直模式:色度模式1,和亮度模式26一樣。

          • 水平模式:色度模式2,和亮度模式10一樣。

          • DC模式:色度模式3,和亮度模式1一樣。

          • 導(dǎo)出模式:色度模式4,采用和對(duì)應(yīng)亮度預(yù)測(cè)塊相同的預(yù)測(cè)模式。如果對(duì)應(yīng)的亮度預(yù)測(cè)塊模式是0、1、10、26中的一種,則替換為模式34。

          3.2 幀間預(yù)測(cè)

          幀間預(yù)測(cè)是指用于預(yù)測(cè)的像素和當(dāng)前正在編碼的像素不在同一個(gè)視頻幀內(nèi),但是一般在相鄰或附近的位置。一般情況下,幀間預(yù)測(cè)編碼的壓縮效果要比幀內(nèi)預(yù)測(cè)好,主要原因是視頻幀之間的相關(guān)性非常強(qiáng)。如果視頻幀中的運(yùn)動(dòng)物體變化速度很慢,那么視頻幀之間的像素差值也就很小,時(shí)間冗余度就非常大。

          幀間預(yù)測(cè)評(píng)估運(yùn)動(dòng)物體運(yùn)動(dòng)狀況的方法是運(yùn)動(dòng)估計(jì),它的主要思想就是對(duì)預(yù)測(cè)塊從參考幀的給定范圍中搜索匹配塊,計(jì)算匹配塊和預(yù)測(cè)塊之間的相對(duì)位移,該相對(duì)位移就是運(yùn)動(dòng)矢量。得到運(yùn)動(dòng)矢量后,需要對(duì)預(yù)測(cè)修正,也就是運(yùn)動(dòng)補(bǔ)償。將運(yùn)動(dòng)矢量輸入到運(yùn)動(dòng)補(bǔ)償模塊,"補(bǔ)償"參考幀,即可得到當(dāng)前編碼幀的預(yù)測(cè)幀。預(yù)測(cè)幀和當(dāng)前幀的差,就是幀間預(yù)測(cè)誤差。

          如果幀間預(yù)測(cè)只用到了前一幀圖像,就稱(chēng)為前向幀間預(yù)測(cè)或單向預(yù)測(cè)。該預(yù)測(cè)幀也就是P幀,P幀可以參考前面的I幀或者P幀。

          如果幀間預(yù)測(cè)不僅用到了前一幀圖像預(yù)測(cè)當(dāng)前塊,還用到了后一幀圖像,那么就是雙向預(yù)測(cè)。該預(yù)測(cè)幀也就是B幀,B幀可以參考前面的I幀或P幀和后面的P幀。

          由于P幀需要參考前面的I幀或P幀,而B(niǎo)幀需要參考前面I幀或P幀和后面的P幀,如果在一個(gè)視頻流中,先到了B幀,而依賴(lài)的I幀、P幀還沒(méi)有到,那么該B幀還不能立即解碼,那么應(yīng)該怎么保證播放順序呢?其實(shí),在視頻編碼時(shí),會(huì)生成PTS和DTS。通常情況下,編碼器在生成一個(gè)I幀后,會(huì)向后跳過(guò)幾個(gè)幀,用前面的I幀作為參考幀對(duì)P幀編碼,I幀和P幀之間的幀被編碼為B幀。推流的視頻幀順序在編碼的時(shí)候就已經(jīng)按照I幀、P幀、B幀的依賴(lài)順序編好了,收到數(shù)據(jù)后直接解碼即可。所以,不可能先收到B幀,再收到依賴(lài)的I幀和P幀。

          • PTS:Presentation Time Stamp,顯示時(shí)間戳,告訴播放器在什么時(shí)間顯示這一幀。

          • DTS:Decoding Time Stamp,解碼時(shí)間戳,告訴播放器在什么時(shí)間解碼這一幀。


          04

          變換

          變換編碼是指將圖像中的空間域信號(hào)映射變換到頻域(頻率域),然后對(duì)生成的變換系數(shù)編碼。由于在空間域中,數(shù)據(jù)之間的相關(guān)性比較大,經(jīng)過(guò)預(yù)測(cè)編碼后的殘差變化較小,存在大量的數(shù)據(jù)冗余,在圖像中亮度值變化緩慢的平坦區(qū)域特別明顯。而變換為頻域后,會(huì)將空間域分散分布的殘差數(shù)據(jù)轉(zhuǎn)換成集中分布,可以降低相關(guān)性,減少數(shù)據(jù)冗余,從而達(dá)到去除空間冗余的目的。

          在H.265中,一個(gè)編碼塊(CB)可以通過(guò)四叉樹(shù)劃分成若干個(gè)預(yù)測(cè)塊(PB)和變換塊(TB)。由于從 CB 到 TB 之間的四叉樹(shù)劃分主要是為了殘差的變換運(yùn)算,因此這種四叉樹(shù)又稱(chēng)為殘差四叉樹(shù)(RQT)。如下圖所示,就是一個(gè) RQT 劃分實(shí)例,將一個(gè) 32*32 的殘差 CB 劃分成13個(gè)不同大小的 TB 。

          每個(gè) TB 的大小有四種,分別是從 4*4、8*8、16*16、32*32,每個(gè) TB 都對(duì)應(yīng)一個(gè)整數(shù)變換系數(shù)矩陣。大尺寸的 TB 適用于圖像亮度值變化緩慢的平坦區(qū)域,小尺寸的 TB 適用于圖像亮度值變化劇烈的復(fù)雜區(qū)域。所有尺寸都可以使用離散余弦變換(DCT)變換另外,對(duì)于 4*4 的幀內(nèi)預(yù)測(cè)亮度殘差塊,還可以使用離散正弦變換(DST)

          由于幀內(nèi)預(yù)測(cè)編碼是基于左邊和上邊已經(jīng)編碼塊的數(shù)據(jù),因此預(yù)測(cè)塊距離已編碼塊越近,相關(guān)性越強(qiáng),預(yù)測(cè)誤差越小;距離已編碼塊越遠(yuǎn),相關(guān)性越小,預(yù)測(cè)誤差越大。預(yù)測(cè)誤差的這種數(shù)據(jù)分布特征和 DST 的正弦基函數(shù) sin 非常相似,起始點(diǎn)最小,然后逐漸變大。但是因?yàn)?DST 計(jì)算量比 DCT 大,需要增加更多的變換類(lèi)型標(biāo)識(shí),因此 DST 僅用于 4*4的幀內(nèi)預(yù)測(cè)亮度殘差塊。


          05

          量化

          由于變換編碼只是將圖像數(shù)據(jù)從空間域矩陣轉(zhuǎn)換為頻域的變換系數(shù)矩陣,矩陣的系數(shù)個(gè)數(shù)和數(shù)據(jù)量都沒(méi)有減少。要想壓縮數(shù)據(jù),還需要對(duì)頻域中的統(tǒng)計(jì)特征進(jìn)行量化和熵編碼。

          常見(jiàn)的量化方法可以分為**標(biāo)量量化(SQ)和矢量量化(VQ)**兩類(lèi):

          • 標(biāo)量量化:將圖像中的數(shù)據(jù)劃分成若干個(gè)區(qū)間,然后在每個(gè)區(qū)間用一個(gè)代表這個(gè)區(qū)間內(nèi)所有樣點(diǎn)的取值。

          • 矢量量化:將圖像中的數(shù)據(jù)劃分成若干個(gè)區(qū)間,然后在每個(gè)區(qū)間用一個(gè)代表矢量代表這個(gè)區(qū)間的所有矢量取值。

          由于矢量量化引入了多個(gè)像素之間的關(guān)聯(lián),并且使用了概率的方法,一般壓縮率比標(biāo)量量化高。但是由于其計(jì)算復(fù)雜度高,所以目前廣泛使用的量化方法是標(biāo)量量化。

          量化的壓縮率取決于劃分的區(qū)間大小,即量化步長(zhǎng)。量化步長(zhǎng)越大,表示量化越粗,對(duì)應(yīng)的視頻碼率越低,失真越大;量化步長(zhǎng)越小,表示量化越細(xì),對(duì)應(yīng)的視頻碼率越高,失真越小。

          H.265量化時(shí)是以**變換單元(TU)為基本單位處理對(duì)象包括 TU 中的亮度分量和色度分量。H.265采用了非線(xiàn)性標(biāo)量量化,通過(guò)量化參數(shù)(QP)**控制每個(gè)編碼塊的量化步長(zhǎng),QP 和量化步長(zhǎng)的關(guān)系近似呈指數(shù)關(guān)系。QP 是個(gè)整數(shù),亮度分量的 QP 值范圍是 0~51,色度分量的亮度 QP 值范圍是0~45。QP 值在0~29范圍時(shí),亮度分量和色度分量的量化步長(zhǎng)相等,從QP=30開(kāi)始,兩者開(kāi)始產(chǎn)生差異。QP 和量化步長(zhǎng)的關(guān)系如下圖所示:

          編碼端的量化過(guò)程可以簡(jiǎn)單理解為是每個(gè) DCT 變換系數(shù)除以量化步長(zhǎng)得到量化值。在解碼端對(duì)應(yīng)的反量化過(guò)程就是化值乘以量化步長(zhǎng)得到 DCT 變化系數(shù)值。


          06

          熵編碼

          熵編碼是指在編碼過(guò)程中按熵原理不丟失任何信息的編碼。量化是一種有損的壓縮方式,而熵編碼是用更緊湊的方式標(biāo)記和原數(shù)據(jù)之間的映射關(guān)系,屬于無(wú)損壓縮。常見(jiàn)的熵編碼有香農(nóng)(Shannon)編碼、哈夫曼(Huffman)編碼、算術(shù)(Arithmetic)編碼、游程編碼等。

          6.1 哈夫曼編碼

          哈夫曼編碼是一種變長(zhǎng)編碼,即不同字符的編碼長(zhǎng)度是變化的。該編碼利用字符出現(xiàn)的概率構(gòu)造哈夫曼二叉樹(shù),目標(biāo)是讓出現(xiàn)概率大的字符編碼時(shí)用短碼(距離根節(jié)點(diǎn)近),概率小的字符編碼時(shí)用長(zhǎng)碼(距離根節(jié)點(diǎn)遠(yuǎn)),從而讓平均碼字長(zhǎng)度最短。

          碼字:字符經(jīng)過(guò)哈夫曼編碼后得到的編碼。

          例:字符A、B、C、D、E、F對(duì)應(yīng)的出現(xiàn)的概率分別是0.32、0.22、0.18、0.16、0.08、0.04。哈夫曼樹(shù)的構(gòu)造過(guò)程如下:

          • 選擇概率最小的 E、F 作為葉子節(jié)點(diǎn),計(jì)算 E、F 的概率和作為它們父節(jié)點(diǎn);

          • 將父節(jié)點(diǎn)的值與剩下的 A、B、C、D 概率值排序,再選擇最小的兩個(gè)樹(shù)求和;

          • 重復(fù)以上過(guò)程;

          最終構(gòu)造出來(lái)的哈夫曼二叉樹(shù)如下圖所示:

          左節(jié)點(diǎn)的路徑為0,右節(jié)點(diǎn)的路徑為1,求得A、B、C、D、E、F的編碼結(jié)果:

          字符

          A

          B

          C

          D

          E

          F

          概率

          0.32

          0.22

          0.18

          0.16

          0.08

          0.04

          碼字

          11

          01

          00

          101

          1001

          1000

          碼字長(zhǎng)度

          2

          2

          2

          3

          4

          4

          平均碼字長(zhǎng)度 = 0.32*2 + 0.22*2 + 0.18*2 + 0.16*3 + 0.08*4 + 0.04*4 = 2.4bit

          6.2 算術(shù)編碼

          雖然哈夫曼編碼在理論上可以獲得最佳編碼結(jié)果,但是在實(shí)際編碼中,由于計(jì)算機(jī)處理的最小數(shù)據(jù)單位是1bit,對(duì)于包含小數(shù)點(diǎn)的碼字長(zhǎng)度只能按照整數(shù)處理,所以實(shí)際編碼效果往往略遜于理論編碼效果。在圖像壓縮領(lǐng)域,通常使用算術(shù)編碼代替哈夫曼編碼。不過(guò),算術(shù)編碼的理論基礎(chǔ)和哈夫曼編碼是一致的,都是概率大的字符用短碼,概率小的字符用長(zhǎng)碼。

          算術(shù)編碼分為固定模式算術(shù)編碼、自適應(yīng)算術(shù)編碼(AAC)、二進(jìn)制算術(shù)編碼、自適應(yīng)二進(jìn)制算術(shù)編碼(CABAC)等,H.265 中使用了 CABAC 。此處將只介紹固定模式算術(shù)編碼流程:

          • 統(tǒng)計(jì)輸入的符號(hào)序列中各個(gè)字符和出現(xiàn)的概率;

          • 按照概率分布,將[0, 1)區(qū)間劃分成多個(gè)子區(qū)間,每個(gè)子區(qū)間代表一個(gè)字符,子區(qū)間的大小代表字符出現(xiàn)的概率;所有子區(qū)間大小的和等于1;假設(shè)該字符的區(qū)間范圍為 [L, H);

          • 設(shè)置初始變量low=0, high=1,不斷讀取符號(hào)序列中的每個(gè)字符,找到該字符對(duì)應(yīng)的區(qū)間范圍 [L, H),更新low和high的值:

            • low = low + (high - low) * L

            • high = low + (high - low) * H

          • 遍歷完符號(hào)序列后,得到最終的low和high,轉(zhuǎn)換二進(jìn)制形式輸出得到編碼數(shù)據(jù);

          例:輸入符號(hào)序列是 ADBCD,統(tǒng)計(jì)各個(gè)字符出現(xiàn)的概率:

          字符

          出現(xiàn)次數(shù)

          出現(xiàn)概率

          概率區(qū)間

          A

          1

          0.2

          [0, 0.2)

          B

          1

          0.2

          [0.2, 0.4)

          C

          1

          0.2

          [0.4, 0.6)

          D

          2

          0.4

          [0.6, 1)

          • 遍歷第一個(gè)字符 A 時(shí),low = 0, high = 1, L = 0, H = 0.2

            • low = low + (high - low) * L = 0

            • high = low + (high - low) * H = 0.2

          • 遍歷第二個(gè)字符 D 時(shí),low = 0, high = 0.2, L = 0.6, H = 1

            • low = low + (high - low) * L = 0.12(注:此處計(jì)算的low不代入下面計(jì)算high值的公式中)

            • high = low + (high - low) * H = 0.2

          • 遍歷第三個(gè)字符 B 時(shí),low = 0.12,high = 0.2,L = 0.2,H = 0.4

            • low = low + (high - low) * L = 0.136

            • high = low + (high - low) * H = 0.152

          • 遍歷第四個(gè)字符 C 時(shí),low = 0.136,high = 0.152,L = 0.4,H = 0.6

            • low = low + (high - low) * L = 0.1424

            • high = low + (high - low) * H = 0.1456

          • 遍歷第五個(gè)字符D時(shí),low = 0.1424,high = 0.1456,L = 0.6,H = 1

            • low = low + (high - low) * L = 0.14432

            • high = low + (high - low) * H = 0.1456

          得到最后的[low, high)區(qū)間是[0.14432, 0.1456),在這個(gè)區(qū)間內(nèi)取任意值轉(zhuǎn)二進(jìn)制后都是對(duì) "ADBCD"的算術(shù)編碼。對(duì)應(yīng)的編碼流程可以簡(jiǎn)化到下面這張圖中:


          07

          環(huán)路濾波

          由于 H.265 采用分塊編碼,在圖像反量化、反變換重建的時(shí)候,會(huì)存在一些失真效應(yīng),例如塊效應(yīng)、振鈴效應(yīng)為了解決這些問(wèn)題,H.265 采用了環(huán)路濾波技術(shù),其中包括去方塊濾波(DBF)和樣點(diǎn)自適應(yīng)補(bǔ)償(SAO)

          DBF 作用于邊界像素,用于解決塊效應(yīng)。塊效應(yīng)是指一些相鄰編碼塊邊界處的灰度值存在明顯的不連續(xù)性,產(chǎn)生塊效應(yīng)主要有兩個(gè)原因:

          • 編碼器對(duì)殘差的DCT變換和量化是基于塊的,忽略了塊與塊之間的相關(guān)性,導(dǎo)致塊之間的處理不一致;

          • 幀間預(yù)測(cè)運(yùn)動(dòng)補(bǔ)償塊的不完全匹配,存在誤差;而編碼時(shí)的預(yù)測(cè)參考幀通常來(lái)自這些重建圖像,導(dǎo)致待預(yù)測(cè)圖像失真;

          DBF 針對(duì)邊界類(lèi)型采用強(qiáng)濾波、弱濾波或者不處理,邊界類(lèi)型的判定是由邊界像素梯度閾值和邊界塊的量化參數(shù)決定的。DBF 處理時(shí),先對(duì)整個(gè)圖像的垂直邊緣進(jìn)行水平濾波,然后對(duì)水平邊緣進(jìn)行垂直濾波。濾波過(guò)程實(shí)際上就是對(duì)像素值進(jìn)行修正的過(guò)程,讓方塊看起來(lái)不那么明顯。H.264 中也存在 DBF 技術(shù),但是應(yīng)用于 4*4 大小的處理塊,而 H.265 中應(yīng)用于 8*8 大小的處理塊。

          SAO 是 H.265 新引入的對(duì)重建圖像的誤差補(bǔ)償機(jī)制,用于改善振鈴效應(yīng)。振鈴效應(yīng)是指圖像的灰度值劇烈變化產(chǎn)生的震蕩,產(chǎn)生振鈴效應(yīng)主要原因是DCT變換后高頻信息丟失。SAO 的原理就是通過(guò)對(duì)重構(gòu)曲線(xiàn)的波峰像素添加負(fù)值補(bǔ)償,波谷添加正值補(bǔ)償,從而減小高頻信息的失真。和 DBF 只作用于邊界像素不同,SAO 作用于塊中所有的像素。


          08

          小結(jié)

          本文從 H.265 整體編碼流程的角度,介紹了 H.265 編碼涉及到的分塊、預(yù)測(cè)、變換、量化、編碼、環(huán)路濾波等技術(shù)點(diǎn)。通過(guò)了解這些編碼原理,為我們后續(xù)進(jìn)一步學(xué)習(xí)音視頻開(kāi)發(fā)技術(shù)奠定扎實(shí)的基礎(chǔ)。


          最后歡迎大家加入 音視頻開(kāi)發(fā)進(jìn)階 知識(shí)星球 ,這里有知識(shí)干貨、編程答疑、開(kāi)發(fā)教程,還有很多精彩分享。


          更多內(nèi)容可以在星球菜單中找到,隨著時(shí)間推移,干貨也會(huì)越來(lái)越多!!!


          給出 10元 優(yōu)惠券,漲價(jià)在即,目前還是白菜價(jià),基本上提幾個(gè)問(wèn)題就回本,投資自己就是最好的投資!!!


          加我微信 ezglumes ,拉你進(jìn)技術(shù)交流群

          推薦閱讀:

          音視頻開(kāi)發(fā)工作經(jīng)驗(yàn)分享 || 視頻版

          OpenGL ES 學(xué)習(xí)資源分享

          開(kāi)通專(zhuān)輯 | 細(xì)數(shù)那些年寫(xiě)過(guò)的技術(shù)文章專(zhuān)輯

          Android NDK 免費(fèi)視頻在線(xiàn)學(xué)習(xí)!!!

          你想要的音視頻開(kāi)發(fā)資料庫(kù)來(lái)了

          推薦幾個(gè)堪稱(chēng)教科書(shū)級(jí)別的 Android 音視頻入門(mén)項(xiàng)目

          覺(jué)得不錯(cuò),點(diǎn)個(gè)在看唄~


          瀏覽 30
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  人人操人人网站大全 | 91 日韩 国产 | 久久久久亚洲AV成人片乱码 | 中文字幕破解一区 | 在线的成人网站 |