Teknologian jakaminen

H264-videokoodauksen (03) tiedonpakkausprosessin ja siihen liittyvien käsitteiden systemaattinen oppiminen

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Huomautus: Viitataan Golden Circle -oppimismenetelmään (mikä on kultaisen ympyrän sääntö? -> Malli Golden Circle Rule, tässä artikkelissa käytetään: miksi-mitä) oppiaksesi äänen H264-videokoodauksen. Tämä artikkelisarja keskittyy videokoodauksen tietojärjestelmän ja käytännön menetelmien ymmärtämiseen. Teoreettinen puoli selittää tarkemmin audion ja videon käsitteiden alkuperää ja eri käsitteiden välistä yhteyttä. Tiedä kuinka se on, tiedä miksi se on niin. Samalla painotetaan enemmän tietojärjestelmien rakentamista.

Tässä artikkelissa puhumme pääasiassa H.264-tietojen pakkausprosessista ja siihen liittyvistä käsitteistä. H.264-tiedonpakkauksella on vain yksi tarkoitus, pakata, pakata ja uudelleenpakkaus videodatan koon pienentämiseksi ja samalla varmistaa kuvanlaatu mahdollisimman paljon. Joten ennen kuin opimme H.264-tietojen pakkaamisen, meidän on ensin ymmärrettävä: Vaikka tähän prosessiin liittyy monia käsitteitä ja menetelmiä, kaikki menetelmät ja prosessit ovat tätä tarkoitusta varten: pakkaus.

1 H.264-tietojen pakkausprosessin tulkinta

H.264:n tietojen pakkausprosessi on pääosin tiivistetty seuraaviin avainvaiheisiin: makrolohkojako ja alilohkojako -> kehysten ryhmittely -> kehysten ennustaminen -> kokonaisluku diskreetti kosinimuunnos (DCT) -> CABAC-pakkaus. Tarkat laajennusohjeet ovat seuraavat.

1.1 Jaa makrolohkot && jaa alilohkoihin

Makrolohko: Voidaan ymmärtää, että kun videokehys lähetetään H264-enkooderin puskuriin, kooderi jakaa makrolohkot jokaiseen kuvaan. Oletusarvoisesti H264-koodaus käyttää 16x16 pikselin aluetta makrolohkona (H265 käyttää 64x64 pikselin aluetta Videon kehyksen jakaminen makrolohkoihin on seuraava:

Kokonaisvaikutus makrolohkojaon jälkeen

Samalla yllä olevassa kuvassa voimme itse asiassa jakaa 16X16 pikselin makrolohkon pienempiin alilohkoihin. Alalohkon koko voi olla 8X16、16X8、8X8、4X8、8X4、4X4 on erittäin joustava. Sen taas jakamisen alilohkoihin tarkoituksena on tallentaa nämä tiedot hyvin pienillä tiedoilla. Kun makrolohkot on jaettu, kaikki H264-enkooderin välimuistissa olevat kuvat voidaan ryhmitellä.

Makrolohkojen ja alilohkojen jako mahdollistaa videokoodauksen analysoimaan ja prosessoimaan videosisältöä tarkemmin ja saavuttamaan tehokkaamman tiedonpakkauksen. Videokehykset on jaettu makrolohkoihin, joiden koko on 16x16 pikseliä, ja nämä makrolohkot voidaan jakaa edelleen pienempiin lohkoihin, kuten 8x8, 8x4, 4x8 jne. kuvasisällön monimutkaisuuden huomioon ottamiseksi.

1.2 Kehysryhmittely

Kehysryhmittely (GOP-rakenne) määritellään ennen sisäistä ennustetta ja välistä ennustetta. Videokoodausprosessissa kehysten ryhmittelyn asettaminen on yksi alkuvaiheista, joka määrittää videokehysten organisoinnin ja koodausjärjestyksen. Kehysryhmittelyn päätarkoitus on vähentää tietojen redundanssia. Videodatan redundanssi on jaettu pääasiassa kahteen luokkaan:

  • Ajallinen datan redundanssi, joka edellyttää kehysten välisen ennustuspakkauksen käyttöä, muodostaa suuremman osuuden(Koska vaikka kamera kaappaa 30 kuvaa sekunnissa, nämä 30 datakehystä liittyvät useimmissa tapauksissa toisiinsa. Dataa voi olla enemmän kuin 30 kehystä, ja ehkä kymmenet datakehykset liittyvät erityisen läheisesti toisiinsa. Ja korrelaatio on Erityisesti suljetuissa kehyksissä meidän tarvitsee vain tallentaa avainkehys(kehystän)dataa, muita kehyksiä(B-kehys ja P-kehys)Kaikki voidaan ennustaa tämän kehyksen kautta tiettyjen sääntöjen mukaan, joten videodatalla on eniten ajallista redundanssia).
  • Paikkatietojen redundanssi, joka edellyttää kehyksen sisäisen ennusteen pakkausta, muodostaa suhteellisen pienen osan.

H264-kehysryhmittelyn suoritusvaiheet:

  1. Joka kerta kun kaksi vierekkäistä kehystä otetaan pois makrolohkovertailua varten, ja näiden kahden kehyksen samankaltaisuus lasketaan.
  2. Samankaltaisuus saavutetaan kvantifioinnin jälkeen: Jos pikselit, joilla on eroja, ovat vain 10 %:n sisällä pisteistä, kirkkausero muuttuu enintään 2 % ja väriero muuttuu vain 1 %:n sisällä, uskomme, että sellaiset kuvat voidaan ryhmitellä yhteen ryhmään.

Kun ryhmittely on valmis, kehysennusteen pakkaamisen ongelma alkaa ratketa.

1.3 Kehyksen ennusteen pakkaus

Tämä osa sisältää pääasiassa kehysten välisen ennustamisen ja kehysten välisen ennustamisen. Kehyksen sisäinen ennuste on pakata staattiset kuvakehykset, ennustaa kunkin makrolohkon pikseliarvo 9 eri tilassa ja laskea sitten jäännösarvo alkuperäisestä kuvasta. Kuvien välinen ennuste (liikkeen estimointi ja liikkeen kompensointi): Etsi P- ja B-kehysten liikevektori edellisen kehyksen tai kahden kehyksen välillä liikkeen arvioinnin avulla, suorita sitten liikkeen kompensoinnin ennuste, luo ennustettu kuva ja laske jäännösarvo nykyinen kehys.

Huomautus: Sisäisen ennusteen ja välisen ennusteen järjestys riippuu koodatun kehyksen tyypistä ja koodausstrategiasta. Todellisessa videoenkooderin toteutuksessa nämä vaiheet ovat osa koodausprosessia, ja kooderi käsittelee ne automaattisesti. Sen ei tarvitse olla se, joka sen ensin hoitaa.

1.3.1 Sisäinen ennuste

Kehyksen sisäinen ennustuspakkaus: ratkaisee paikkatietojen redundanssiongelman. Ilmatilan redundanttidata viittaa väreihin, kirkkauteen jne., joka on tarkoitettu pääasiassa ihmissilmälle epäherkille tiedoille. Koodaus pakataan poistamalla se.Kehyksen sisäisessä ennustamisessa käytetty periaate on, että ihmissilmä tunnistaa kuvat tietyssä määrin. Se on erittäin herkkä matalataajuiselle kirkkaudelle ja vähemmän herkkä korkeataajuiselle kirkkaudelle.(Se voidaan ymmärtää makrolohkokooksi 16x16. H264:ssä muuta dataa ennustetaan ylimmän 16 ja vasemmanpuoleisen 16 pikselin kautta, jotta pikselien esitystiedot, jotka alun perin vaativat 16*16=256, voidaan muuntaa 16+:ksi. 16-1 = 31 pikseliä edustamaan tietoa)

1.3.2 Kuvien välinen ennuste (liikkeen estimointi ja liikkeen kompensointi)

Interframe-ennusteen pakkaus (liikkeen estimointi ja kompensointi): ratkaisee aika-alueen datan redundanssin ongelman. Videossa on useita kehyksiä, jotka on järjestetty lineaarisesti kronologiseen järjestykseen. Kehysten välinen korrelaatio on erittäin vahva, joten kehysten välillä on paljon dataa, jota voidaan poistaa.Pakkauksen jälkeen se jaetaan kolmeen tyyppiin: I-kehys, P-kehys ja B-kehys.(Selitys: Liikkeen arvioinnin ja kompensoinnin periaate: H264-enkooderi ottaa ensin kaksi ruutua videodataa puskurin otsikosta peräkkäin ja suorittaa sitten makrolohkoskannauksen. Kun havaitaan, että yhdessä kuvassa on objekti, se etsii lähistöä (hakuikkunassa), jos kohde löytyy toisesta kuvasta, voidaan laskea kohteen liikevektori Alla oleva kuva on biljardipallon sijainti haun jälkeen.

P-kehykselle ja B-kehykselle liikeestimaatiota käytetään liikevektorin löytämiseksi edellisen kehyksen tai kahden kehyksen välillä, ja sitten suoritetaan liikkeen kompensointiennuste ennustetun kuvan luomiseksi, ja nykyisen kehyksen jäännös lasketaan.

1.4 Kokonaisluvun diskreetti kosinimuunnos (DCT, Diskreetti kosinimuunnos

Tämä vaihe suorittaa pääasiassa DCT-muunnoksen ennustusjäännökselle, muuntaa spatiaalisen korrelaation epäolennaiseksi dataksi taajuusalueella ja kvantisoi sen sitten. DCT:tä käytetään pääasiassa tietojen tai kuvien pakkaamiseen, jolloin spatiaalinen korrelaatio muunnetaan epäolennaiseksi dataksi taajuusalueella ja sen jälkeen kvantisoidaan.(Selitys: DCT-muunnos voi kerätä yhteen tärkeämpää tietoa kuvasta, ja merkityksettömät taajuusalueen alueet ja kertoimet voidaan rajata suoraan)

Yhteenveto: Kehystietojen pakkausjärjestys on suorittaa ensin kehysten välinen ja kehysten välinen pakkaus ja sitten suorittaa DCT-muunnos jäännösdatalle tietojen korrelaation poistamiseksi ja datan edelleen pakkaamiseksi. Seuraavasti:

1.5 CABAC-pakkaus

CABAC-pakkaus on häviötön pakkaustekniikka ja entropiakoodausmenetelmä. Kun CABAC on pakattu ja koodattu, korkeataajuinen data määritellään lyhyiksi koodeiksi ja matalataajuinen data pitkiksi koodeiksi. Tämä menetelmä on tehokkaampi kuin VLC-menetelmä. CABAC-entropiakoodausmenetelmää (Context-Adaptive Binary Arithmetic Coding) käytetään kvantisoitujen kertoimien pakkaamiseen edelleen pakkaustehokkuuden parantamiseksi. Tässä edellisessä neljässä vaiheessa käsitelty data koodataan lopulliseen koodivirtaan käyttämällä koodausalgoritmia. Lopulliset pakatut kehykset jaetaan: I-kehykset, P-kehykset ja B-kehykset. Kun häviötön CABAC-pakkausmenetelmä on suoritettu, saadaan videokoodivirta.

2 Aiheeseen liittyvät käsitteet tietojen pakkausprosessissa

2.1 Datan redundanssi ajassa ja tilassa

Tilatietojen redundanssi ja ajallisen datan redundanssi ovat kaksi videon pakkaamisen peruskäsitettä. Ne kuvaavat toistuvaa tietoa videokehysten sisällä ja niiden välillä.

Spatiaalisen redundanssin tulkinta

  • Se viittaa yhden videokehyksen vierekkäisten pikselien väliseen samankaltaisuuteen tai korrelaatioon, mikä johtaa tietojen päällekkäisyyteen. Luonnollisten kuvien jatkuvuuden vuoksi vierekkäisillä pikseleillä on yleensä samanlaiset kirkkaus- tai väriarvot.
  • Tyypillisiä esimerkkejä spatiaalisesta redundanssista ovat suuret yksiväriset alueet, gradientit tai hitaasti muuttuvat pintakuviot.
  • Videon pakkausalgoritmit vähentävät spatiaalista redundanssia spatiaalisen ennustamisen avulla, muuntavat koodausta (kuten DCT) ja muita tekniikoita, muuntavat kuvan spatiaalisesta alueesta taajuusalueelle ja keskittävät energian muutamiin kertoimiin pakauksen tarkoituksen saavuttamiseksi.

Ajallisen redundanssin tulkinta

  • Viittaa samankaltaisuuteen, joka esiintyy videojakson peräkkäisten kehysten välillä, eli sama kohde tai kohtaus peräkkäisissä kehyksissä ei visuaalisesti muutu merkittävästi.
  • Ajallinen redundanssi ilmenee yleensä, kun kamera on paikallaan tai kohteet liikkuvat hitaasti, ja vain pieni alue muuttuu seuraavissa kuvissa edelliseen kuvaan verrattuna.
  • Videon pakkausalgoritmit vähentävät ajallista redundanssia käyttämällä tekniikoita, kuten kehysten välistä ennustamista, liikkeen estimointia ja liikkeen kompensointia, käyttämällä edellisten ja seuraavien kehysten välistä korrelaatiota kehysten välisten erojen ennustamiseen ja koodaamiseen sen sijaan, että jokainen kehys koodaa kokonaan.

2.2 Jäännöstietojen ja niihin liittyvien käsitteiden tulkinta

H.264-videopakkauksessa jäännöstiedot viittaavat alkuperäisen videokuvan ja ennustetun kuvan väliseen eroon. Samanaikaisesti, jos haluat saada syvällisemmän ymmärryksen jäännöstiedoista, sinun on ymmärrettävä seuraavat käsitteet, kuten alla on esitetty:

  1. ennustettu kehys : Videon koodausprosessin aikana käytetään intra-ennustetta (Intra Prediction) tai inter-ennustetta (Inter Prediction) ennustettujen kehysten luomiseen. Sisäinen ennuste perustuu nykyisen kehyksen pikselitietoihin, kun taas välinen ennuste perustuu edellisten tai seuraavien kehysten liikkeen kompensointitietoihin.

  2. alkuperäinen kehys: Viittaa alkuperäisiin kuvaruutuihin, jotka on todella otettu videosarjassa.

  3. Jäännöslaskenta : Jäännöstiedot lasketaan vähentämällä ennustettu kehys alkuperäisestä kehyksestä. Jäännösdata edustaa eroa ennustetun kehyksen ja alkuperäisen kehyksen välillä.

Yllä olevien käsitteiden pohjalta voimme ymmärtää paremmin jäännöstietojen ominaisuuksia:

  • Jäännösdatalla on yleensä korkea spatiaalinen satunnaisuus, koska ennustekehys on poistanut suurimman osan redundantista tiedosta. Tämä satunnaisuus tekee jäännösdatasta sopivan jatkopakkaukseen muunnoksen ja kvantisoinnin avulla.

  • Kun jäännöstiedot on käsitelty kokonaislukudiskreetillä kosinimuunnolla (IDCT) ja kvantisoinnilla, tiedon määrää voidaan vähentää merkittävästi. Transformaatio muuntaa residuaalin kaksiulotteisen spatiaalisen tiedon taajuusinformaatioksi, kun taas kvantisointi vähentää näiden kertoimien tarkkuutta ja poistaa ihmissilmälle huomaamattomat yksityiskohdat.

Jäännösdatan koodauksen tarkoituksena on edelleen vähentää videodatan bittinopeutta säilyttäen samalla kuvanlaatu mahdollisimman paljon. Samaan aikaan jäännösdatan tehokas pakkaus on ratkaisevan tärkeää H.264-koodauksen tehokkuudelle, koska se vaikuttaa suoraan koodatun videon laatuun ja tarvittavaan tallennus- tai lähetyskaistanleveyteen.

2.3 Entropiakoodaukseen liittyvät käsitteet ja laajennettu tulkinta

Entropiakoodaus on häviötön tiedonpakkaustekniikka, joka perustuu informaatioentropian käsitteeseen ja pyrkii esittämään dataa mahdollisimman pienellä bittimäärällä. Entropiakoodauksen ydinajatus on allokoida vähemmän bittejä symboleille, joita esiintyy todennäköisemmin, ja allokoida enemmän bittejä symboleille, jotka esiintyvät harvemmin. Tällä tavalla haluttu tallennustila tai lähetyskaistanleveys pienenee, koska koko tietojoukon keskimääräinen bittinopeus pienenee.

Entropiakoodausta käytetään usein tekstin ja tietyntyyppisten tietojen pakkaamiseen, ja se voi parantaa merkittävästi pakkaustehoa, varsinkin kun tiedoilla on merkittävästi epäyhtenäinen todennäköisyysjakauma. Videon pakkauskoodauksessa videon pakkaamiseen läheisimmin liittyvät entropiakoodausmenetelmät sisältävät pääasiassa seuraavat:

  • Huffman koodaus : Huffman-koodaus on perusentropiakoodaustekniikka, jota käytetään monissa videopakkausstandardeissa (kuten JPEG, MPEG-sarja). Se määrittää jokaiselle symbolille vaihtuvapituisen koodin Huffman-puun kautta, joka on rakennettu symbolin esiintymistiheyden perusteella.
  • Aritmeettinen koodaus : Aritmeettinen koodaus on otettu käyttöön joissakin videopakkausstandardeissa (kuten JPEG-LS, JPEG 2000). Se käyttää murto-osaväliä edustamaan syöttötietojen todennäköisyysjakaumaa ja tarjoaa yleensä paremman pakkaustehokkuuden kuin Huffman-koodaus.
  • Kontekstipohjainen adaptiivinen binääriaritmeettinen koodaus (CABAC) : CABAC on entropiakoodausmenetelmä, jota käytetään H.264/AVC- ja H.265/HEVC-videopakkausstandardeissa. Se yhdistää aritmeettisen koodauksen ja kontekstin mukautuksen käsitteet ja voi dynaamisesti säätää koodausprobabilistista mallia kontekstuaalisen tiedon perusteella, mikä saavuttaa tehokkaamman koodauksen.
  • Variable Length Coding (VLC) : VLC on yleinen termi, jota käytetään kuvaamaan koodausmenetelmiä, mukaan lukien Huffman-koodaus, jotka osoittavat muuttuvapituisia koodeja symboleille. Videon pakkaamisessa VLC viittaa yleensä koodausmenetelmään, jota käytetään edustamaan muunnoskertoimia ja niin edelleen.

Videopakkauksessa entropiakoodaus on viimeinen koodausvaihe, jota käytetään jäännösdatan koodaamiseen sisäisen ja keskinäisen ennustuksen jälkeen. Jäännösdata on ero alkuperäisen datan ja ennustetun datan välillä, ja sillä on yleensä vähemmän energiaa ja epätasaisempi todennäköisyysjakauma. Entropiakoodauksen avulla näiden jäännösdatan bittinopeutta voidaan edelleen vähentää, jolloin saavutetaan videodatan pakkaamisen tarkoitus.