Kuidas videokoodek töötab. Osa 2. Mis, milleks, kuidas

Esimene osa: Videotehnoloogia ja piltide alused

Kuidas videokoodek töötab. Osa 2. Mis, milleks, kuidas

Mida? Videokodek on tarkvara/riistvara osa, mis tihendab ja/vÔi lahtipakkib digitaalset videot.

Milleks? Hoolimata anumĂ”ningatest piirangutest nii ribalaiuse kui ka salvestusruumi osas, nĂ”uab turg ĂŒha kvaliteetsemat videot. Kas mĂ€letate, kuidas eelmisel postitusel arvutasime, et 30 kaadrit sekundis, 24 bitti pikseli kohta ja 480×240 resolutsiooniga on vajalik minimaalne 82,944 Mbit/s ilma tihendamiseta? Tihendamine on praegu ainus vĂ”imalus edastada HD/FullHD/4K televisiooni ekraanidele ja internetti. Kuidas see saavutatakse? Vaatame lĂŒhidalt peamisi meetodeid.
ja andmete salvestamise mahu osas nĂ”uab turg ĂŒha kvaliteetsemat videot. Kas mĂ€letate, kuidas me eelmine kord arvutasime vajaliku miinimumi 30 kaadrit sekundis, 24 bitti pikseli kohta, eraldusvĂ”imega 480×240? Saime 82,944 Mbit/s ilma pakkimata. Pakkimine on praegu ainus viis HD/FullHD/4K edastamiseks televisiooniekraanidele ja internetti. Kuidas seda saavutatakse? Vaatame nĂŒĂŒd lĂŒhidalt peamisi meetodeid.

Kuidas videokoodek töötab. Osa 2. Mis, milleks, kuidas

TÔlge on tehtud EDISON Software'i toetusel.

Me tegeleme videovalve sĂŒsteemide integreerimisega, samuti arendame mikrotomograafi.

Kodek vs konteiner

Algajate sagedane eksitus on segi ajada digitaalvideo kodek ja digitaalvideo konteiner. Kokkulepe on mingi formaat. See on anum, mis sisaldab video (ja vÔimalusel ka audio) metaandmeid. Tihendatud videot vÔib pidada konteineri kasulikuks laadimiseks.

Videofaili laiend tavaliselt nĂ€itab selle konteineri tĂŒĂŒpi. NĂ€iteks fail video.mp4 on tĂ”enĂ€oliselt konteiner. MPEG-4 Part 14, kuid fail nimega video.mkv on tĂ”enĂ€oliselt matrioĆĄka. Et olla tĂ€ielikult kindel kodeki ja konteineri formaadi osas, saab kasutada FFmpeg vĂ”i MediaInfo.

Veidi ajalugu

Enne kui lÀheme edasi Kuidas?, uurime veidi ajalugu, et mÔista paremini mÔningaid vanemaid kodekeid.

Videokodek H.261 tuli vÀlja 1990. aastal (tehniliselt 1988) ja see loodi 64 Kbit/s andmeedastuskiirusel töötamiseks. Sellega kasutati juba selliseid ideid nagu vÀrvisubdiskreetimine, makroblokid jne. 1995. aastal avaldati videokodeki standard H.263, mis arenes edasi kuni 2001. aastani.

2003. aastal lĂ”petati esimese versiooni H.264/AVC. Samal aastal kĂ€ivitas ettevĂ”te „TrueMotion“ oma tasuta lossidega videokodeki nimega VP3. 2008. aastal ostis Google selle ettevĂ”tte, kĂ€ivitades VP8 samal aastal. Detsembris 2012 vabastas Google VP9, ja seda toetab umbes Ÿ brauseriturust (sealhulgas mobiilised seadmed).

AV1 — see on uus avatud lĂ€htekoodiga videokooder, mille arendas vĂ€lja Avatud Meedia Allianss (AOMedia), kuhu kuuluvad tuntud ettevĂ”tted nagu: Google, Mozilla, Microsoft, Amazon, Netflix, AMD, ARM, NVidia, Intel ja Cisco. Esimene kooderi versioon 0.1.0 avaldati 7. aprillil 2016.

AV1 sĂŒnd

2015. aasta alguses töötas Google VP10, Xiph (mis kuulub Mozilla'le) töötas Daala, ja Cisco lÔi oma tasuta videokooderi nimega Thor.

SeejĂ€rel MPEG LA tundis algselt muret aastaste piirangute ĂŒle HEVC (H.265) ja tasu, mis oli 8 korda kĂ”rgem kui H.264, kuid hiljem muutsid nad reegleid taas:

ilma aastaste piiranguteta,
tasu sisu eest (0,5% tulust) ja
tasu tooteĂŒhiku kohta, mis oli umbes 10 korda kĂ”rgem kui H.264.

Avatud Meedia Allianss loodi erinevate valdkondade ettevÔtete poolt: riistvara tootjad (Intel, AMD, ARM, Nvidia, Cisco), sisuteenuse pakkujad (Google, Netflix, Amazon), brauserite arendajad (Google, Mozilla) ja teised.

EttevĂ”tetel oli ĂŒhine eesmĂ€rk — litsentsitasudeta videokooder. SeejĂ€rel ilmus AV1 kaugelt lihtsama patendilitsentsiga. Timothy B. Terriberry tegi vapustava esitluse, mis on aluseks praegusele AV1 kontseptsioonile ja selle litsentsimudelile.

Teid ĂŒllatab, et AV1 koodekit saab analĂŒĂŒsida brauseri kaudu (huvilised vĂ”ivad kĂŒlastada aomanalyzer.org).

Kuidas videokoodek töötab. Osa 2. Mis, milleks, kuidas

Universaalne koodek

Vaatame ĂŒle universaalse videotöötluskoodeki pĂ”himehhanismid. Enamik neist kontseptsioonidest on kasulikud ja neid kasutatakse kaasaegsetes koodekites, nagu VP9, AV1 ja HEVC. Hoian kĂ€es, et paljusid selgitatud asju lihtsustatakse. mĂ”nikord kasutatakse reaalseid nĂ€iteid (nagu H.264 puhul) tehnoloogiate demonstreerimiseks.

1. samm – pildi jagamine

Esimene samm on kaadri jagamine mitmeks osaks, alamosas ja edasi.

Kuidas videokoodek töötab. Osa 2. Mis, milleks, kuidas

Miks? On palju pÔhjuseid. Kui me jagame pildi, saame tÀpsemalt ennustada liikumisvektorit, kasutades vÀikeseid osi vÀikeste liikuvate elementide jaoks. Samas saab staatilise tausta puhul piirduda ka suuremate osadega.

Tavaliselt korraldavad koodekid need osad sektsioonidesse (vĂ”i fragmentidesse), makrobloeckidesse (vĂ”i koodipuude plokkidesse) ja mitmesse alamsektsiooni. Nende osade maksimaalne suurus varieerub; HEVC seab piiriks 64×64, samas kui AVC kasutab 16×16, ning alamsektsioonid vĂ”ivad olla kuni 4×4.

Kas mÀletate kaadreid eelmisest artiklist?! Seda saab rakendada ka plokkidele, seega vÔivad meil olla I-fragment, B-plokk, P-makrobloeck jne.

Neile, kes soovivad harjutada — vaadake, kuidas pilt jaguneb osadeks ja alamseksioonideks. Selleks saab kasutada juba eelnevalt mainitud tööriista Intel Video Pro Analyzer (see, mis on tasuline, kuid millel on tasuta prooviversioon, millel on piirang esimesed 10 kaadrit). Siin analĂŒĂŒsitakse sektsioone. VP9:

Kuidas videokoodek töötab. Osa 2. Mis, milleks, kuidas

2. samm — prognoosimine

Kui meil on osad olemas, saame nende pÔhjal koostada astroloogilisi prognoose. Selleks INTER-prognoosimise korral on vaja edastada liikumise vektorid ja jÀÀk, samas kui INTRA-prognoosimise puhul edastatakse prognoosi suund ja jÀÀk.

3. samm — teisendamine

PĂ€rast seda, kui oleme saanud jÀÀkploki (ennetatud osa → tegelik osa), on vĂ”imalik seda muuta nii, et teame, millised pikslid saab kĂ”rvale jĂ€tta, sĂ€ilitades samas ĂŒldise kvaliteedi. On olemas teatud teisendusi, mis tagavad tĂ€pse kĂ€itumise.

Kuigi on ka teisi meetodeid, vaatame neid lĂ€hemalt. diskreetne kosinusmuundumine (DCT — lĂŒhend diskreetne kosinusmuundumine). DCT peamised omadused:

  • Muudab piksliplokid ĂŒhesuurusteks sageduskoefitsiendi plokkideks.
  • Kondenseerib energiat, aidates kaotada ruumilist ĂŒlemÀÀrasust.
  • Tagab pööratavuse.

2. veebruaril 2017 avaldasid Cintra R.J. ja Bayer F.M. artikli DCT-sarnaste muundumiste kohta piltide kokkusurutamiseks, mis vajavad vaid 14 lisandit.

Ärge muretsege, kui te ei mĂ”istnud iga punkti eeliseid. Praegu veendume, et need on tĂ”eliselt vÀÀrtuslikud, konkreetsete nĂ€idete kaudu.

VĂ”tame nĂ€iteks sellise 8×8 piksliploki:

Kuidas videokoodek töötab. Osa 2. Mis, milleks, kuidas

See plokk renderdatakse jÀrgmiseks 8 x 8 piksliseks pildiks:

Kuidas videokoodek töötab. Osa 2. Mis, milleks, kuidas

Kohaldame DCT-d sellele piksliplokile ja saame 8×8 koefitsiendi ploki:

Kuidas videokoodek töötab. Osa 2. Mis, milleks, kuidas

Ja kui renderdame selle koefitsientide ploki, saame sellise pildi:

Kuidas videokoodek töötab. Osa 2. Mis, milleks, kuidas

Kuidas nÀeme, see ei sarnane algsele pildile. Saame mÀrgata, et esimene koefitsient erineb tugevalt kÔigist teistest. See esimene koefitsient on tuntud kui DC-koefitsient, mis esindab kÔiki valimisi sisendis, midagi sarnast keskmisele vÀÀrtusele.

Sellel koefitsientide plokil on huvitav omadus: see eraldab kÔrgsageduskomponendid madalsageduskomponentidest.

Kuidas videokoodek töötab. Osa 2. Mis, milleks, kuidas

Pildis on enamik vÔimsusest koondunud madalamatele sagedustele, seetÔttu, kui teisendame pildi selle sageduskomponentideks ja kÔrvaldame kÔrgeima sageduse koefitsiendid, saame vÀhendada pildi kirjeldamiseks vajalike andmete hulka, ohverdamata liiga palju kvaliteeti.

Sagedus tÀhendab, kui kiiresti signaal muutub.

Katsume rakendada teadlikkust, mida omandatud testnÀites, muutes algse pildi selle sageduseks (koefitsientide plokk), kasutades DCT-d, ja seejÀrel kÔrvaldame vÀhem olulised koefitsiendid.

Esmalt konverteerime selle sagedusvaldkonda.

Kuidas videokoodek töötab. Osa 2. Mis, milleks, kuidas

Edasi viskame osa (67%) koefitsientidest, peamiselt alumise parempoolsest osast.

Kuidas videokoodek töötab. Osa 2. Mis, milleks, kuidas

LÔpuks taastame pildi sellest visatud koefitsiendiblokist (pidage meeles, et see peab olema pööratav) ja vÔrdleme originaaliga.

Kuidas videokoodek töötab. Osa 2. Mis, milleks, kuidas

NÀeme, et see sarnaneb algse pildiga, kuid originaalist on palju erinevusi. Oleme eemaldanud 67,1875% ja saadud midagi, mis meenutab esialgset allikat. Koefitsiendite viskamine oleks vÔinud olla lÀbimÔeldum, et saada veel parema kvaliteediga pilt, kuid see on juba jÀrgmine teema.

Iga koefitsient moodustatakse kasutades kÔiki pikslite

Oluline: iga koefitsient ei kuva otse ĂŒhte pikslit, vaid esindab kĂ”igi pikslite kaalutud summat. See imeline joonis nĂ€itab, kuidas arvutatakse esimene ja teine koefitsient, kasutades iga indeksi jaoks ainulaadseid kaalusid.

Kuidas videokoodek töötab. Osa 2. Mis, milleks, kuidas

Saate proovida visualiseerida DCT-t, vaadates lihtsalt pildi loomist selle pĂ”hjal. NĂ€iteks on siin sĂŒmbol A, mis on loodud iga koefitsiendi kaalu abil:

Kuidas videokoodek töötab. Osa 2. Mis, milleks, kuidas

4. samm — kvantimine

PÀrast seda, kui eelmisel sammul teatud koefitsiendid vÀlja visatakse, teeme viimases etapis (muundamine) spetsiaalset vormi kvantimist. Sel etapil on informatsiooni kaotamine lubatud. Lihtsamalt öeldes kvantime koefitsiente, et saavutada kompressioon.

Kuidas kvantida koefitsientide plokki? Üks lihtsamaid meetodeid on ĂŒhtlane kvantimine, kus vĂ”tame ploki, jagame selle ĂŒhe vÀÀrtusega (nĂ€iteks 10) ja ĂŒmardame saadud tulemuse.

Kuidas videokoodek töötab. Osa 2. Mis, milleks, kuidas

Kas suudame seda koefitsientide plokki tagasi pöörata? Jah, saame, korrutades selle sama vÀÀrtusega, millega jagasime.

Kuidas videokoodek töötab. Osa 2. Mis, milleks, kuidas

See lĂ€henemine ei ole parim, kuna see ei arvesta iga koefitsiendi tĂ€htsust. VĂ”iksime kasutada kvantimismaatriksit, mitte ĂŒhte vÀÀrtust, ja see maatriks vĂ”ib kasutada DCT omadust, kvantides enamik alumisi paremaid ja vĂ€hemuses ĂŒlemisi vasakuid.

5. samm – entroopia kodeerimine

PĂ€rast andmete kvantimist (pildi plokid, fragmendid, kaadrid) saame neid endiselt kaotusteta kokkusurutuna. Andmete kokkusurumiseks on palju algoritmilisi meetodeid. Tutvume lĂŒhidalt mĂ”nega, sĂŒgavamaks mĂ”istmiseks vĂ”ite lugeda raamatut „Kokkulepete mĂ”istmine: andmete kokkusurumine kaasaegsetele arendajatele“ (Understanding Compression: Data Compression for Modern Developers»).

Videokodeerimine VLC abil

Oletame, et meil on sĂŒmbolite voog: a, e, r ja t. Tabelis on esitatud tĂ”enĂ€osus (vahemikus 0 kuni 1) iga sĂŒmboli esinemiseks voos.

aert
TÔenÀosus0,30,30,20,2

Saame omistada unikaalsed binaarkoodid (eelistatavalt vÀikesed) kÔige tÔenÀolisematele ja suuremad koodid vÀhem tÔenÀolistele.

aert
TÔenÀosus0,30,30,20,2
Binaarkood0101101110

Surume voogu kokku, eeldades, et kulutame iga sĂŒmboli kohta 8 bitti. Ilma kokkusurumiseta kuluks iga sĂŒmboli kohta 24 bitti. Kui asendada iga sĂŒmbol tema koodiga, siis see toob kaasa kokkuhoidu!

Esimene samm on sĂŒmboli kodeerimine e, mis on 10, ja teine sĂŒmbol on a, mis lisatakse (mitte matemaatiliselt): [10] [0], ja lĂ”puks kolmas sĂŒmbol t, mis muudab meie lĂ”pliku surutud bittvoo vĂ”rdseks [10] [0] [1110] vĂ”i 1001110, mille jaoks on vaja vaid 7 bitti (3,4 korda vĂ€hem ruumi kui originaalis).

Pange tÀhele, et iga kood peab olema ainulaadne kood eelmÀÀratud prefiksiga. Huffmani algoritm aitab leida neid numbreid. Kuigi see meetod ei ole ilma puudusteta, on olemas videokodeerijad, mis pakuvad endiselt seda algoritmilist meetodit kompressiooniks.

N nii kodeerijal kui dekodeerijal peab olema juurdepÀÀs sĂŒmbolite tabelile koos nende binaarkoodidega. Seega on vajalik edastada sisendandmetele ka tabel.

Aritmeetiline kodeerimine

Oletame, et meil on sĂŒmbolite voog: a, e, r, s ja t, ja nende tĂ”enĂ€osus on esitatud selles tabelis.

aerst
TÔenÀosus0,30,30,150,050,2

Koostame selle tabeli alusel vahemikud, mis sisaldavad kĂ”iki vĂ”imalikke sĂŒmboleid, sorteeritud maksimaalse arvu jĂ€rgi.

Kuidas videokoodek töötab. Osa 2. Mis, milleks, kuidas

NĂŒĂŒd kodeerime kolme sĂŒmboli voo: eat.

Esialgu valime esimese sĂŒmboli e, mis asub vahemikus 0,3 kuni 0,6 (ilma nende hulgast). VĂ”tame selle vahemiku ja jagame selle uuesti samades proportsioonides, kuid juba selle uue vahemiku jaoks.

Kuidas videokoodek töötab. Osa 2. Mis, milleks, kuidas

JĂ€tkame meie voolu kodeerimist eat. NĂŒĂŒd vĂ”tame teise sĂŒmboli a, mis asub uues alamvahemikus 0,3 kuni 0,39, ja seejĂ€rel vĂ”tame meie viimase sĂŒmboli t ja kordame sama protsessi, et saada viimane alamvahemik 0,354 kuni 0,372.

Kuidas videokoodek töötab. Osa 2. Mis, milleks, kuidas

Peame lihtsalt valima numbri viimases alamvahemikus 0,354 kuni 0,372. Valime 0,36 (aga vÔime valida ka mis tahes muu numbri selles alamvahemikus). Ainult sellega saame taastada meie algse voolu. See on nagu joonistamine joonena vahemike sees meie voolu kodeerimiseks.

Kuidas videokoodek töötab. Osa 2. Mis, milleks, kuidas

Tagasioperatsioon (ehk siis dekodeerimine) on samuti lihtne: meie numbri 0,36 ja meie algse vahemikuga saame kĂ€ivitada sama protsessi. Kuid nĂŒĂŒd, kasutades seda numbrit, tuvastame voolu, mis on kodeeritud selle numbri abil.

Esimese vahemikuga mĂ€rkame, et meie number vastab lĂ”ikele, seega on see meie esimene sĂŒmbol. NĂŒĂŒd jagame jĂ€lle selle alamvahemiku, tehes sama protsessi nagu varem. Siin vĂ”ib nĂ€ha, et 0,36 vastab sĂŒmbolile a, ja protsessi kordamise jĂ€rel oleme jĂ”udnud viimase sĂŒmbolini t (formeerides meie algse kodeeritud voolu eat).

Nii kodeerijale kui dekooderile peab olema olemas sĂŒmbolite tĂ”enĂ€osuste tabel, seega tuleb sisenemisandmetes edastada ka see.

Üsna elegantne, eks? Keegi, kes selle lahenduse vĂ€lja mĂ”tles, oli ĂŒlimalt tark. MĂ”ned videokooderid kasutavad seda tehnikat (vĂ”i, igal juhul, pakuvad seda kui valikuvĂ”imalust).

KĂ€itumine seisneb kvantitud bitivoo kaotusteta kokkusurumises. Kindlasti puuduvad selles artiklis tohutult detaile, pĂ”hjuseid, kompromisse jne. Kuid kui olete arendaja, peaksite teadma rohkem. Uued kodeerijad pĂŒĂŒavad rakendada erinevaid entropiaga kodeerimise algoritme, nagu ANS.

6. samm – bitivoogude formaat

PĂ€rast kĂ”igi nende toimingute tegemist tuleb dekompressida kokkusurutud kaadrid, arvestades tehtud samme. Dekooder peab olema selgelt informeeritud kodeerija tehtud otsustest. Dekooderile tuleb anda kogu vajalik teave: bitisĂŒgavus, vĂ€rviruumi, eraldusvĂ”ime, prognooside teave (liikumisvektorid, suunatud INTER-prognoosimine), profiil, tase, kaadrisagedus, kaadritĂŒĂŒp, kaadri number ja palju muud.

Tutvustame pinnapealselt bitivoogu H.264. Meie esimene samm on luua minimaalne H.264 bitivoog (FFmpeg lisab vaikimisi kĂ”ik kodeerimise parameetrid, nĂ€iteks SEI NAL — Ă”pime hiljem, mis see on). Saame seda teha, kasutades meie enda hoidlat ja FFmpeg'i.

./s/ffmpeg -i /files/i/minimal.png -pix_fmt yuv420p /files/v/minimal_yuv420.h264

See kĂ€sk genereerib toore bitivoogu H.264 ĂŒhe kaadriga, resolutsiooniga 64×64, vĂ€rviruumiga YUV420. Kasutatakse jĂ€rgmine pilt kaadrina.

Kuidas videokoodek töötab. Osa 2. Mis, milleks, kuidas

H.264 bitivoog

Standart AVC (H.264) mÀÀrab, et teave saadetakse makrokadrites (vĂ”rgu mĂ”ttes), mida nimetatakse NAL (see on vĂ”rgu abstraktsioonitaseme mĂ”isted). NAL-i peamine eesmĂ€rk on pakkuda „vĂ”rgusĂ”bralikku“ video esitust. See standard peaks töötama televisioonides (voogude pĂ”hjal), Internetis (pakettide pĂ”hjal).

Kuidas videokoodek töötab. Osa 2. Mis, milleks, kuidas

On sĂŒnkroonimismĂ€rker, mis mÀÀrab NAL-elementide piirid. Igal sĂŒnkroonimismĂ€rkeril on vÀÀrtus 0x00 0x00 0x01, , vĂ€lja arvatud esimesel, mille vÀÀrtus on 0x00 0x00 0x00 0x01. Kui kĂ€ivitame hexdump H.264 bitivooge genereerimiseks tuvastame vĂ€hemalt kolm NAL mustrit faili alguses.

Kuidas videokoodek töötab. Osa 2. Mis, milleks, kuidas

Nagu mainitud, peab dekooder teadma mitte ainult pildidatal, vaid ka video, kaadrid, vĂ€rvid, kasutatavad parameetrid ja palju muud. Iga NAL-i esimene bait mÀÀrab selle kategooria ja tĂŒĂŒbi.

NAL tĂŒĂŒbi identifikaatorKirjeldus
0Tundmatu tĂŒĂŒp
1Kooditud pildifragmendi IDR ilma IDR
2Kooditud lÔikeandmete fragment A
3Kooditud lÔikeandmete fragment B
4Kooditud lÔikeandmete fragment C
5 Kooditud IDR fragment IDR-pildist
6TĂ€iendav teave SEI laiendamise kohta
7SPS-seeria parameetrite kogum
8PPS-pildi parameetrite kogum
9Sisenemise eraldaja
10JÀrjendi lÔpp
11Voogude lÔpp




Tavaliselt on esimene NAL bitivoog SPS. See NAL tĂŒĂŒp vastutab kodeerimise ĂŒldiste muutujaid, nagu profiil, tase, resolutsioon jne, teavitamise eest.

Kui sĂŒntaksivÀÀrisat prve markerit vahele jĂ€tta, saame dekodeerida esimese baidi, et teada, mis tĂŒĂŒpi NAL on esimene.

NĂ€iteks, esimene bait sĂŒntaksivÀÀristamise mĂ€rgise jĂ€rel on 01100111, kus esimene bitt (0) asub vĂ€ljadel forbidden_zero_bit. JĂ€rgmised 2 bitti (11) informeerivad meid vĂ€ljast nal_ref_idc, mis nĂ€itab, kas see NAL on viidatud vĂ€ljana vĂ”i mitte. Ja ĂŒlejÀÀnud 5 bitti (00111) informeerivad meid vĂ€ljast nal_unit_type, antud juhul on see SPS plokk (7) NAL.

Teine bait (binary=01100100, hex=0x64, dec=100) SPS NAL-is on see vÀli profile_idc, mis nÀitab profiili, mida kodeerija kasutas. Antud juhul kasutati piiratud kÔrget profiili (st kÔrge profiil ilma kahepoolse B-segmendi toeta).

Kuidas videokoodek töötab. Osa 2. Mis, milleks, kuidas

Kui tutvuda bitivoo spetsifikatsiooniga H.264 SPS NAL-i jaoks, siis leiame palju vÀÀrtusi parameetri nime, kategooria ja kirjelduse jaoks. NÀiteks vaatame parameetreid pic_width_in_mbs_minus_1 ja pic_height_in_map_units_minus_1.

Parameetri nimiKategooriaKirjeldus
pic_width_in_mbs_minus_10ue(v)
pic_height_in_map_units_minus_10ue(v)

Kui teeme nendest vÀli vÀÀrtustest teatud matemaatilisi toiminguid, saame resolutsiooni. VÔime esitada 1920 x 1080, kasutades pic_width_in_mbs_minus_1 vÀÀrtust 119 ((119 + 1) * macroblock_size = 120 * 16 = 1920). Taas, ruumi sÀÀstmiseks, kodeerimise asemel 1920 tegime seda 119-ga.

Kui jÀtkame meie loodud video kontrolleeringut binaarselt (nt: xxd -b -c 11 v/minimal_yuv420.h264), siis saame liikuda viimase NAL-i juurde, mis on kaader ise.

Kuidas videokoodek töötab. Osa 2. Mis, milleks, kuidas

Siin nĂ€eme selle esimesi 6 baitide vÀÀrtusi: 01100101 10001000 10000100 00000000 00100001 11111111. Kuna on teada, et esimene bait nĂ€itab NAL tĂŒĂŒp, siis on antud juhul (00101) tegemist IDR fragmendiga (5), ja seega saab seda veelgi uurida:

Kuidas videokoodek töötab. Osa 2. Mis, milleks, kuidas

Kasuta spetsifikatsiooni teavet, et dekodeerida fragmendi tĂŒĂŒp (slice_type) ja kaadrinumber (frame_num) teiste oluliste vĂ€ljade seas.

MÔnede vÀljade vÀÀrtuste saamiseks (ue(v), me(v), se(v) vÔi te(v)), peame dekodeerima frakmendi spetsiaalse dekooderiga, mis pÔhineb Golembi eksponentsiaalsel kodeerimisel. See meetod on vÀga efektiivne muutuva vÀÀrtuse kodeerimisel, eriti kui on palju vaikevÀÀrtusi.

VÀÀrtused slice_type ja frame_num Selle video vÀÀrtused on 7 (I-fragment) ja 0 (esimene kaader).

Biti voogu vÔib kÀsitleda kui protokolli. Kui soovite rohkem teada, uurige spetsifikatsiooni ITU H.264. Siin on makroskeem, mis nÀitab, kus asuvad pildiparameetrid (YUV komprimeeritult).

Kuidas videokoodek töötab. Osa 2. Mis, milleks, kuidas

VĂ”ib uurida ka teisi bitivooge, nagu VP9, H.265 (HEVC) vĂ”i isegi meie uusimat parimat bitivoogu AV1. Kas need on kĂ”ik sarnased? Ei, kuid kui mĂ”istate vĂ€hemalt ĂŒhte — on oluliselt lihtsam mĂ”ista teisi.

Soovite harjutada? Uurige H.264 bitivoogu

Saate genereerida ĂŒhekaadrilisi videoid ja kasutada MediaInfo, et uurida bitivoolu H.264. Tegelikult ei takista miski ka lĂ€htekoodi vaatamast, mis analĂŒĂŒsib bitivoolu H.264 (AVC).

Kuidas videokoodek töötab. Osa 2. Mis, milleks, kuidas

Praktikaks vÔite kasutada Intel Video Pro Analyzerit (olen juba aru saanud, et programm on tasuline, kuid seal on tasuta prooviversioon, millel on 10 kaadri piirang?).

Kuidas videokoodek töötab. Osa 2. Mis, milleks, kuidas

Ülevaade

Tuleb mĂ€rkida, et paljusid kaasaegseid koodekeid kasutatakse sama mudeli jĂ€rgi, mille just Ă”ppisime. Vaatame nĂŒĂŒd videokodeki vooskeemi Thor. See sisaldab kĂ”iki samme, mida oleme lĂ€binud. Selle mĂ€rkuse pĂ”hisisu on, et teil oleks vĂ€hemalt parem arusaam uuendustest ja dokumentatsioonist sellel alal.

Kuidas videokoodek töötab. Osa 2. Mis, milleks, kuidas

Varem arvutasime, et ĂŒhe tunni pikkuse 720p ja 30 fps video faili hoidmiseks lĂ€heb vaja 139 GB ketta ruumi. Kui kasutada selles artiklis kĂ€sitletud meetodeid (vahekaadri ja sisemised prognoosid, transformatsioon, kvantimine, entropiikodeerimine jne), on vĂ”imalik saavutada (arvestades, et kulutame 0,031 bitti pikseli kohta) tĂ€iesti rahuldava kvaliteediga video, mille suurus on vaid 367,82 MB, mitte 139 GB.

Kuidas H.265 saavutab paremat kokkusurumisastet kui H.264?

NĂŒĂŒd, kui me teame rohkem, kuidas kodeerijad töötavad, on lihtsam mĂ”ista, kuidas uued kodeerijad suudavad pakkuda kĂ”rgemat eraldusvĂ”imet vĂ€iksema andmemahtude kasutamisega.

Kui vÔrrelda AVC ja HEVC, tuleb meeles pidada, et see on peaaegu alati valik suurema CPU koormuse ja kokkusurumise astme vahel.

HEVC omab rohkem sektsioonide (ja alamsektsioonide) variante kui AVC, rohkem suundi sisemise prognoosimise jaoks, tÀiustatud entropiakodeerimine ja palju muud. KÔik need tÀiustused on teinud H.265 vÔimeliseks suruma 50% rohkem kui H.264.

Kuidas videokoodek töötab. Osa 2. Mis, milleks, kuidas

Esimene osa: Videotehnoloogia ja piltide alused

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster