Kā darbojas video kodeks? 2. daļa. Kas, kāpēc, kā

Pirmā daļa: Pamati darbam ar video un attēliem

Kā darbojas video kodeks? 2. daļa. Kas, kāpēc, kā

Kas ir? Video kodeks ir programmatūras/aparatūras daļa, kas saspiež un/vai atspiež digitālo video.

Par ko? Neskatoties uz noteiktiem ierobežojumiem gan attiecībā uz joslas platumu, gan
un datu uzglabāŔanas vietas ziņā tirgus pieprasa arvien augstākas kvalitātes video. Vai atceries, kā pēdējā ierakstā mēs aprēķinājām nepiecieÅ”amo minimumu 30 kadriem sekundē, 24 bitiem uz pikseļu, ar izŔķirtspēju 480x240? Bez saspieÅ”anas saņēmām 82,944 Mbit/s. SaspieÅ”ana paÅ”laik ir vienÄ«gais veids, kā vispārēji pārraidÄ«t HD/FullHD/4K uz televÄ«zijas ekrāniem un internetu. Kā tas tiek panākts? Tagad Ä«sumā apskatÄ«sim galvenās metodes.

Kā darbojas video kodeks? 2. daļa. Kas, kāpēc, kā

Tulkojums tika veikts ar EDISON Software atbalstu.

Mēs esam saderinājuÅ”ies videonovēroÅ”anas sistēmu integrācijaun izstrādājam mikrotomogrāfu.

Kodeks pret konteineru

Iesācēju izplatÄ«ta kļūda ir digitālā video kodeka un digitālā video konteinera sajaukÅ”ana. Konteiners ir noteikta formāta. Aptinums, kurā ir video (un, iespējams, audio) metadati. Saspiesto video var uzskatÄ«t par konteinera lietderÄ«go slodzi.

Parasti video faila paplaÅ”inājums norāda tā konteinera veidu. Piemēram, fails video.mp4, iespējams, ir konteiners MPEG-4 14. daļa, un fails ar nosaukumu video.mkv, visticamāk, ir matrjoÅ”ka. Lai bÅ«tu pilnÄ«bā pārliecināts par kodeku un konteinera formātu, varat izmantot FFmpeg vai MediaInfo.

Nedaudz vēstures

Pirms mēs nonākam pie Kā?, iedziļināsimies vēsturē, lai mazliet labāk izprastu dažus vecākus kodekus.

Video kodeks H.261 parādÄ«jās 1990. gadā (tehniski - 1988. gadā) un tika radÄ«ts darbam ar datu pārraides ātrumu 64 Kbps. Tajā jau tika izmantotas tādas idejas kā krāsu apakÅ”izlase, makrobloki utt. Video kodeku standarts tika publicēts 1995. gadā H.263, kas attÄ«stÄ«jās lÄ«dz 2001. gadam.

Pirmā versija tika pabeigta 2003. gadā H.264 / AVC. Tajā paŔā gadā TrueMotion izlaida savu bezmaksas zaudējumu video kodeku ar nosaukumu VP3. Google nopirka uzņēmumu 2008. gadā, atbrÄ«vojot VP8 tajā paŔā gadā. 2012. gada decembrÄ« Google izlaida VP9, un to atbalsta aptuveni Ā¾ pārlÅ«kprogrammu tirgus (ieskaitot mobilās ierÄ«ces).

AV1 ir jauns bezmaksas un atvērtā koda video kodeks, ko izstrādājis Atvērto mediju alianse (AOMedia), kurā ietilpst slavenākie uzņēmumi, piemēram: Google, Mozilla, Microsoft, Amazon, Netflix, AMD, ARM, NVidia, Intel un Cisco. Kodeka pirmā versija 0.1.0 tika publicēta 7. gada 2016. aprÄ«lÄ«.

AV1 dzimŔana

2015. gada sākumā Google strādāja pie VP10Xiph (kas pieder Mozilla) strādāja pie Daala, un Cisco izveidoja savu bezmaksas video kodeku ar nosaukumu Thor.

Tad MPEG LA pirmo reizi paziņotie gada limiti HEVC (H.265) un maksa 8 reizes lielāka nekā par H.264, taču drīz viņi atkal mainīja noteikumus:

nav gada limita,
satura maksa (0,5% no ieņēmumiem) un
vienības maksa ir aptuveni 10 reizes lielāka nekā H.264.

Atvērto mediju alianse veidoja dažādu jomu uzņēmumi: iekārtu ražotāji (Intel, AMD, ARM, Nvidia, Cisco), satura nodroÅ”inātāji (Google, Netflix, Amazon), pārlÅ«kprogrammu veidotāji (Google, Mozilla) un citi.

Uzņēmumiem bija kopÄ«gs mērÄ·is ā€“ bez autoratlÄ«dzÄ«bas izveidot video kodeku. Pēc tam parādās AV1 ar daudz vienkārŔāku patenta licenci. Timotijs B. Teriberijs sniedza satriecoÅ”u prezentāciju, kas kļuva par paÅ”reizējās AV1 koncepcijas un tā licencÄ“Å”anas modeļa izcelsmi.

Jūs būsiet pārsteigts, uzzinot, ka varat analizēt AV1 kodeku, izmantojot pārlūkprogrammu (interesanti var doties uz aomanalyzer.org).

Kā darbojas video kodeks? 2. daļa. Kas, kāpēc, kā

Universāls kodeks

ApskatÄ«sim galvenos mehānismus, kas ir universālā video kodeka pamatā. Lielākā daļa no Å”iem jēdzieniem ir noderÄ«gi un tiek izmantoti mÅ«sdienu kodekos, piemēram, VP9, AV1 Šø HEVC. BrÄ«dinu, ka daudzas no paskaidrotajām lietām tiks vienkārÅ”otas. Dažreiz tehnoloÄ£iju demonstrÄ“Å”anai tiks izmantoti reālās pasaules piemēri (kā ar H.264).

1. solis - attēla sadalÄ«Å”ana

Pirmais solis ir sadalīt rāmi vairākās sadaļās, apakŔsadaļās un tālāk.

Kā darbojas video kodeks? 2. daļa. Kas, kāpēc, kā

Par ko? Ir daudz iemeslu. Kad mēs sadalām attēlu, mēs varam precīzāk paredzēt kustības vektoru, izmantojot mazas sadaļas mazām kustīgām daļām. Statiskā fona gadījumā varat aprobežoties ar lielākām sadaļām.

Kodeki parasti organizē Ŕīs sadaļas sadaļās (vai daļās), makroblokos (vai kodÄ“Å”anas koka blokos) un vairākās apakÅ”sadaļās. Å o nodalÄ«jumu maksimālais izmērs ir atŔķirÄ«gs, HEVC iestata to uz 64x64, savukārt AVC izmanto 16x16, un apakÅ”sadaļas var sadalÄ«t lÄ«dz 4x4 izmēriem.

Vai atceries rāmju veidus no pēdējā raksta?! To paÅ”u var attiecināt uz blokiem, tāpēc mums var bÅ«t I-fragments, B-bloks, P-makrobloks utt.

Tiem, kas vēlas praktizēt, skatieties, kā attēls tiek sadalÄ«ts sadaļās un apakÅ”sadaļās. Lai to izdarÄ«tu, varat izmantot to, kas jau minēts iepriekŔējā rakstā. Intel Video Pro analizators (tā, kas ir apmaksāta, bet ar bezmaksas izmēģinājuma versiju, kas ir ierobežota lÄ«dz pirmajiem 10 kadriem). Å eit analizētas sadaļas VP9:

Kā darbojas video kodeks? 2. daļa. Kas, kāpēc, kā

2. solis - prognozēŔana

Kad mums ir sadaļas, mēs varam tām veikt astroloÄ£iskās prognozes. PriekÅ” INTER prognozes ir jāpārnes kustÄ«bas vektori un atlikusÄ« daļa, un INTRA prognozÄ“Å”anai tas tiek pārraidÄ«ts prognozes virziens un pārējais.

3. solis ā€“ transformācija

Kad mums ir atlikuÅ”ais bloks (paredzamā sadaļa ā†’ reālā sadaļa), ir iespējams to pārveidot tā, lai mēs zinātu, kurus pikseļus var izmest, saglabājot kopējo kvalitāti. Ir dažas transformācijas, kas nodroÅ”ina precÄ«zu uzvedÄ«bu.

Lai gan ir arī citas metodes, apskatīsim tās sīkāk. diskrēta kosinusa transformācija (DCT - no plkst diskrēta kosinusa transformācija). Galvenās DCT funkcijas:

  • PārvērÅ” pikseļu blokus vienāda izmēra frekvences koeficientu blokos.
  • Kondensē jaudu, lai palÄ«dzētu novērst telpisko dublÄ“Å”anos.
  • NodroÅ”ina atgriezeniskumu.

2. gada 2017. februāris Sintra R.J. (Cintra, RJ) un Bayer F.M. (Bayer FM) publicēja rakstu par DCT lÄ«dzÄ«gu transformāciju attēla saspieÅ”anai, kas prasa tikai 14 papildinājumus.

Neuztraucieties, ja nesaprotat katras preces priekÅ”rocÄ«bas. Tagad izmantosim konkrētus piemērus, lai redzētu to patieso vērtÄ«bu.

Ņemsim Å”o 8x8 pikseļu bloku:

Kā darbojas video kodeks? 2. daļa. Kas, kāpēc, kā

Å is bloks tiek atveidots Ŕādā 8 x 8 pikseļu attēlā:

Kā darbojas video kodeks? 2. daļa. Kas, kāpēc, kā

Lietojiet DCT Ŕim pikseļu blokam un iegūstiet 8x8 koeficientu bloku:

Kā darbojas video kodeks? 2. daļa. Kas, kāpēc, kā

Un, ja mēs atveidosim Å”o koeficientu bloku, mēs iegÅ«sim Ŕādu attēlu:

Kā darbojas video kodeks? 2. daļa. Kas, kāpēc, kā

Kā redzat, tas neizskatās pēc sākotnējā attēla. Var redzēt, ka pirmais koeficients ļoti atŔķiras no visiem pārējiem. Å is pirmais koeficients ir pazÄ«stams kā lÄ«dzstrāvas koeficients, kas atspoguļo visus ievades masÄ«vā esoÅ”os paraugus, piemēram, vidējo.

Šim koeficientu blokam ir interesanta īpaŔība: tas atdala augstfrekvences komponentus no zemfrekvences.

Kā darbojas video kodeks? 2. daļa. Kas, kāpēc, kā

Attēlā lielākā daļa jaudas ir koncentrēta zemākās frekvencēs, tādēļ, pārvērÅ”ot attēlu tā frekvenču komponentos un atmetot augstākos frekvences koeficientus, varat samazināt attēla aprakstÄ«Å”anai nepiecieÅ”amo datu apjomu, nezaudējot pārāk daudz attēla kvalitātes.

Frekvence norāda, cik ātri signāls mainās.

Mēģināsim pielietot testa gadÄ«jumā iegÅ«tās zināŔanas, pārveidojot sākotnējo attēlu tā frekvencē (koeficientu blokā), izmantojot DCT un pēc tam atmetot daļu no mazāk svarÄ«giem koeficientiem.

Vispirms mēs to pārvērÅ”am frekvences domēnā.

Kā darbojas video kodeks? 2. daļa. Kas, kāpēc, kā

Tālāk mēs atmetam daļu (67%) koeficientu, galvenokārt apakŔējo labo daļu.

Kā darbojas video kodeks? 2. daļa. Kas, kāpēc, kā

Visbeidzot, mēs rekonstruējam attēlu no Ŕī izmestā koeficientu bloka (atcerieties, tam jābÅ«t invertējamam) un salÄ«dzinām to ar oriÄ£inālu.

Kā darbojas video kodeks? 2. daļa. Kas, kāpēc, kā

Mēs redzam, ka tas atgādina sākotnējo attēlu, taču ir daudz atŔķirÄ«bu no oriÄ£ināla. Izmetām 67,1875% un tomēr saņēmām kaut ko lÄ«dzÄ«gu oriÄ£inālam. Varēja pārdomātāk atmest koeficientus, lai iegÅ«tu vēl kvalitatÄ«vāku attēlu, bet tā ir nākamā tēma.

Katrs koeficients tiek ģenerēts, izmantojot visus pikseļus

SvarÄ«gi: katrs koeficients nav tieÅ”i kartēts vienam pikselim, bet ir visu pikseļu svērtā summa. Å is pārsteidzoÅ”ais grafiks parāda, kā pirmais un otrais koeficients tiek aprēķināts, izmantojot katram indeksam unikālos svarus.

Kā darbojas video kodeks? 2. daļa. Kas, kāpēc, kā

Varat arÄ« mēģināt vizualizēt DCT, aplÅ«kojot vienkārÅ”u attēla veidojumu, pamatojoties uz to. Piemēram, Å”eit ir simbols A, kas Ä£enerēts, izmantojot katra koeficienta svaru:

Kā darbojas video kodeks? 2. daļa. Kas, kāpēc, kā

4. solis - kvantēŔana

Pēc tam, kad iepriekŔējā solÄ« esam izmetuÅ”i dažus koeficientus, pēdējā solÄ« (transformācijā) veicam Ä«paÅ”u kvantÄ“Å”anas formu. Å ajā posmā ir pieļaujams pazaudēt informāciju. Vai, vienkārŔāk sakot, mēs kvantificēsim koeficientus, lai panāktu saspieÅ”anu.

Kā jÅ«s varat kvantificēt koeficientu bloku? Viena no vienkārŔākajām metodēm ir vienota kvantÄ“Å”ana, kad ņemam bloku, sadalām to ar vienu vērtÄ«bu (ar 10) un rezultātu noapaļo.

Kā darbojas video kodeks? 2. daļa. Kas, kāpēc, kā

Vai mēs varam mainÄ«t Å”o koeficientu bloku? Jā, mēs varam, reizinot ar to paÅ”u vērtÄ«bu, ar kuru mēs dalÄ«jām.

Kā darbojas video kodeks? 2. daļa. Kas, kāpēc, kā

Å Ä« pieeja nav labākā, jo tajā nav ņemta vērā katra koeficienta nozÄ«me. AtseviŔķas vērtÄ«bas vietā varētu izmantot kvantētāju matricu, un Ŕī matrica varētu izmantot DCT Ä«paŔību, kvantējot lielāko daļu apakŔējā labās puses un mazākumu augŔējās kreisās puses.

5. solis ā€“ entropijas kodÄ“Å”ana

Kad dati (attēlu bloki, fragmenti, kadri) ir kvantificēti, mēs joprojām varam tos bez zudumiem saspiest. Ir daudzi algoritmiski datu saspieÅ”anas veidi. Mēs Ä«si apskatÄ«sim dažus no tiem. Lai iegÅ«tu dziļāku izpratni, varat izlasÄ«t grāmatu Understanding Compression: Data Compression for Modern Developers ("Izpratne par saspieÅ”anu: datu saspieÅ”ana mÅ«sdienu izstrādātājiem").

Video kodēŔana, izmantojot VLC

Pieņemsim, ka mums ir rakstzÄ«mju straume: a, e, r Šø t. Å ajā tabulā ir parādÄ«ta varbÅ«tÄ«ba (no 0 lÄ«dz 1), cik bieži katra rakstzÄ«me parādās straumē.

a e r t
Varbūtība 0,3 0,3 0,2 0,2

Mēs varam pieŔķirt unikālus bināros kodus (vēlams mazus) visticamākajiem un lielākus kodus mazāk ticamiem.

a e r t
Varbūtība 0,3 0,3 0,2 0,2
Binārais kods 0 10 110 1110

Mēs saspiežam straumi, pieņemot, ka mēs galu galā iztērēsim 8 bitus katrai rakstzÄ«mei. Bez saspieÅ”anas katrai rakstzÄ«mei bÅ«tu nepiecieÅ”ami 24 biti. Ja katru rakstzÄ«mi aizstājat ar tās kodu, jÅ«s ietaupÄ«sit!

Pirmais solis ir iekodēt rakstzÄ«mi e, kas ir vienāds ar 10, un otrā rakstzÄ«me ir a, kas tiek pievienota (ne matemātiskā veidā): [10][0] un visbeidzot treŔā rakstzÄ«me t, kas padara mÅ«su galÄ«go saspiesto bitu straumi vienādu ar [10][0][1110] vai 1001110, kas prasa tikai 7 bitus (3,4 reizes mazāk vietas nekā oriÄ£inālam).

LÅ«dzu, ņemiet vērā, ka katram kodam ir jābÅ«t unikālam kodam ar prefiksu. Hafmena algoritms palÄ«dzēs jums atrast Å”os skaitļus. Lai gan Ŕī metode nav bez trÅ«kumiem, ir video kodeki, kas joprojām piedāvā Å”o algoritmisko kompresijas metodi.

Gan kodētājam, gan dekodētājam ir jābūt piekļuvei simbolu tabulai ar saviem binārajiem kodiem. Tāpēc kā ievadi ir jānosūta arī tabula.

Aritmētiskā kodÄ“Å”ana

Pieņemsim, ka mums ir rakstzÄ«mju straume: a, e, r, s Šø t, un to varbÅ«tÄ«ba ir parādÄ«ta Å”ajā tabulā.

a e r s t
Varbūtība 0,3 0,3 0,15 0,05 0,2

Izmantojot Å”o tabulu, mēs izveidosim diapazonus, kas satur visas iespējamās rakstzÄ«mes, sakārtotas pēc lielākā skaita.

Kā darbojas video kodeks? 2. daļa. Kas, kāpēc, kā

Tagad iekodēsim trīs rakstzīmju straumi: ēst.

Vispirms atlasiet pirmo rakstzÄ«mi e, kas ir apakÅ”diapazonā no 0,3 lÄ«dz 0,6 (neskaitot). Mēs ņemam Å”o apakÅ”diapazonu un sadalām to vēlreiz tādās paŔās proporcijās kā iepriekÅ”, bet Å”im jaunajam diapazonam.

Kā darbojas video kodeks? 2. daļa. Kas, kāpēc, kā

Turpināsim mÅ«su straumes kodÄ“Å”anu ēst. Tagad paņemiet otro rakstzÄ«mi a, kas ir jaunajā apakÅ”diapazonā no 0,3 lÄ«dz 0,39, un pēc tam ņemiet mÅ«su pēdējo rakstzÄ«mi t un atkārtojot to paÅ”u procesu vēlreiz, mēs iegÅ«stam galÄ«go apakÅ”diapazonu no 0,354 lÄ«dz 0,372.

Kā darbojas video kodeks? 2. daļa. Kas, kāpēc, kā

Mums vienkārÅ”i jāatlasa skaitlis pēdējā apakÅ”diapazonā no 0,354 lÄ«dz 0,372. Izvēlēsimies 0,36 (bet jÅ«s varat izvēlēties jebkuru citu skaitli Å”ajā apakÅ”diapazonā). Tikai ar Å”o numuru mēs varēsim atjaunot savu sākotnējo straumi. Tas ir tā, it kā mēs vilktu lÄ«niju diapazonā, lai kodētu mÅ«su straumi.

Kā darbojas video kodeks? 2. daļa. Kas, kāpēc, kā

Apgrieztā darbÄ«ba (tas ir, dekodÄ“Å”ana) ir tikpat vienkārÅ”s: ar mÅ«su skaitli 0,36 un sākotnējo diapazonu mēs varam palaist to paÅ”u procesu. Bet tagad, izmantojot Å”o numuru, mēs identificējam straumi, kas kodēta, izmantojot Å”o numuru.

Ar pirmo diapazonu mēs pamanām, ka mÅ«su numurs atbilst Ŕķēlei, tāpēc Ŕī ir mÅ«su pirmā rakstzÄ«me. Tagad mēs atkal sadalām Å”o apakÅ”diapazonu, veicot to paÅ”u procesu kā iepriekÅ”. Å eit var redzēt, ka 0,36 atbilst simbolam a, un pēc procesa atkārtoÅ”anas nonācām pie pēdējās rakstzÄ«mes t (veidojot mÅ«su sākotnējo kodēto straumi ēst).

Gan kodētājam, gan dekodētājam ir jābÅ«t simbolu varbÅ«tÄ«bu tabulai, tāpēc ir nepiecieÅ”ams to nosÅ«tÄ«t arÄ« ievaddatos.

Diezgan eleganti, vai ne? Tas, kurÅ” izdomāja Å”o risinājumu, bija sasodÄ«ti gudrs. Daži video kodeki izmanto Å”o paņēmienu (vai vismaz piedāvā to kā opciju).

Ideja ir bez zudumiem saspiest kvantētu bitu straumi. Protams, Å”ajā rakstā trÅ«kst detaļu, iemeslu, kompromisu utt. Bet, ja esat izstrādātājs, jums vajadzētu zināt vairāk. Jaunie kodeki mēģina izmantot dažādus entropijas kodÄ“Å”anas algoritmus, piemēram, ANS.

6. darbība - bitu plūsmas formāts

Pēc visa tā veikÅ”anas atliek tikai izpakot saspiestos kadrus veikto darbÄ«bu kontekstā. Dekodētājs ir skaidri jāinformē par kodētāja pieņemtajiem lēmumiem. Dekodētājam ir jābÅ«t nodroÅ”inātam ar visu nepiecieÅ”amo informāciju: bitu dziļumu, krāsu telpu, izŔķirtspēju, prognozÄ“Å”anas informāciju (kustÄ«bas vektori, virziena INTER prognoze), profilu, lÄ«meni, kadru ātrumu, kadra veidu, kadra numuru un daudz ko citu.

Mēs ātri apskatÄ«sim bitu straumi H.264. MÅ«su pirmais solis ir izveidot minimālu H.264 bitu straumi (FFmpeg pēc noklusējuma pievieno visas kodÄ“Å”anas opcijas, piemēram, SEI NAL - mēs uzzināsim, kas tas ir nedaudz tālāk). Mēs to varam izdarÄ«t, izmantojot savu repozitoriju un FFmpeg.

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

Å Ä« komanda Ä£enerēs neapstrādātu bitu straumi H.264 ar vienu kadru, 64Ɨ64 izŔķirtspēja, ar krāsu telpu YUV420. Å ajā gadÄ«jumā kā rāmis tiek izmantots Ŕāds attēls.

Kā darbojas video kodeks? 2. daļa. Kas, kāpēc, kā

H.264 bitu plūsma

Standarts AVC (H.264) nosaka, ka informācija tiks nosÅ«tÄ«ta makrokadros (tÄ«kla izpratnē), sauc NAL (tas ir tÄ«kla abstrakcijas lÄ«menis). NAL galvenais mērÄ·is ir nodroÅ”ināt "tÄ«meklim draudzÄ«gu" video prezentāciju. Å im standartam vajadzētu darboties televizoros (pamatojoties uz straumi), internetā (pakeÅ”u bāzes).

Kā darbojas video kodeks? 2. daļa. Kas, kāpēc, kā

Ir sinhronizācijas marÄ·ieris, lai definētu NAL elementu robežas. Katrs sinhronizācijas marÄ·ieris satur vērtÄ«bu 0x00 0x00 0x01, izņemot paÅ”u pirmo, kas ir vienāds ar 0x00 0x00 0x00 0x01. Ja palaižam hexdump Ä£enerētajai H.264 bitu plÅ«smai faila sākumā mēs identificējam vismaz trÄ«s NAL modeļus.

Kā darbojas video kodeks? 2. daļa. Kas, kāpēc, kā

Kā minēts, dekodētājam ir jāzina ne tikai attēla dati, bet arī informācija par video, kadrs, krāsas, izmantotie parametri un daudz kas cits. Katra NAL pirmais baits nosaka tā kategoriju un veidu.

NAL tipa identifikators Apraksts
0 Nezināms veids
1 Kodēts attēla fragments bez IDR
2 Kodēta Ŕķēluma datu sadaļa A
3 Kodēta Ŕķēluma datu sadaļa B
4 Kodēta Ŕķēluma datu sadaļa C
5 Kodēts IDR attēla IDR fragments
6 PlaŔāka informācija par SEI paplaŔinājumu
7 SPS secības parametru iestatījums
8 PPS attēla parametru komplekts
9 Piekļuves atdalītājs
10 Secības beigas
11 VÄ«tnes beigas
... ...

Parasti pirmais bitu straumes NAL ir SPS. Å is NAL veids ir atbildÄ«gs par informÄ“Å”anu par izplatÄ«tākajiem kodÄ“Å”anas mainÄ«gajiem, piemēram, profilu, lÄ«meni, izŔķirtspēju utt.

Ja mēs izlaižam pirmo sinhronizācijas marÄ·ieri, mēs varam atÅ”ifrēt pirmo baitu, lai noskaidrotu, kurÅ” NAL veids ir pirmais.

Piemēram, pirmais baits pēc sinhronizācijas pilnvaras ir 01100111, kur pirmais bits (0) atrodas laukā forbidden_zero_bit. Nākamie 2 biti (11) stāsta mums lauks nal_ref_idc, kas norāda, vai Å”is NAL ir atsauces lauks vai nav. Un atlikuÅ”ie 5 biti (00111) stāsta mums lauks nal_unit_type, Å”ajā gadÄ«jumā tas ir SPS bloks (7) NAL.

Otrais baits (binārs=01100100, hex=0x64, decembris=100) SPS NAL ir lauks profile_idc, kas parāda kodētāja izmantoto profilu. Šajā gadījumā tika izmantots ierobežots augsts profils (ti, augsts profils bez divvirzienu B segmenta atbalsta).

Kā darbojas video kodeks? 2. daļa. Kas, kāpēc, kā

Ja paskatās uz bitu plÅ«smas specifikāciju H.264 SPS NAL mēs atradÄ«sim daudzas parametra nosaukuma, kategorijas un apraksta vērtÄ«bas. Piemēram, apskatÄ«sim laukus pic_width_in_mbs_minus_1 Šø pic_height_in_map_units_minus_1.

Parametra nosaukums kategorija Apraksts
pic_width_in_mbs_minus_1 0 ue (v)
pic_height_in_map_units_minus_1 0 ue (v)

Ja mēs veiksim dažas matemātiskas darbÄ«bas ar Å”o lauku vērtÄ«bām, mēs iegÅ«sim izŔķirtspēju. Var attēlot 1920 x 1080, izmantojot pic_width_in_mbs_minus_1 ar vērtÄ«bu 119 ((119 + 1) * makrobloka_izmērs = 120 * 16 = 1920). Atkal, lai ietaupÄ«tu vietu, 1920. gada kodÄ“Å”anas vietā mēs to darÄ«jām ar 119.

Ja mēs turpinām pārbaudīt mūsu izveidoto video binārā formā (piemēram: xxd -b -c 11 v/minimal_yuv420.h264), tad varat doties uz pēdējo NAL, kas ir pats rāmis.

Kā darbojas video kodeks? 2. daļa. Kas, kāpēc, kā

Å eit mēs redzam tās pirmās 6 baitu vērtÄ«bas: 01100101 10001000 10000100 00000000 00100001 11111111. Tā kā zināms, ka pirmais baits norāda NAL tipu, Å”ajā gadÄ«jumā (00101) ir IDR fragments (5), un pēc tam varat to izpētÄ«t tālāk:

Kā darbojas video kodeks? 2. daļa. Kas, kāpēc, kā

Izmantojot specifikācijas informāciju, bÅ«s iespējams atÅ”ifrēt fragmenta veidu (slice_type) un rāmja numurs (kadra_numurs) starp citām svarÄ«gām jomām.

Lai iegÅ«tu dažu lauku vērtÄ«bas (ue(v), me(v), se(v) vai te(v)), mums ir nepiecieÅ”ams atÅ”ifrēt fragmentu, izmantojot Ä«paÅ”u dekodētāju, kura pamatā ir eksponenciālais Golomba kods. Å Ä« metode ir ļoti efektÄ«va mainÄ«go vērtÄ«bu kodÄ“Å”anai, Ä«paÅ”i, ja ir daudz noklusējuma vērtÄ«bu.

VērtÄ«bas slice_type Šø kadra_numurs no Ŕī videoklipa ir 7 (I fragments) un 0 (pirmais kadrs).

Bitu plūsmu var uzskatīt par protokolu. Ja vēlaties uzzināt vairāk par bitu straumi, skatiet specifikāciju ITU H.264. Šeit ir makro diagramma, kas parāda, kur atrodas attēla dati (YUV saspiestā veidā).

Kā darbojas video kodeks? 2. daļa. Kas, kāpēc, kā

Var pārbaudīt citas bitu plūsmas, piemēram VP9, H.265 (HEVC) vai pat mūsu jauno labāko bitu straumi AV1. Vai viņi visi ir līdzīgi? Nē, bet, kad saprotat vismaz vienu, ir daudz vieglāk saprast pārējo.

Vai vēlaties praktizēt? Izpētiet H.264 bitu straumi

Varat ģenerēt viena kadra video un izmantot MediaInfo, lai pārbaudītu bitu straumi H.264. Patiesībā nekas neliedz jums pat apskatīt avota kodu, kas analizē bitu straumi H.264 (AVC).

Kā darbojas video kodeks? 2. daļa. Kas, kāpēc, kā

Praksei var izmantot Intel Video Pro Analyzer (vai es jau teicu, ka programma ir maksas, bet ir bezmaksas izmēģinājuma versija ar 10 kadru ierobežojumu?).

Kā darbojas video kodeks? 2. daļa. Kas, kāpēc, kā

Pārskatiet

Ņemiet vērā, ka daudzi mÅ«sdienu kodeki izmanto to paÅ”u modeli, kuru mēs tikko pētÄ«jām. Å eit apskatÄ«sim video kodeka blokshēmu Thor. Tajā ir ietverti visi soļi, kurus esam gājuÅ”i cauri. Å Ä«s ziņas mērÄ·is ir vismaz sniegt jums labāku izpratni par jauninājumiem un dokumentāciju Å”ajā jomā.

Kā darbojas video kodeks? 2. daļa. Kas, kāpēc, kā

IepriekÅ” tika aprēķināts, ka vienu stundu ilga video faila glabāŔanai 139p kvalitātē un 720 kadri sekundē bÅ«s nepiecieÅ”ami 30 GB diska vietas. Ja izmantojat Å”ajā rakstā aplÅ«kotās metodes (starpkadru un iekŔējās prognozes, transformācijas, kvantÄ“Å”ana, entropijas kodÄ“Å”ana u.c.), varat iegÅ«t (pamatojoties uz to, ka mēs tērējam 0,031 bitu uz pikseli), video ar diezgan apmierinoÅ”a kvalitāte, aizņemot tikai 367,82 MB, nevis 139 GB atmiņu.

Kā H.265 panāk labāku kompresijas pakāpi nekā H.264?

Tagad, kad mēs zinām vairāk par kodeku darbÄ«bu, ir vieglāk saprast, kā jaunāki kodeki var nodroÅ”ināt augstāku izŔķirtspēju ar mazāku bitu skaitu.

Ja salÄ«dzinām AVC Šø HEVC, ir vērts atcerēties, ka Ŕī gandrÄ«z vienmēr ir izvēle starp lielāku CPU slodzi un kompresijas pakāpi.

HEVC ir vairāk sadaļas (un apakÅ”sadaļas) opciju nekā AVC, vairāk iekŔējo prognozÄ“Å”anas virzienu, uzlabota entropijas kodÄ“Å”ana un daudz kas cits. Visi Å”ie uzlabojumi ir veikti H.265 spēj saspiest par 50% vairāk nekā H.264.

Kā darbojas video kodeks? 2. daļa. Kas, kāpēc, kā

Pirmā daļa: Pamati darbam ar video un attēliem

Avots: www.habr.com

Pievieno komentāru