{"id":54312,"date":"2019-12-23T00:00:00","date_gmt":"2019-12-22T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/kak-rabotaet-videokodek-chast-1-osnovy"},"modified":"2020-02-18T14:02:18","modified_gmt":"2020-02-18T11:02:18","slug":"kak-rabotaet-videokodek-chast-1-osnovy","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/news\/kak-rabotaet-videokodek-chast-1-osnovy","title":{"rendered":"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h3>Teine osa:<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/480430\/\"> Videokoodri t\u00f6\u00f6p\u00f5him\u00f5tted<\/a><\/noindex><\/h3>\n<p>Iga rasterpilt <b>v\u00f5ib olla esitatud<\/b> kahem\u00f5\u00f5tmelise maatriksina <b>. Kui r\u00e4\u00e4kida v\u00e4rvidest, saab ideed arendada, arvestades pilti kui<\/b>kolmem\u00f5\u00f5tmelist maatriksit <b>, kus t\u00e4iendavad m\u00f5\u00f5tmed on kasutusel iga v\u00e4rvi andmete salvestamiseks.<\/b>Kui k\u00e4sitleda l\u00f5ppv\u00e4rvi kui kombinatsiooni nn p\u00f5hiv\u00e4rvidest (punane, roheline ja sinine), m\u00e4\u00e4ratleme meie kolmem\u00f5\u00f5tmelises maatriksis kolm tasapinda: esimene punase, teine rohelise ja viimane sinise jaoks.<\/p>\n<p>Igat punkti selles maatriksis nimetame piksliks (pildi elemendiks). Iga piksel sisaldab teavet iga v\u00e4rvi intensiivsuse kohta (tavaliselt numbrilise v\u00e4\u00e4rtuse kujul). N\u00e4iteks,<br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/481418\/\"><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus\" src=\"\/wp-content\/uploads\/2019\/12\/ce37dd683a4c3ed434dae1d488646716.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\npunane piksel <b>t\u00e4hendab, et selles on 0 rohelist, 0 sinist ja maksimum punast.<\/b> Roosa piksel <b>v\u00f5ib olla loodud kolme v\u00e4rvi kombinatsiooniga. Kasutades numbrivahemikku 0 kuni 255, m\u00e4\u00e4ratletakse roosa piksel kui<\/b> Punane = 255 <b>Roheline = 192<\/b>, <b>Sinine = 203<\/b> ja <b>Artikkel on avaldatud ettev\u00f5tte EDISON toetusel.<\/b>.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<blockquote><p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.edsd.ru\/\" title=\"EDISON Software - veebiarendus\"><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus\" src=\"\/wp-content\/uploads\/2019\/12\/e5063b9a32248767cb0702e7aa2e7f9e.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br clear=\"right\"><br \/>\nArendame<\/p>\n<p>rakendusi videovalve, voogedastuse <noindex><a rel=\"nofollow\" href=\"https:\/\/www.edsd.ru\/ru\/portfolio\/tehnologiya\/video\">, samuti tegeleme<\/a><\/noindex>videote salvestamisega kirurgiatoas <noindex><a rel=\"nofollow\" href=\"https:\/\/www.edsd.ru\/videozapis-v-bolnichnoj-operacionnoj-s-vozmozhnostyu-obsuzhdeniya-na-forume\">Alternatiivsed meetodid v\u00e4rvipildi kodeerimiseks<\/a><\/noindex>.<\/p><\/blockquote>\n<h3>Kujutise v\u00e4rvide esitamiseks on olemas mitmeid teisi mudelid. N\u00e4iteks v\u00f5ib kasutada indeksitud v\u00e4rvipaletti, kus iga piksli esitamiseks on vaja vaid \u00fche bait, mitte kolme, nagu RGB mudeli puhul. Selles mudelis on v\u00f5imalik kasutada 2D maatriksit, et esitada iga v\u00e4rvi. See s\u00e4\u00e4stab m\u00e4lu, kuid pakub v\u00e4iksemat v\u00e4rvitoonide vahemikku.<\/h3>\n<p>\nRGB<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus\" src=\"\/wp-content\/uploads\/2019\/12\/573a39c53527b4ec0403f019becf2d22.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Vaadake allolevat pilti. Esimene n\u00e4gu on t\u00e4ielikult v\u00e4rvitud. \u00dclej\u00e4\u00e4nud on punase, rohelise ja sinise tasandid (vastavate v\u00e4rvide intensiivsus on n\u00e4idatud hallis skaala j\u00e4rgi).<\/h2>\n<p>N\u00e4iteks vaadake allolevat pilti. Esimene n\u00e4gu on t\u00e4ielikult v\u00e4rvitud. Teised on punased, rohelised ja sinised pinnad (vastavate v\u00e4rvide intensiivsus on n\u00e4idatud halltoone kasutades).<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus\" src=\"\/wp-content\/uploads\/2019\/12\/cf1f802d4381e062005490f5f9f26911.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u00e4eme, et punasetoonid originaalis asuvad samades kohtades, kus on k\u00f5ige eredamad osad teise isiku suhtes. Samas on sinise v\u00e4rvi panus peamiselt n\u00e4htav ainult Mario silmades (viimane isik) ja tema r\u00f5ivastes. Pange t\u00e4hele, kuhu k\u00f5ik kolm v\u00e4rvitasandit annavad k\u00f5ige v\u00e4iksema panuse (k\u00f5ige tumedamad osad piltidel) \u2014 see on Mario vuntsides.<\/p>\n<p>Iga v\u00e4rvi intensiivsuse s\u00e4ilitamiseks on vajalik teatud hulk bite \u2014 seda m\u00f5\u00f5detakse <b>bitis\u00fcgavusega<\/b>. Oletame, et \u00fche v\u00e4rvitasandi jaoks kulub 8 bitti (vahemik 0 kuni 255). Siis on meil v\u00e4rvis\u00fcgavus 24 bitti (8 bitti * 3 tasandit R\/G\/B).<\/p>\n<p>Veel \u00fcks omadus pildist on <b>eraldusv\u00f5ime<\/b>, mis v\u00e4ljendab pikslite arvu \u00fches m\u00f5\u00f5tmes. Sageli t\u00e4histatakse seda kui <b>laius \u00d7 k\u00f5rgus<\/b>, nagu alloleval 4x4 pildi n\u00e4itel.<br \/>\n<img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus\" src=\"\/wp-content\/uploads\/2019\/12\/51a4d948e6d44e4058e346fdbaf9d6c2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVeel \u00fcks omadus, millega kokku puutume piltide\/ videote t\u00f6\u00f6tlemisel, on <b>kuvasuhe<\/b>, mis kirjeldab tavalist proportsionaalset seost pildi v\u00f5i pikslite laius ja k\u00f5rgus vahel.<\/p>\n<p>Kui \u00f6eldakse, et kindlal filmil v\u00f5i pildil on m\u00f5\u00f5t 16 korda 9, siis m\u00f5eldakse tavaliselt <b>ekraani kuvasuhte<\/b> (<b>DAR<\/b> \u2014 l\u00fchend <i>Display Aspect Ratio<\/i>). Kuid m\u00f5nikord v\u00f5ivad eraldi piksli vormid olla erinevad \u2014 siis r\u00e4\u00e4gime <b>pikslisuhte<\/b> (<b>PAR<\/b> \u2014 l\u00fchend <i>Pixel Aspect Ratio<\/i>).<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus\" src=\"\/wp-content\/uploads\/2019\/12\/1158c6e98247a1a1084440969f9400c6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus\" src=\"\/wp-content\/uploads\/2019\/12\/a610f0f77bdb245c05799d3de4147302.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<blockquote><p>Koduperenaisele t\u00e4helepanuks: <b>DVD<\/b> vastab <b>DAR 4 x 3<\/b><\/p>\n<p>Kuigi DVD tegelik resolutsioon on 704&#215;480, s\u00e4ilitab see siiski 4:3 kuvasuhe, kuna PAR on 10:11 (704&#215;10 \/ 480&#215;11).<\/p><\/blockquote>\n<p>\nJa l\u00f5puks, saame m\u00e4\u00e4ratleda <b>video<\/b> j\u00e4rjestikuna <b>n<\/b> kaadreid aja jooksul <b>mis on lisam\u00f5\u00f5de. Siis on see kaadrisagedus ehk kaadrite number sekundis (<\/b>FPS <b>n<\/b> Frames per Second<b>Kahtlemata on videote vaatamiseks vajalik bitihulk sekundis selle<\/b> \u2014 l\u00fchend <i>edastuskiirus<\/i>).<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus\" src=\"\/wp-content\/uploads\/2019\/12\/f940932bbd66aa361c7966f8b44ed431.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nbitrate <b>bitrate = laius * k\u00f5rgus * bitis\u00fcgavus * kaadreid sekundis<\/b> \u2014 <b>N\u00e4iteks, 30 kaadriga sekundis, 24 bitti pikslite kohta, eraldusv\u00f5ime 480x240 vajab 82,944,000 bitti sekundis v\u00f5i 82,944 Mbit\/s (30x480x240x24) \u2014 aga see kehtib vaid juhul, kui ei kasutata mingit tihendamismeetodit.<\/b>.<\/p>\n<blockquote><p>Kui edastuskiirus<\/p><\/blockquote>\n<p>\nN\u00e4iteks, 30 kaadrit sekundis, 24 bitti pikseli kohta ja 480&#215;240 resolutsioon n\u00f5uab 82,944,000 bitti sekundis v\u00f5i 82,944 Mbit\/s (30x480x240x24) \u2014 kuid see kehtib juhul, kui ei kasutata mingeid tihendamismeetodeid.<\/p>\n<p>, siis nimetatakse seda <i>konstandiks edastuskiirus<\/i>CBR <b>constant bit rate<\/b> (<b>CBR<\/b> \u2014 l\u00fchend <i>p\u00fcsiv bitikiirus<\/i>). Kuid see v\u00f5ib samuti varieeruda, sellisel juhul nimetatakse <b>muutuvate edastuskiirus<\/b> (<b>VBR<\/b> \u2014 l\u00fchend <i>muutuv bitikiirus<\/i>).<\/p>\n<p>See graafik n\u00e4itab piiratud VBR-i, kui t\u00e4ielikult musta kaadri korral ei kulu liiga palju bitte.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus\" src=\"\/wp-content\/uploads\/2019\/12\/f307dde8da9ef1e017646ebcad0c4062.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAlguses t\u00f6\u00f6tasid insenerid v\u00e4lja meetodi videodispelai kiirusperioodi tajumise kahekordistamiseks ilma t\u00e4iendava ribalaiuseta. Seda meetodit tuntakse <b>v\u00e4lhekseldatud videona<\/b>; \u00fcldiselt saadetakse esimese 'kaadri' ajal pool ekraani ja j\u00e4rgmise 'kaadri' ajal teine pool.<\/p>\n<p>Praegu toimub stseenide visualiseerimine enamasti <b>progressiivse skaneerimise<\/b>. See on meetod, kus liikuvate piltide kuvamine, salvestamine v\u00f5i edastamine toimub, kus iga kaadri k\u00f5ik read joonistatakse j\u00e4rjestikku.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus\" src=\"\/wp-content\/uploads\/2019\/12\/434afd828d803ec1e4c87a3827c07dde.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNoh, n\u00fc\u00fcd teame, kuidas pilt esitatakse digitaalsetes vormingutes, kuidas selle v\u00e4rvid on organiseeritud, kui palju bitte sekundis kulutame video n\u00e4itamiseks, kui edastuskiirus on konstantne (CBR) v\u00f5i muutuv (VBR). Oleme tuttavad m\u00e4\u00e4ratud eraldusv\u00f5imega, kasutades m\u00e4\u00e4ratud kaadrisagedust, ning oleme tutvunud paljude teiste m\u00f5istetega, nagu v\u00e4lhekseldatud video, PAR ja m\u00f5ned teised.<\/p>\n<h2>\u00dcksikasjade eemaldamine<\/h2>\n<p>\nOn teada, et kompressitud videot ei saa normaalselt kasutada. Tund aega 720p eraldusv\u00f5ime ja 30 kaadrit sekundis v\u00f5taks 278 GB. Sellele v\u00e4\u00e4rtusele j\u00f5uame, kui korrutame 1280 x 720 x 24 x 30 x 3600 (laius, k\u00f5rgus, bitid pikslis, FPS ja aja sekundid).<\/p>\n<p>Kasutamine <b>kaotusevabal kompressioonialgoritmide<\/b>, nagu DEFLATE (kasutatakse PKZIP-is, Gzip-is ja PNG-s), ei tagatud piisavalt v\u00e4hendatud ribalaiust. Peame leidma muid video kompressimise viise.<\/p>\n<p>Selleks saab kasutada meie n\u00e4gemisv\u00f5ime omadusi. Me eristame heledust paremini kui v\u00e4rve. Video on j\u00e4rjestikuste piltide kogum, mis kordub ajas. \u00dcksikute stseenide vaheliste kaadrite vahe on v\u00e4ike. Peale selle sisaldavad iga kaader palju alasid, mis kasutavad sama (v\u00f5i sarnast) v\u00e4rvi.<\/p>\n<h2>V\u00e4rv, heleduse ja meie silmad<\/h2>\n<p>\nMeie silmad on heledusele tundlikumad kui v\u00e4rvile. Saate ise seda kinnitada, vaadates seda pilti.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus\" src=\"\/wp-content\/uploads\/2019\/12\/bf50b7dfd54ebbdb66556bbf5e304090.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Kui te ei n\u00e4e, mis on pildi vasakus pooles ruutude v\u00e4rvid <b>A<\/b> ja <b>B<\/b> kui nad on tegelikult samad, siis see on normaalne. Meie aju sunnib meid rohkem t\u00e4helepanu p\u00f6\u00f6rama valguse ja varju erinevustele, mitte v\u00e4rvile. Paremal pool t\u00e4histatud ruutude vahel on sama v\u00e4rvi vaheosa - seega suudame (ehk siis meie aju) kergesti eristada, et seal on tegelikult \u00fcks ja sama v\u00e4rv.<\/p>\n<blockquote><p>Vaatame lihtsustatult, kuidas meie silmad t\u00f6\u00f6tavad. Silm on keeruline organ, mis koosneb paljusid osadest. Kuid meid huvitavad peamiselt koonus- ja pulgarakud. Silm sisaldab umbes 120 miljonit pulgarakku ja 6 miljonit koonusrakku.<\/p>\n<p>Uurime v\u00e4rvi ja heleduse tajumist eraldi silma teatud osade funktsioonidena (tegelikult on asi veidi keerulisem, kuid lihtsustame). Pulgarakud vastutavad peamiselt heleduse eest, samas kui koonusrakud vastutavad v\u00e4rvi eest. Koonusrakud jagunevad kolme t\u00fc\u00fcpi, s\u00f5ltuvalt sisalduvast pigmendist: S-koonusrakud (sinine), M-koonusrakud (roheline) ja L-koonusrakud (punane).<\/p>\n<p>Kuna meil on palju rohkem pulgakesi (heleduse jaoks) kui koonusrakke (v\u00e4rvi jaoks), v\u00f5ib j\u00e4reldada, et oleme rohkem v\u00f5imelised eristama \u00fcleminekuid tumeduse ja valguse vahel kui v\u00e4rve.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus\" src=\"\/wp-content\/uploads\/2019\/12\/d344365d45e43b36635ce29baa1132b4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Kontrastsuse tundlikkuse funktsioonid<\/h2>\n<p>\nEksperimentaalse ps\u00fchholoogia ja paljude teiste valdkondade teadlased on v\u00e4lja t\u00f6\u00f6tanud mitmeid teooriaid inimn\u00e4gemise kohta. Ja \u00fcks neist nimetatakse <b>kontrastsuse tundlikkuse funktsioonideks<\/b>. Need on seotud ruumilise ja ajaliselt valgustusega. L\u00fchidalt \u00f6eldes r\u00e4\u00e4gime sellest, kui palju on vaja muutusi, enne kui vaatleja neid m\u00e4rkab. Pange t\u00e4hele s\u00f5na \u201efunktsioon\u201d mitmust. See on seotud sellega, et me saame m\u00f5\u00f5ta kontrastsuse tundlikkuse funktsioone mitte ainult mustvalge, vaid ka v\u00e4rvilise pildi suhtes. Nende katsete tulemused n\u00e4itavad, et enamikul juhtudel on meie silmad heleduse suhtes tundlikumad kui v\u00e4rvi suhtes.<\/p><\/blockquote>\n<p>Kuna on teada, et oleme pildi heledusele tundlikumad, on m\u00f5istlik kasutada seda fakti.<\/p>\n<h2>V\u00e4rvimudel<\/h2>\n<p>\nOleme veidi aru saanud, kuidas t\u00f6\u00f6tada v\u00e4rviliste piltidega, kasutades RGB-skeemi. On ka teisi mudeleid. On mudel, mis eraldab heleduse v\u00e4rvusest ja see on tuntud kui <b>YCbCr<\/b>. Muide, on ka teisi mudeleid, mis teevad sarnast eraldamist, kuid vaatame ainult seda.<\/p>\n<p>Selles v\u00e4rvimudelis <b>Y<\/b> \u2014 on heleduse esitamine ning kasutatakse kaht v\u00e4rvikanalit: <b>Cb<\/b> (k\u00fcllastunud sinine) ja <b>Cr<\/b> (k\u00fcllastunud punane). YCbCr saadakse RGB-st, nagu ka vastupidine teisendus on v\u00f5imalik. Kasutades seda mudelit, saame luua t\u00e4isv\u00e4rvilisi pilte, nagu n\u00e4eme allpool:<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus\" src=\"\/wp-content\/uploads\/2019\/12\/e7458471caf7ef071bb0362e96b44f11.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Teisendus YCbCr ja RGB vahel<\/h2>\n<p>\nM\u00f5ned v\u00f5ivad v\u00e4ita: kuidas on v\u00f5imalik saada k\u00f5iki v\u00e4rve, kui roheline ei ole kasutusel?<\/p>\n<p>K\u00fcsimusele vastamiseks teisendame RGB YCbCr-iks. Kasutame MSE poolt kehtestatud koefitsiiente <b>BT.601<\/b>, mis on soovitatud <b>ITU-R<\/b>. See \u00fcksus m\u00e4\u00e4ratleb digitaalvideo standardid. N\u00e4iteks: mis on 4K? Millised peaksid olema kaadrisagedus, resolutsioon, v\u00e4rvimudel?<\/p>\n<p>Esiteks arvutame heledus. Kasutame ITU poolt pakutud konstande ja asendame RGB v\u00e4\u00e4rtused.<\/p>\n<p><b>Y<\/b> = 0.299<b>R<\/b> + 0.587<b>G<\/b> + 0.114<b>B<\/b> <\/p>\n<p>P\u00e4rast heleduse saamist lahutame sinise ja punase v\u00e4rvi:<\/p>\n<p><b>Cb<\/b> = 0.564(<b>B<\/b> \u2014 <b>Y<\/b>)<\/p>\n<p><b>Cr<\/b> = 0.713(<b>R<\/b> \u2014 <b>Y<\/b>) <\/p>\n<p>Ja me saame ka tagasi teisendada ja isegi roheline v\u00e4rvi YCbCr abil saada:<\/p>\n<p><b>R<\/b> = <b>Y<\/b> + 1.402<b>Cr<\/b><\/p>\n<p><b>B<\/b> = <b>Y<\/b> + 1.772<b>Cb<\/b><\/p>\n<p><b>G<\/b> = <b>Y<\/b> \u2014 0.344<b>Cb<\/b> \u2014 0.714<b>Cr<\/b><\/p>\n<p>\u00dcldiselt kasutavad ekraanid (monitorid, telerid, ekraanid jne) ainult RGB mudelit. Kuid see mudel v\u00f5ib olla korraldatud erinevalt:<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus\" src=\"\/wp-content\/uploads\/2019\/12\/8736e59d3a7606494fe6a7718d5b4aa2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>V\u00e4rvialane subdiskreetimine<\/h2>\n<p>\nPilti, mis on esitatud heleduse ja v\u00e4rvuse kombinatsioonina, saame kasutada inimeste n\u00e4gemiss\u00fcsteemi suuremat tundlikkust heledusele v\u00f5rreldes v\u00e4rvuse tundlikkusega, kui eemaldame teavet valikuliselt. V\u00e4rvialane subdiskreetimine on meetod, kuidas kodeerida pilte, kasutades v\u00e4rvuse jaoks madalamat resolutsiooni kui heleduse jaoks.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus\" src=\"\/wp-content\/uploads\/2019\/12\/11b5b602ab1374896df296f787932ace.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Kui lubatud on v\u00e4rvuse resolutsiooni v\u00e4hendamine?! Tundub, et juba on olemas m\u00f5ned skeemid, mis kirjeldavad, kuidas t\u00f6\u00f6tada resolutsiooni ja sulandumisega (L\u00f5ppv\u00e4rv = Y + Cb + Cr).<\/p>\n<p>Need skeemid on tuntud kui <b>subdiskreetimise s\u00fcsteemid<\/b> ja v\u00e4ljendatakse 3:2 suhe \u2014 <b>a<\/b>:<b>x<\/b>:<b>y<\/b>, mis m\u00e4\u00e4ratleb heleduse ja v\u00e4rvuse vahe signaalide v\u00f5tmiste arvu.<\/p>\n<p><b>a<\/b> \u2014 standardne horisontaalne v\u00f5tete arv (\u00fcldiselt 4)<br \/>\n<b>x<\/b> \u2014 v\u00e4rvuse v\u00f5tete arv esimeses pikseliribas (horisontaalne resolutsioon v\u00f5rreldes <b>a<\/b>)<br \/>\n<b>y<\/b> \u2014 v\u00e4rvuse v\u00f5tete muudatuste arv esimese ja teise pikseliriba vahel.<\/p>\n<blockquote><p>Erandina on <b>4<\/b>:<b>1<\/b>:<b>0<\/b>, mis tagab \u00fche v\u00e4rvuse v\u00f5tte igas heleduse 4x4 resolutsiooni plokis.<\/p><\/blockquote>\n<p>Kaasaegsetes koodekites kasutatavad \u00fcldised skeemid:<\/p>\n<ul>\n<li><b>4<\/b>:<b>4<\/b>:<b>4<\/b> (ilma aladieskreetimiseta)<\/li>\n<li><b>4<\/b>:<b>2<\/b>:<b>2<\/b><\/li>\n<li><b>4<\/b>:<b>1<\/b>:<b>1<\/b><\/li>\n<li><b>4<\/b>:<b>2<\/b>:<b>0<\/b><\/li>\n<li><b>4<\/b>:<b>1<\/b>:<b>0<\/b><\/li>\n<li><b>3<\/b>:<b>1<\/b>:<b>1<\/b><\/li>\n<\/ul>\n<blockquote>\n<h3>YCbCr 4:2:0 \u2014 sulandumise n\u00e4ide<\/h3>\n<p>\nSiin on YCbCr 4:2:0 kasutades \u00fchendatud pildi fragment. Pange t\u00e4hele, et kulutame ainult 12 bitti pikseli kohta.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus\" src=\"\/wp-content\/uploads\/2019\/12\/67e288b0a46fca88452addaef736f4cd.png\" style=\"display:block;margin: 0 auto;\" \/><\/p><\/blockquote>\n<p>N\u00e4ete, kuidas sama pilt on kodeeritud peamiste v\u00e4rvi aladieskreetimise t\u00fc\u00fcpidega. \u00dclemine rida on l\u00f5plik YCbCr, alumine rida n\u00e4itab v\u00e4rvilisuse resolutsiooni. Tulemused on \u00fcsna k\u00f5rged, arvestades, et kvaliteedi kaotused on minimaalsed.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus\" src=\"\/wp-content\/uploads\/2019\/12\/fb54b6fcdbbb63cb19d19b89df9f6d85.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKas m\u00e4letate, et arvutasime v\u00e4lja 278 GB kettaruumi, et salvestada \u00fche tunni video 720p resolutsiooniga ja 30 kaadrit sekundis? Kui kasutame YCbCr 4:2:0, kahaneb see suurus poole v\u00f5rra \u2013 139 GB. Siiski on veel kaugeltki k\u00e4tte saadavast tulemusest.<\/p>\n<p>Saate ise YCbCr-i histogrammi kasutada FFmpegiga. Selles pildis on sinine v\u00e4rv punase \u00fclekaalus, mis on histogrammil h\u00e4sti n\u00e4htav.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus\" src=\"\/wp-content\/uploads\/2019\/12\/6e74cb646cabc77079aea7eaee846fd1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<blockquote>\n<h4>V\u00e4rvilisus, heledus, v\u00e4rvigamma \u2014 video\u00fclevaade<\/h4>\n<p>\nSoovitame vaadata seda p\u00f6\u00f6rasep\u00e4rast videot. Siin selgitatakse, mis on heledus, ja \u00fcldse, k\u00f5ik punktid on paika pandud <i>\u00fc<\/i> heleduse ja v\u00e4rvi osas.<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"Ymt47wXUDEU\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/Ymt47wXUDEU\/hqdefault.jpg\" alt=\"M\u00e4ngi videot\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p><\/blockquote>\n<h2>Kaadrit\u00fc\u00fcbid<\/h2>\n<p>\nLiigume edasi. Proovime k\u00f5rvaldada aja\u00fclekande. Kuid k\u00f5igepealt m\u00e4\u00e4ratleme m\u00f5ned p\u00f5histerminid. Oletame, et meil on film, kus on 30 kaadrit sekundis, siin on selle esimesed 4 kaadrit:<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus\" src=\"\/wp-content\/uploads\/2019\/12\/103dc714d756d014e1d2c1bfb33751b1.png\" style=\"display:block;margin: 0 auto;\" \/> <img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus\" src=\"\/wp-content\/uploads\/2019\/12\/fdd7d89b884b2f77fea7c386c0d29fef.png\" style=\"display:block;margin: 0 auto;\" \/> <img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus\" src=\"\/wp-content\/uploads\/2019\/12\/61746b829025d5abcb7db072a54400c0.png\" style=\"display:block;margin: 0 auto;\" \/> <img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus\" src=\"\/wp-content\/uploads\/2019\/12\/c65ee526ec4539996f6bb94463d0cf2d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u00e4eme kaader-kaadrisse palju kordusi: n\u00e4iteks sinine taust, mis ei muutu kaadri kaupa. Selle probleemi lahendamiseks saame neid abstraktselt klassifitseerida kolme kaadrit\u00fc\u00fcbina.<\/p>\n<h3>I-kaader (<b>I<\/b>ntro Frame)<\/h3>\n<p>\nI-kaader (viidekaader, v\u00f5tme kaader, sisene kaader) on iseseisev. \u00dcksk\u00f5ik, mida visuaalselt n\u00e4idata, on I-kaader p\u00f5him\u00f5tteliselt staatiline foto. Esimene kaader on tavaliselt I-kaader, kuigi vaatame regulaarselt I-kaadreid ka kaugemates kaadrites.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus\" src=\"\/wp-content\/uploads\/2019\/12\/44f2a7d6154f1a40fdb1174a443a9c3f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>P-kaader (<b>P<\/b>redicted Frame)<\/h3>\n<p>\nP-raak (prognoositud raami) kasutab \u00e4ra asjaolu, et peaaegu alati saab praegust pilti reproduktsioonida eelmise raami abil. N\u00e4iteks, teises raam, ainus muudatus on edasi liikuv pall. Me saame raam 2 lihtsalt veidi muutes raam 1, kasutades ainult nende raamide vahet. Raami 2 koostamiseks tugineme tema eelnevale raami 1.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus\" src=\"\/wp-content\/uploads\/2019\/12\/1245857fd8406a24da02d0c71beb7b4d.png\" style=\"display:block;margin: 0 auto;\" \/> \u2190 <img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus\" src=\"\/wp-content\/uploads\/2019\/12\/ab8e8f6020825830c4d03004528af1a4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>B-raak (<b>B<\/b>i-predictive Frame)<\/h3>\n<p>\nA kuidas oleks, kui viidata mitte ainult minevikule, vaid ka tulevastele raamidele, et tagada veel parem tihendamine?! See on p\u00f5hjeti B-raak (kahepoolne raami).<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus\" src=\"\/wp-content\/uploads\/2019\/12\/f28d4e02836e9b37f0f21937dd1ba660.png\" style=\"display:block;margin: 0 auto;\" \/> \u2190 <img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus\" src=\"\/wp-content\/uploads\/2019\/12\/7a6b3a329db155c94a91f58a99874bb9.png\" style=\"display:block;margin: 0 auto;\" \/> \u2192 <img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus\" src=\"\/wp-content\/uploads\/2019\/12\/09df4bc5a35df89575c7b51349be4340.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Vahekokkuv\u00f5te<\/h2>\n<p>\nNeed raamit\u00fc\u00fcbid on kasutusel parima tihendamise tagamiseks. Me vaatame, kuidas see toimub, j\u00e4rgnevas jaotises. Kuid hetkeks m\u00e4rkigem, et k\u00f5ige \"kulukam\" m\u00e4lu kulutamiseks on I-raak, P-raak on m\u00e4rgatavalt odavam, aga k\u00f5ige soodsam variant video jaoks on B-raak.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus\" src=\"\/wp-content\/uploads\/2019\/12\/97b9177ffff302881deb1c86ce416166.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Ajaliselt \u00fcleliigne (vahekaadri prognoosimine)<\/h2>\n<p>\nVaadakem, millised on meie v\u00f5imalused ajakohaste korduste v\u00e4hendamiseks. Seda t\u00fc\u00fcpi \u00fcleliigne lahendame vastastikuse prognoosimise meetoditega.<\/p>\n<p>P\u00fc\u00fcame kulutada v\u00f5imalikult v\u00e4he bitte, et kodeerida raamide 0 ja 1 jada.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus\" src=\"\/wp-content\/uploads\/2019\/12\/f0dc2df33a5297622a77a4ca09b19af8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMe saame <b>lahutamise<\/b>, lihtsalt lahutame raam 1 raamist 0. Saame raam 1, kasutades erinevust selle ja eelmise raami vahel, tegelikult kodeerime ainult saadud j\u00e4\u00e4ki.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus\" src=\"\/wp-content\/uploads\/2019\/12\/c14981c3a3a0459a02620805c4a0f2db.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAga mis siis, kui ma \u00fctleksin, et on veel parem meetod, mis kasutab veel v\u00e4hem bitte?! Alustame raami 0 jagamist selgeks v\u00f5rgustikuks, mis koosneb plokkidest. Ja siis proovime sobitada plokke raamist 0 raami 1. Teisis\u00f5nu, hindame liikumist raamide vahel.<\/p>\n<blockquote><p> Wikipediast \u2014 <b>plokkide liikumise kompensatsioon<\/b><\/p>\n<p>Plokkide liikumise kompensatsioon jagab praeguse raami mitte\u00fchtivateks plokkideks ja liikumise kompensatsiooni vektor n\u00e4itab plokkide p\u00e4ritolu (levinud eksiarvamus on see, et <i>eelmine<\/i> Kaader jaguneb omavahel mitte\u00fcletavatesse blokki, samas kui liikumise kompensatsiooni vektorid n\u00e4itavad, kuhu need blokid liiguvad. Tegelikult anal\u00fc\u00fcsitakse mitte eelmise kaadri, vaid j\u00e4rgmise kaadri andmeid, et v\u00e4lja selgitada, mitte kuhu blokid liiguvad, vaid kust nad ilmusid. Tavaliselt kattuvad l\u00e4hteblokkide osad algses kaadris. M\u00f5ned videokompressiooni algoritmid koguvad praeguse kaadri koostisosad isegi mitte \u00fchest, vaid kohe mitmest varasemalt edastatud kaadrist.<\/p><\/blockquote>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus\" src=\"\/wp-content\/uploads\/2019\/12\/0c34e84b318be2d250bade240fad80ed.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHindamise k\u00e4igus n\u00e4eme, et pall on liikunud punktist (<b>x<\/b>=0, <b>y<\/b>=25) punkti (<b>x<\/b>=6, <b>y<\/b>=26), v\u00e4\u00e4rtused <b>x<\/b> ja <b>y<\/b> m\u00e4\u00e4ravad liikumise vektori. Veel \u00fcks samm, mida saame teha, et s\u00e4ilitada bitsid, on kodeerida ainult liikumise vektorite erinevust viimase bloki asukoha ja prognoositud vahel, mist\u00f5ttu l\u00f5plik liikumise vektor on (x=6-0=6, y=26-25=1).<\/p>\n<p>T\u00f5elises olukorras oleks see pall jagatud <b>n<\/b> blokkideks, kuid asja sisu ei muutu.<\/p>\n<p>Kaadris liikuvad objektid liiguvad kolmes m\u00f5\u00f5tmes, seega v\u00f5ib palli liikumisel see visuaalselt v\u00e4iksemaks muutuda (v\u00f5i suuremaks, kui see liigub vaatleja suunas). on normaalne, et blokid ei vasta ideaalselt. Siin on meie hinde ja reaalse pildi \u00fchtne vaade.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus\" src=\"\/wp-content\/uploads\/2019\/12\/0fb4737e1076221e786fd6a78357422d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKuid n\u00e4eme, et kui rakendame liikumise hindamist, on kodeerimise andmeid m\u00e4rgatavalt v\u00e4hem kui lihtsama raamide vahelise erinevuse arvutamise meetodi puhul.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus\" src=\"\/wp-content\/uploads\/2019\/12\/319507ad7197b7693efff11dcd7e4df4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Kuidas n\u00e4eb v\u00e4lja t\u00f5eline liikumise kompensatsioon<\/h2>\n<p>\nSee meetod rakendatakse kohe k\u00f5igile blokkidele. Sageli meie tinglikult liikuv pallike jagatakse kohe mitmeks blokkiks.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus\" src=\"\/wp-content\/uploads\/2019\/12\/978b5612dbd164d2865ccdec4474fdb4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSa saad ise neid m\u00f5isteid tunnetada, kasutades <noindex><a rel=\"nofollow\" href=\"https:\/\/jupyter.org\/\">Jupyter<\/a><\/noindex>.<\/p>\n<p>Liikumise vektorite n\u00e4gemiseks saab luua video v\u00e4lise prognoosimise abil, kasutades <noindex><a rel=\"nofollow\" href=\"https:\/\/www.ffmpeg.org\/\">ffmpeg<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus\" src=\"\/wp-content\/uploads\/2019\/12\/056d6dfd2c18baaabc70655edfe3d609.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSamuti v\u00f5ib kasutada <noindex><a rel=\"nofollow\" href=\"https:\/\/software.intel.com\/en-us\/video-pro-analyzer\">Intel Video Pro Analyzer<\/a><\/noindex> (see on tasuline, kuid saadaval on tasuta prooviversioon, mis on piiratud ainult esimese k\u00fcmne kaadriga).<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus\" src=\"\/wp-content\/uploads\/2019\/12\/5e28ccc6e6101b8d613f94d326a685f2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Ruumiline \u00fcleliigsus (sisemine prognoos)<\/h2>\n<p>\nKui anal\u00fc\u00fcsida iga kaadrit videos, avastame palju omavahel seotud piirkondi.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus\" src=\"\/wp-content\/uploads\/2019\/12\/24bff6d64704cf0c8e1010832ea8f6ea.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVaadakem seda n\u00e4idet. See stsenaarium koosneb peamiselt sinisest ja valgest v\u00e4rvist.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus\" src=\"\/wp-content\/uploads\/2019\/12\/12edf221c61e064674ad363db9f3342c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSee on I-kaader. Eelmisi kaadreid prognoosimiseks kasutada ei saa, kuid suudame seda siiski kokku suruda. Kodeerime punase bloki v\u00e4ljatoomise. Kui vaatame selle naabritele, m\u00e4rkame, et selle \u00fcmber on teatavad v\u00e4rvilised kalduvused.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus\" src=\"\/wp-content\/uploads\/2019\/12\/b67b3fba3d1792db81d0f1cb52c7c29b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEeldame, et pildis levivad v\u00e4rvid vertikaalselt. See t\u00e4hendab, et tundmatute pikslite v\u00e4rvid sisaldavad naabrite v\u00e4\u00e4rtusi.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus\" src=\"\/wp-content\/uploads\/2019\/12\/6fe8f6ed7ebc66940fca27b8cd2c5915.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSelline prognoos v\u00f5ib osutuda vale. Just sellep\u00e4rast tuleb rakendada seda meetodit (sisemine prognoos), ja seej\u00e4rel veel lahutada reaalsed v\u00e4\u00e4rtused. See annab meile j\u00e4\u00e4kploki, mis toob kaasa palju kompaktsema maatriksi v\u00f5rreldes originaaliga.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus\" src=\"\/wp-content\/uploads\/2019\/12\/52fd77c96aa8445af12fca468c72c844.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKui soovite harjutada sisemiste prognoosidega, v\u00f5ite luua video makrobokside ja nende prognoosidega, kasutades ffmpeg. Selleks, et m\u00f5ista iga bloki v\u00e4rvi t\u00e4hendust, peate tutvuma ffmpeg dokumentatsiooniga.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus\" src=\"\/wp-content\/uploads\/2019\/12\/0399473c538a550f9317fd59c347a565.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nV\u00f5i v\u00f5ite kasutada Intel Video Pro Analyzerit (nagu ma eelnevalt mainisin, on tasuta prooviversioonis piirang esimestele 10 kaadrile, kuid seda mahu t\u00e4itmiseks piisab esialgu).<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hikoolitus\" src=\"\/wp-content\/uploads\/2019\/12\/abcdf1eb4b7dbdcf2a7a64154f3052ba.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Teine osa:<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/480430\/\"> Videokoodri t\u00f6\u00f6p\u00f5him\u00f5tted<\/a><\/noindex><\/h3>\n<p>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/481418\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0442\u043e\u0440\u0430\u044f \u0447\u0430\u0441\u0442\u044c: \u041f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u0438\u0434\u0435\u043e\u043a\u043e\u0434\u0435\u043a\u0430 \u041b\u044e\u0431\u043e\u0435 \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 \u0434\u0432\u0443\u043c\u0435\u0440\u043d\u043e\u0439 \u043c\u0430\u0442\u0440\u0438\u0446\u044b. \u041a\u043e\u0433\u0434\u0430 \u0440\u0435\u0447\u044c \u0437\u0430\u0445\u043e\u0434\u0438\u0442 \u043e \u0446\u0432\u0435\u0442\u0430\u0445, \u0438\u0434\u0435\u044e \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0432\u0438\u0442\u044c, \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432 \u0432\u0438\u0434\u0435 \u0442\u0440\u0435\u0445\u043c\u0435\u0440\u043d\u043e\u0439 \u043c\u0430\u0442\u0440\u0438\u0446\u044b, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0438\u0437 \u0446\u0432\u0435\u0442\u043e\u0432. \u0415\u0441\u043b\u0438 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0438\u0442\u043e\u0433\u043e\u0432\u044b\u0439 \u0446\u0432\u0435\u0442 \u043a\u0430\u043a \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044e \u0442.\u043d. \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0446\u0432\u0435\u0442\u043e\u0432 (\u043a\u0440\u0430\u0441\u043d\u043e\u0433\u043e, \u0437\u0435\u043b\u0435\u043d\u043e\u0433\u043e \u0438 \u0441\u0438\u043d\u0435\u0433\u043e), \u0432 \u043d\u0430\u0448\u0435\u0439 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-54312","post","type-post","status-publish","format-standard","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0442\u043e\u0440\u0430\u044f \u0447\u0430\u0441\u0442\u044c: \u041f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u0438\u0434\u0435\u043e\u043a\u043e\u0434\u0435\u043a\u0430 \u041b\u044e\u0431\u043e\u0435 \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u0432\u0438\u0434\u0435.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/et\/blog\/news\/kak-rabotaet-videokodek-chast-1-osnovy\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u0438\u0434\u0435\u043e\u043a\u043e\u0434\u0435\u043a. \u0427\u0430\u0441\u0442\u044c 1. \u041e\u0441\u043d\u043e\u0432\u044b | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0442\u043e\u0440\u0430\u044f \u0447\u0430\u0441\u0442\u044c: \u041f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u0438\u0434\u0435\u043e\u043a\u043e\u0434\u0435\u043a\u0430 \u041b\u044e\u0431\u043e\u0435 \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u0432\u0438\u0434\u0435.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/news\/kak-rabotaet-videokodek-chast-1-osnovy\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-12-22T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:02:18+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Kuidas t\u00f6\u00f6tab videokooder. Osa 1. P\u00f5hit\u00f5ed | ProHoster","description":"Teine osa: Videokooderi t\u00f6\u00f6p\u00f5him\u00f5tted Iga rasterpilt saab esitada kujul.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/news\/kak-rabotaet-videokodek-chast-1-osnovy","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u0438\u0434\u0435\u043e\u043a\u043e\u0434\u0435\u043a. \u0427\u0430\u0441\u0442\u044c 1. \u041e\u0441\u043d\u043e\u0432\u044b | ProHoster","og:description":"\u0412\u0442\u043e\u0440\u0430\u044f \u0447\u0430\u0441\u0442\u044c: \u041f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u0438\u0434\u0435\u043e\u043a\u043e\u0434\u0435\u043a\u0430 \u041b\u044e\u0431\u043e\u0435 \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u0432\u0438\u0434\u0435.","og:url":"https:\/\/prohoster.info\/et\/blog\/news\/kak-rabotaet-videokodek-chast-1-osnovy","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-12-22T21:00:00+00:00","article:modified_time":"2020-02-18T11:02:18+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"54312","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-24 10:53:20","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 15:31:31","updated":"2026-01-24 10:53:20","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/54312","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=54312"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/54312\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=54312"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=54312"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=54312"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}