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.
Tulkojums tika veikts ar EDISON Software atbalstu.
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).
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.
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:
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:
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:
Å is bloks tiek atveidots Å”ÄdÄ 8 x 8 pikseļu attÄlÄ:
Lietojiet DCT Ŕim pikseļu blokam un iegūstiet 8x8 koeficientu bloku:
Un, ja mÄs atveidosim Å”o koeficientu bloku, mÄs iegÅ«sim Å”Ädu attÄlu:
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.
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Ä.
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.
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.
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:
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.
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.
Å Ä« 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.
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.
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.
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.
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.
Å Ä« 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.
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).
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Ä 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).
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.
Å 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:
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Ä).
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).
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?).
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Ä.
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.
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.