Kuidas töötab videokooder. Osa 2. Mis, miks, kuidas

Esimene osa: Videote ja piltide töötamise alused

Kuidas töötab videokooder. Osa 2. Mis, miks, kuidas

Mis? Videokodek on osa tarkvarast/riistvarast, mis surub kokku ja/vÔi avab digitaalset videot.

Milleks? Hoolimata teatud piirangutest nii ribalaiuse kui ka andmete salvestusruumi osas, nĂ”uab turg jĂ€rjest kvaliteetsemat videot. Kas mĂ€letate, kuidas eelnevas postituses arvutasime minimaalset vajalikkust 30 kaadrit sekundis, 24 bitti pikseli kohta, eraldusvĂ”imega 480×240? Saime 82,944 Mbit/s surveta. Surumine on senini ainus viis HD/FulHD/4K edastamiseks teleriekraanidele ja internetti. Kuidas see saavutatakse? Praegu vaatame kokkuvĂ”tlikult peamisi meetodeid.
TÔlge on tehtud EDISON Software'i toetusel.

Kuidas töötab videokooder. Osa 2. Mis, miks, kuidas

Tegeleme

videovalve sĂŒsteemide integratsiooniga arendame mikrotomograafi, samuti Kodek vs konteiner.

Levinud algajate viga on segi ajada digitaalse video kodek ja digitaalse video konteiner. Konteiner on mingisugune formaat, mis sisaldab video (ja vÔib-olla ka heli) metaandmeid. Kompressitud videot vÔib kÀsitleda konteineri kasulikku koormana.

Tavaliselt nĂ€itab video faili laiend, milline on selle konteineri tĂŒĂŒp. NĂ€iteks fail video.mp4 on tĂ”enĂ€oliselt konteiner

MPEG-4 Part 14 , samas kui faili nimega video.mkv puhul on see tÔenÀoliseltmatrioƥka . Et olla tÀielikult kindel kodeki ja konteineri formaadi osas, vÔib kasutadaFFmpeg MediaInfo vÔi Natuke ajalugu.

Enne kui liigume edasi

, uurime natuke ajalugu, et paremini mÔista mÔningaid vanemaid kodekeid. Kuidas?Videokodek

H.261 ilmus 1990. aastal (tehniliselt 1988) ja loodi andmeedastuskiirusel 64 Kbit/s töötamiseks. Selles kasutati juba selliseid ideid nagu vÀrvisubdiske, makroblokid jne. 1995. aastal avaldati videokodeki standard H.263 , mis arenes edasi kuni 2001. aastani.2003. aastal lÔpetati esimene versioon

H.264/AVC . Samal aastal viis ettevĂ”te „TrueMotion” turule tasuta videokodeki, mis komprimeeris videot kaotava meetodiga nimegaVP3 . 2008. aastal ostis Google selle ettevĂ”tte ja vĂ€lja andisVP8 samal aastal. 2012. aasta detsembris avaldas Google VP9 , mis on toetatud umbes Ÿ browsereid (sealhulgas mobiilseadmeid)., ja see toetatakse umbes Ÿ brauserituru osast (sealhulgas mobiilseadmed).

AV1 on uus tasuta avatud lÀhtekoodiga videokoodek, mille on vÀlja töötanud Avatud meedia alianss (AOMedia), kuhu kuuluvad tuntud ettevÔtted nagu: Google, Mozilla, Microsoft, Amazon, Netflix, AMD, ARM, NVidia, Intel ja Cisco. Koodeki esialgne versioon 0.1.0 avaldati 7. aprillil 2016.

AV1 sĂŒnd

2015. aasta alguses töötas Google VP10, Xiph (mille omanik on Mozilla) töötas Daala, ja Cisco valmistas oma tasuta videokoodeki nimega Thor.

SeejÀrel MPEG LA kÔigepealt kuulutas aastased piirangud HEVC (H.265) ja tasu, mis on 8 korda kÔrgem kui H.264, kuid peagi muutsid nad reegleid taas:

ilma aastase piiranguta,
tasud sisu eest (0,5% tuludest) ja
tooteĂŒhiku tasu, mis on umbes 10 korda kĂ”rgem kui H.264.

Avatud meedia alianss loodi erinevate valdkondade ettevÔtete poolt: seadmete tootjad (Intel, AMD, ARM, Nvidia, Cisco), sisu tarnijad (Google, Netflix, Amazon), brauserid (Google, Mozilla) ja teised.

EttevĂ”tetel oli ĂŒhine eesmĂ€rk – vĂ€lja töötada videokoodek, mis ei nĂ”ua litsentsitasusid. Siis ilmub AV1 hoopis lihtsama patendilitsentsiga. Timothy B. Terriberry tegi hĂ€mmastava esituse, mis sai praeguse AV1 kontseptsiooni ja litsentsimudelina.

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

Kuidas töötab videokooder. Osa 2. Mis, miks, kuidas

Universaalne koodek

Vaatame pĂ”himehhanismid, mis on universaalse videokoodeki aluseks. Enamik neist kontseptsioonidest on kasulikud ja neid kasutatakse tĂ€napĂ€eva koodekites, nagu , mis on toetatud umbes Ÿ browsereid (sealhulgas mobiilseadmeid)., AV1 ja HEVC. Hoian teid kursis, et paljusid selgitatavaid asju lihtsustatakse. MĂ”nikord kasutatakse reaalseid nĂ€iteid (nĂ€iteks H.264-i korral) tehnoloogia demonstreerimiseks.

1. samm — pildi jaotamine

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

Kuidas töötab videokooder. Osa 2. Mis, miks, kuidas

Miks? On palju pÔhjuseid. Kui jagada pilt, on vÔimalik tÀpsemalt ennustada liikumise suunda, kasutades vÀikeseid osi vÀikeste liikuvate osade jaoks. Samas, staatilise tausta jaoks vÔib piirduda ka suuremate osadega.

Tavaliselt korraldavad koodekid need jaotised jaotistes (vĂ”i fragmendid), makrobotloodes (vĂ”i kodeerimise puu plokid) ja arvukates alamjaotistes. Nende jaotiste maksimaalne suurus varieerub, HEVC seadistab 64×64, samas kui AVC kasutab 16×16, ning alamjaotised vĂ”ivad jaguneda kuni 4×4 suurustesse.

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

Neile, kes soovivad harjutada — vaadake, kuidas pilt jaguneb jaotisteks ja alamjaotisteks. Selleks saab kasutada eelnevalt mainitud tööriista. Intel Video Pro Analyzer (see on tasuline, kuid tasuta prooviversiooniga, millel on piirang esimestele 10 kaadrile). Siin on analĂŒĂŒsitud jaotised. , mis on toetatud umbes Ÿ browsereid (sealhulgas mobiilseadmeid).:

Kuidas töötab videokooder. Osa 2. Mis, miks, kuidas

2. samm — ennustamine

Kui meil on jaotised olemas, saame nende pÔhjal koostada ennustusi. Selleks INTER-ennustamine on vajalik edastada liikumisvektorid ja jÀÀk, ning INTRA-ennustamise puhul edastatakse ennustamise suund ja jÀÀk.

3. samm — teisendamine

PĂ€rast jÀÀkploki (ennustatud jaotus → tegelik jaotus) saamist on vĂ”imalik seda teisendada viisil, mis nĂ€itab, milliseid pikseleid saab kĂ”rvaldada, samal ajal sĂ€ilitades ĂŒldise kvaliteedi. On olemas teatud teisendusi, mis tagavad tĂ€pse kĂ€itumise.

Kuigi on ka teisi meetodeid, vaatleme ĂŒksikasjalikumalt diskreetset kosinusmuundamist (DCT — lĂŒhend diskreetne kosinusmuundamine). DCT pĂ”hiĂŒlesanded:

  • Muudab piksliplokid ĂŒhetasandilisteks sageduskoefitsientide plokkideks.
  • Kompaktib energiat, aidates kĂ”rvaldada ruumilise ĂŒlemÀÀrasuse.
  • Tagab pööratavuse.

2. veebruaril 2017 avaldasid Cintra R.J. (Cintra, R.J.) ja Bayer F.M. (Bayer F.M.) artikli DCT-sarnaste muundamiste kohta piltide tihendamiseks, milleks on vajalik vaid 14 liitmist.

Ärge muretsege, kui te ei mĂ”istnud iga punkti eeliseid. NĂŒĂŒd vaatame konkreetsete nĂ€idete abil nende tĂ”elist vÀÀrtust.

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

Kuidas töötab videokooder. Osa 2. Mis, miks, kuidas

See plokk renderdatakse jĂ€rgmise 8×8 pikseliga:

Kuidas töötab videokooder. Osa 2. Mis, miks, kuidas

Rakendame DCT sellele piksliplokile ja saame 8×8 suuruse koefitsientide ploki:

Kuidas töötab videokooder. Osa 2. Mis, miks, kuidas

Ja kui me renderdame selle koefitsientide ploki, saame sellise pildi:

Kuidas töötab videokooder. Osa 2. Mis, miks, kuidas

Nagu nÀeme, ei sarnane see algse pildiga. On mÀrgata, et esimene koefitsient erineb tugevalt kÔigist teistest. Seda esimest koefitsienti tuntakse kui DC-koefitsienti, mis esindab kÔiki valimeid sisendmassiivis, midagi sarnast keskmisele.

Selle koefitsientide ploki puhul on huvitav omadus: see eraldab kÔrgsageduslikud komponendid madalsageduslikest.

Kuidas töötab videokooder. Osa 2. Mis, miks, kuidas

Pildis on suurem osa vÔimsusest koondunud madalamatele sagedustele, seega, kui me muundame pildi selle sageduskomponentideks ja viskame kÔrgsageduslikud koefitsiendid Àra, saame vÀhendada andmete hulka, mis on vajalik pildi kirjeldamiseks, ega ohverda seejuures liiga palju kvaliteeti.

Sagedus tÀhendab, kui kiiresti signaal muutub.

Proovime rakendada teadmisi, mida saime testnÀites, muundades algset pilti selle sagedusesse (koefitsientide ploki), kasutades DCT-d, ja visates seejÀrel Àra osa vÀhem olulistest koefitsientidest.

Esiteks konverteerime selle sagedusruumi.

Kuidas töötab videokooder. Osa 2. Mis, miks, kuidas

SeejÀrel viskame Àra osa (67%) koefitsientidest, peamiselt alumise parempoolse osa.

Kuidas töötab videokooder. Osa 2. Mis, miks, kuidas

LÔpuks taastame pildi sellest visatud koefitsientide plokist (peame meeles pidama, et see peaks olema pööratav) ja vÔrdleme originaaliga.

Kuidas töötab videokooder. Osa 2. Mis, miks, kuidas

NÀeme, et see meenutab algset pilti, kuid originaalist on palju erinevusi. Oleme visanud Àra 67,1875% ja saime siiski midagi, mis meenutab esialgset. Koefitsientide vÀljaviskamisega oleks vÔinud olla mÔistlikum, et saada veel paremat kvaliteeti, kuid see on juba jÀrgmine teema.

Iga koefitsient kujuneb kÔigi pikslite pÔhjal.

Oluline: iga koefitsient ei kajastu otseselt ĂŒhes pikslis, vaid esindab kaalutud summat kĂ”igist pikslitest. See muljetavaldav joonis nĂ€itab, kuidas arvutatakse esimest ja teist koefitsienti, kasutades igale indeksile unikaalseid kaalu.

Kuidas töötab videokooder. Osa 2. Mis, miks, kuidas

Samuti vÔite proovida DCT-d visualiseerida, vaadates lihtsat kujundamist selle pÔhjal. NÀiteks siin on tÀht A, mis on vormitud iga koefitsendi kaalu abil:

Kuidas töötab videokooder. Osa 2. Mis, miks, kuidas

4. samm — kvantiseerimine

PÀrast seda, kui eemaldame mÔned koefitsiendid eelneval sammul, viime viimases etapis (muundamine) lÀbi erilise kvantimisvormi. Sel etapil on teabe kaotamine lubatud. TeisisÔnu, kvantime koefitsiendid, et saavutada kokkusurumine.

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

Kuidas töötab videokooder. Osa 2. Mis, miks, kuidas

Kas saame selle koefitsiendi ploki tagasi pöörata? Jah, saame, korrutades sama vÀÀrtusega, millega jagasime.

Kuidas töötab videokooder. Osa 2. Mis, miks, kuidas

See lĂ€henemine ei ole parim, kuna see ei arvesta iga koefitsiendi tĂ€htsust. Saaksime kasutada kvantimismatriisi ĂŒhe vÀÀrtuse asemel, ning see matt aitab DCT omadust, kvantides enamiku alumistes paremates ja vĂ€hemuse ĂŒlemistes vasakutes koefitsientides.

5. samm — entropiakodeerimine

PĂ€rast seda, kui oleme andmed (pildiplokid, fragmendid, kaadrid) kvantinud, saame neid endiselt kaotusteta kokku suruda. Andmete kokkusurumiseks on palju algoritmilisi viise. Kavatseme tutvuda mĂ”nega neist, sĂŒgavamate teadmiste saamiseks vĂ”ite lugeda raamatut „Kokku surumise mĂ”istmine: andmete kokkusurumine kaasaegsetele arendajatele“ (Understanding Compression: Data Compression for Modern Developers»).

Videote kodeerimine kasutades VLC-d

Oletame, et meil on sĂŒmbolite voog: a, e, r ja t. Iga sĂŒmboli esinemise tĂ”enĂ€osus (vahemikus 0 kuni 1) on esitatud selles tabelis.

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

Saame anda ainulaadsed binaarkoodid (soovitavalt vĂ€ikesed) kĂ”ige tĂ”enĂ€olisematele sĂŒmbolitele, samal ajal kui suuremad koodid on vĂ€hem tĂ”enĂ€olistele.

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

Kokku surume voogu, arvestades, et kulutame lĂ”puks 8 bitti iga sĂŒmboli kohta. Ilma kokkusurumiseta oleks iga sĂŒmboli jaoks vaja 24 bitti. Kui iga sĂŒmbol asendada tema koodiga, siis saavutame kokkuhoidu!

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

Pange tÀhele, et iga kood peab olema ainulaadne prefiksikood. Huffman'i algoritm aitab, kuidas neid numbreid leida. Kuigi see meetod pole veatu, on olemas videokodeerijad, mis pakuvad endiselt seda algoritmilist meetodit kokkusurumiseks.

N nii kodeerijal kui ka dekooderil peab olema juurdepÀÀs tÀhestikule koos nende binaarkoodidega. SeetÔttu tuleb ka andmetes edastada tÀhestik.

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

Selle tabeliga ehitame vahemikud, mis sisaldavad kĂ”iki vĂ”imalikke sĂŒmboleid, sorteeritud suurima tĂ”enĂ€osuse jĂ€rgi.

Kuidas töötab videokooder. Osa 2. Mis, miks, kuidas

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

Esiteks valime esimese sĂŒmboli e, mis on vahemikus 0,3 kuni 0,6 (ilma selleta). VĂ”tame selle vahemiku ja jagame selle uuesti samade proportsioonide jĂ€rgi, kuid nĂŒĂŒd selle uue vahemiku jaoks.

Kuidas töötab videokooder. Osa 2. Mis, miks, kuidas

JĂ€tkame meie voo kodeerimist eat. NĂŒĂŒd vĂ”tame teise sĂŒmboli a, mis asub uues vahemikus 0,3 kuni 0,39, ja siis vĂ”tame meie viimase sĂŒmboli t ja, korrates sama protsessi uuesti, saame viimase vahemiku 0,354 kuni 0,372.

Kuidas töötab videokooder. Osa 2. Mis, miks, kuidas

Me peame lihtsalt valima arvu viimases vahemikus 0,354 kuni 0,372. Valime 0,36 (aga vÔib valida ka mÔne muu arvu selles vahemikus). Ainult selle numbriga saame taastada meie originaalse voo. See on nagu tahaksime joonistada joont vahemike sees, et kodeerida meie voogu.

Kuidas töötab videokooder. Osa 2. Mis, miks, kuidas

Tagurpidi operatsioon (st dekodeerimine) on sama lihtne: meie numbriga 0,36 ja meie algse vahemikuga saame alustada sama protsessi. Kuid nĂŒĂŒd, kasutades seda numbrit, tuvastame voo, mis on selle numbri abil kodeeritud.

Esimese vahemiku puhul mĂ€rkame, et meie number vastab lĂ”ikepunktile, seega on see meie esimene sĂŒmbol. Jagame nĂŒĂŒd selle vahemiku uuesti, jĂ€rgides sama protsessi nagu varem. Siin vĂ”ib mĂ€rgata, et 0,36 vastab sĂŒmbolile a, ja pĂ€rast protsessi kordamist jĂ”uame viimase sĂŒmbolini t (moodustades meie algse kodeeritud voo. eat).

N nii kodeerijal kui ka dekooderil peab olema olemas tÔenÀosuste tabel, seega on vajalik edastada ka selle sisu.

Üsna elegantne, eks? Keegi, kes selle lahenduse vĂ€lja mĂ”tles, oli tĂ”eliselt nutikas. MĂ”ned videokodeerijad kasutavad seda tehnikat (vĂ”i pakuvad seda igatahes valikuna).

Idee on kaotusteta kvantitud bitivoo kokkusurumine. TĂ”enĂ€oliselt puuduvad selles artiklis tosin detaili, pĂ”hjuseid, kompromisse jne. Kuid kui olete arendaja, peaksite teadma rohkem. Uued koodekid pĂŒĂŒavad kasutada erinevaid entropiakkodeerimise algoritme, nagu ANS.

6. samm — bitivoo formaat

Kui kĂ”ik need sammud on tehtud, jÀÀb vaid dekompressida kokku pakitud kaadrid vastavalt tehtud sammudele. Dekooder tuleb selgelt teavitada kooderist tehtud otsustest. Dekooderile peab olema antud kogu vajalik teave: bitisĂŒgavus, vĂ€rviruum, eraldusvĂ”ime, prognooside teave (liikumisvektorid, suunatud INTER-prognoosimine), profiil, tase, kaadrisagedus, kaadri tĂŒĂŒp, kaadri number ja palju muud.

Tutvume pinnapealselt bitivooga H.264. Meie esimene samm on luua minimaalne H.264 bitivoo (FFmpeg lisab vaikimisi kĂ”ik kodeerimise parameetrid, nagu SEI NAL — saame sellest veidi hiljem rohkem teada). Saame seda teha, kasutades oma reposi ja FFmpeg'i.

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

See kĂ€sk genereerib töötlemata bitivoo H.264 koos ĂŒhe kaadriga, eraldusvĂ”imega 64×64, vĂ€rviruumiga YUV420. Kasutame kaadrina jĂ€rgmist pilti.

Kuidas töötab videokooder. Osa 2. Mis, miks, kuidas

H.264 bitivoo

Standard AVC (H.264) mÀÀrab, et teave saadetakse makrogaotustes (vÔrgu mÔistes), mida nimetatakse NAL (see on vÔrgu abstraktsioonitase). NAL peamine eesmÀrk on pakkuda videole "vÔrgusÔbralikku" esitusviisi. See standard peab töötama televiisorites (voogude pÔhjal) ja Internetis (pakettide pÔhjal).

Kuidas töötab videokooder. Osa 2. Mis, miks, kuidas

Nal on sĂŒnkroniseerimis marker, mis mÀÀrab NAL-elementide piirid. Iga sĂŒnkroniseerimis marker sisaldab vÀÀrtust 0x00 0x00 0x01, vĂ€lja arvatud esimene, mis on vĂ”rdne 0x00 0x00 0x00 0x01. Kui kĂ€ivitame hexdump genereeritud H.264 bitivoo kohta, suudame tuvastada vĂ€hemalt kolm NAL mustrit faili alguses.

Kuidas töötab videokooder. Osa 2. Mis, miks, kuidas

Nagu mainitud, peab dekooder teadma mitte ainult pilditeavet, vaid ka video, kaadri, vĂ€rvi, kasutatud parameetrite ja muu ĂŒksikasju. Iga NAL esimene bait mÀÀrab selle kategooria ja tĂŒĂŒbi.

NAL tĂŒĂŒbi identifikaatorKirjeldus
0Tundmatu tĂŒĂŒp
1Pildifragm kooditud ilma IDR-ita
2Kooditud lÔikeandmete fragment A
3Kooditud lÔikeandmete fragment B
4Kooditud lÔikeandmete fragment C
5 Kooditud IDR-fragmendi IDR-pilt
6SEI laienduse kohta lisainformatsioon
7SPS-seeria parameetrite komplekt
8PPS-pildi parameetrite komplekt
9JuurdepÀÀsudelemendid
10Jada lÔpp
11Voogude lÔpp




Tavaliselt on esimene NAL bitivoog SPS. See NAL-i tĂŒĂŒp vastutab kodeerimise ĂŒldiste muutujaid, nagu profiil, tase, eraldusvĂ”ime jms, teavitamise eest.

Kui jĂ€tta vahele esimene sĂŒnkroonimismĂ€rker, saame dekodeerida esimese baidi, et teada saada, milline NAL tĂŒĂŒp on esimene.

NĂ€iteks, esimene bait pĂ€rast sĂŒnkroonimismĂ€rkerit on 01100111, kus esimene bitt (0) asub f vĂ€ljasorbidden_zero_bit. JĂ€rgmised 2 bitti (11) annavad meile vĂ€lja nal_ref_idc, mis nĂ€itab, kas see NAL on referentsvĂ€li vĂ”i mitte. Ja ĂŒlejÀÀnud 5 bitti (00111) annavad meile vĂ€lja nal_unit_type, sel juhul on see SPS blokina (7) NAL.

Teine bait (binaarne=01100100, heks=0x64, dec=100) SPS NAL-is on vÀli profile_idc, mis nÀitab profiili, mida kasutaja kasutas. Sel juhul kasutati piiratud kÔrge profiili (st kÔrge profiil ilma kahepoolsete B-segmentide toeta).

Kuidas töötab videokooder. Osa 2. Mis, miks, kuidas

Kui tutvuda bitivoogude spetsifikatsiooniga H.264 SPS NAL-i jaoks, saame palju vÀÀrtusi parameetrite nime, kategooria ja kirjelduse jaoks. NÀiteks vaatame vÀlju 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 mÔningaid matemaatilisi operatsioone nende vÀljade vÀÀrtustega, saame eraldusvÔime. 1920 x 1080 saab esitada pic_width_in_mbs_minus_1 vÀÀrtusega 119 ((119 + 1) * macroblock_size = 120 * 16 = 1920). JÀllegi, ruumi kokkuhoidmiseks, tehti see 119 asemel 1920.

Kui jÀtkata meie loodud video kontrollimist binaarselt (nt: xxd -b -c 11 v/minimal_yuv420.h264), vÔime liikuda viimase NAL-i juurde, mis on kaader ise.

Kuidas töötab videokooder. Osa 2. Mis, miks, kuidas

Siin nĂ€eme selle esimesi 6 baidi vÀÀrtusi: 01100101 10001000 10000100 00000000 00100001 11111111. Kuna on teada, et esimene bait nĂ€itab NAL tĂŒĂŒpi, siis antud juhul (00101) on see IDR fragment (5), seega saame edasi uurida:

Kuidas töötab videokooder. Osa 2. Mis, miks, kuidas

Kasutades spetsifikatsiooni teavet, suudame dekodeerida fragmendi tĂŒĂŒbi (slice_type) ja kaadri numbri (frame_num) koos teiste oluliste vĂ€ljadega.

Teatud vÀli vÀÀrtuste saamiseks (ue(v), me(v), se(v) vÔi %KuupÀev(v)), peame dekodeerima fragmendi, kasutades spetsiaalset dekoodrit, mis pÔhineb Golombi eksponentsiaalne kood. See meetod on vÀga efektiivne muutujate vÀÀrtuste kodeerimisel, eriti kui on palju vaikevÀÀrtusi.

VÀÀrtused slice_type ja frame_num selle video jaoks on vastavalt 7 (I-fragment) ja 0 (esimene kaader).

BitsĂŒkkel vĂ”ib olla protokollina. Kui soovite rohkem teada bitsĂŒkli kohta, tasub vaadata spetsifikatsiooni ITU H.264. Siin on makroskeem, mis nĂ€itab, kus asuvad pildandmed (YUV kokkusurutud kujul).

Kuidas töötab videokooder. Osa 2. Mis, miks, kuidas

Saate uurida ka teisi bitsĂŒkleid, nagu , mis on toetatud umbes Ÿ browsereid (sealhulgas mobiilseadmeid)., H.265 (HEVC) vĂ”i isegi meie uut parimat bitsĂŒklit AV1. Kas kĂ”ik need on sarnased? Ei, kuid kui teate vĂ€hemalt ĂŒhte — on palju lihtsam mĂ”ista teisi.

Kas soovite praktiseerida? Uurige H.264 bitsĂŒklit

Saate genereerida ĂŒhekaadrilise video ja kasutada MediaInfo bitsĂŒkli uurimiseks H.264. Tegelikult ei takista miski ka vaadata allika koodi, mis analĂŒĂŒsib bitsĂŒklit H.264 (AVC).

Kuidas töötab videokooder. Osa 2. Mis, miks, kuidas

Praktikaks vÔib kasutada Intel Video Pro Analyzerit (ma juba mainisin, et programm on tasuline, kuid on tasuta prooviversioon, millel on 10 kaadri piirang?).

Kuidas töötab videokooder. Osa 2. Mis, miks, kuidas

Ülevaade

Oluline on mÀrkida, et paljud tÀnapÀeva koodekid kasutavad sama mudelit, mida just Ôppisime. Vaatame koodeki vooskeemi Thor. See sisaldab kÔiki samme, mida me oleme lÀbinud. Selle mÀrkuse mÔte on, et te oleksite vÀhemalt paremini teadlikud uuendustest ja dokumentatsioonist selles valdkonnas.

Kuidas töötab videokooder. Osa 2. Mis, miks, kuidas

Varasemalt arvutasime, et ĂŒhe tunni kestva video faili hoidmiseks kvaliteedis 720p ja 30 kaadrit sekundis on vajalik 139 GB kettaruumi. Kui kasutada artiklis kĂ€sitletud meetodeid (vahekaadri ja siseprognoosid, muundamine, kvantimine, entropiakodeerimine jne), siis on vĂ”imalik saavutada (eeldades, et kasutame 0,031 bitti pikseli kohta) tĂ€iesti rahuldava kvaliteediga video, mis vĂ”tab vaid 367,82 MB, mitte 139 GB mĂ€lu.

Kuidas H.265 saavutab parema kokkusurumise mÀÀra kui H.264?

NĂŒĂŒd, kui on teada rohkem koodekite tööpĂ”himĂ”tetest, on lihtsam mĂ”ista, kuidas uued koodekid suudavad pakkuda kĂ”rgemat resolutsiooni vĂ€hemate bittidega.

Kui vÔrrelda AVC ja HEVC, tasub meeles pidada, et see on peaaegu alati valik suurema koormuse ja kokkusurumise mÀÀra vahel.

HEVC omab rohkem jaotisi (ja alajaotisi) kui AVC, rohkem sisemise prognoosimise suundi, tÀiustatud entropiakodeerimine ja palju muud. KÔik need tÀiustused on teinud H.265 suuteline tihendama 50% rohkem kui H.264.

Kuidas töötab videokooder. Osa 2. Mis, miks, kuidas

Esimene osa: Videote ja piltide töötamise alused

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster