{"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\/novosti-interneta\/kak-rabotaet-videokodek-chast-1-osnovy","title":{"rendered":"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hit\u00f5ed","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\/\"> Videokodeki 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\u00e4rvide kohta, siis ideed saab arendada, vaadates pilti kui<\/b>kolmem\u00f5\u00f5tmelist maatriksit <b>, kus lisam\u00f5\u00f5tmeid kasutatakse 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 tasandit: esimene punasele, teine rohelisele ja viimane sinisele.<\/p>\n<p>Kutsume seda maatriksi igat punkti piksliks (pildi elemendiks). Iga piksel sisaldab teavet iga v\u00e4rvi intensiivsuse kohta (tavaliselt numbrilise v\u00e4\u00e4rtusena). 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\u00f5hit\u00f5ed\" src=\"\/wp-content\/uploads\/2019\/12\/ce37dd683a4c3ed434dae1d488646716.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\npunane piksel <b>t\u00e4hendab, et sellel on 0 rohelist, 0 sinist ja maksimaalne punane.<\/b> Roosa piksel <b>v\u00f5ib olla moodustatud kolme v\u00e4rvi kombinatsiooni abil. Kasutades numbrilist vahemikku 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 EDISONi 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\u00f5hit\u00f5ed\" src=\"\/wp-content\/uploads\/2019\/12\/e5063b9a32248767cb0702e7aa2e7f9e.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br clear=\"right\"><br \/>\nArendame<\/p>\n<p>Arendame <noindex><a rel=\"nofollow\" href=\"https:\/\/www.edsd.ru\/ru\/portfolio\/tehnologiya\/video\">videovalve rakendused, voogedastusvideo<\/a><\/noindex>, samuti tegeleme <noindex><a rel=\"nofollow\" href=\"https:\/\/www.edsd.ru\/videozapis-v-bolnichnoj-operacionnoj-s-vozmozhnostyu-obsuzhdeniya-na-forume\">videokontroll kirurgilises ruumis<\/a><\/noindex>.<\/p><\/blockquote>\n<h3>Alternatiivsed meetodid v\u00e4rvipildi kodeerimiseks<\/h3>\n<p>\nKuvamiseks on palju muid mudelite olemas, mis kirjeldavad v\u00e4rve pildis. N\u00e4iteks v\u00f5ib kasutada indekseeritud paletti, kus iga piksel on esindatud \u00fche baitiga, v\u00f5rreldes kolme baitiga, mis on vajalik RGB-mudelis. Sellises mudelis v\u00f5ib iga v\u00e4rvi esitlemiseks kasutada 2D-matrixit 3D-matriisi asemel. See s\u00e4\u00e4stab m\u00e4lu, kuid pakub v\u00e4iksemat v\u00e4rvivalikut.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hit\u00f5ed\" src=\"\/wp-content\/uploads\/2019\/12\/573a39c53527b4ec0403f019becf2d22.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>RGB<\/h2>\n<p>N\u00e4iteks vaadake allolevat pilti. Esimene joonis on t\u00e4ielikult v\u00e4rvitud. \u00dclej\u00e4\u00e4nud on punased, rohelised ja sinised tasandid (vastavate v\u00e4rvide intensiivsus on esitatud halli skaala j\u00e4rgi).<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hit\u00f5ed\" src=\"\/wp-content\/uploads\/2019\/12\/cf1f802d4381e062005490f5f9f26911.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u00e4eme, et punase tooni varjundid originaalis asuvad samades kohtades, kus on n\u00e4ha teise n\u00e4o eredamad osad. Samas on sinise v\u00e4rvi panus peamiselt n\u00e4htav ainult Mario silmades (viimane n\u00e4gu) ja tema riiete elementides. Pange t\u00e4hele, kuhu k\u00f5ik kolm v\u00e4rvitegemist annavad k\u00f5ige v\u00e4hem panust (tumedamad osad piltidel) \u2014 see on Mario vuntsides.<\/p>\n<p>Iga v\u00e4rvi intensiivsuse salvestamiseks on vajalik kindel arv bitte \u2014 seda nimetatakse <b>bittide s\u00fcgavuseks<\/b>. Oletame, et kulutatakse 8 bitti (v\u00e4\u00e4rtusest 0 kuni 255) \u00fche v\u00e4rvitegemise kohta. Sel juhul on meil v\u00e4rvis\u00fcgavus 24 bitti (8 bitti * 3 R\/G\/B ette).<\/p>\n<p>Teine omadus, millega piltidega tegeledes kokku puutume, on <b>eraldusv\u00f5ime<\/b>, mis esindab pikslite arvu \u00fches m\u00f5\u00f5tmes. Sageli t\u00e4histatakse seda kui <b>laius \u00d7 k\u00f5rgus<\/b>, nagu alloleval 4x4 pildin\u00e4idisel.<br \/>\n<img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hit\u00f5ed\" src=\"\/wp-content\/uploads\/2019\/12\/51a4d948e6d44e4058e346fdbaf9d6c2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVeel \u00fcks omadus, millega me t\u00f6\u00f6tades pilte\/ videotega kokku puutume, on <b>kuvasuhe<\/b>, mis kirjeldab tavalist proportsionaalset seost pildi v\u00f5i piksli laiuse ja k\u00f5rguse vahel.<\/p>\n<p>Kui r\u00e4\u00e4gitakse, et m\u00f5ne filmi v\u00f5i pildi suurus on 16:9, siis tavaliselt m\u00f5eldakse <b>ekraani kuvasuhet<\/b> (<b>DAR<\/b> \u2014 l\u00fchend <i>Display Aspect Ratio<\/i>). Siiski v\u00f5ivad eraldi pikslite vormid olla erinevad \u2014 sel juhul r\u00e4\u00e4gime <b>pikslisuhtest<\/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\u00f5hit\u00f5ed\" 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\u00f5hit\u00f5ed\" src=\"\/wp-content\/uploads\/2019\/12\/a610f0f77bdb245c05799d3de4147302.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<blockquote><p>K\u00f6\u00f6gin\u00f5ustajale t\u00e4helepanekuks: <b>DVD<\/b> vastab <b>DAR 4:3<\/b><\/p>\n<p>Kuigi DVD tegelik eraldusv\u00f5ime on 704\u00d7480, s\u00e4ilitab see siiski 4:3 kuvasuhte, kuna PAR on 10:11 (704\u00d710 \/ 480\u00d711).<\/p><\/blockquote>\n<p>\nJa l\u00f5puks saame m\u00e4\u00e4ratleda <b>video<\/b> ka kui j\u00e4rjestikuste <b>n<\/b> kaadrite seeriat aja\u00fcles <b>m\u00f5\u00f5tmiseks<\/b>, mida v\u00f5ib pidada t\u00e4iendavaks m\u00f5\u00f5tmiseks. Ning <b>n<\/b> see on ka kaadrisagedus ehk kaadrite arv sekundis (<b>FPS<\/b> \u2014 l\u00fchend <i>Frames per Second<\/i>).<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hit\u00f5ed\" src=\"\/wp-content\/uploads\/2019\/12\/f940932bbd66aa361c7966f8b44ed431.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nBitim\u00e4\u00e4r, mis on vajalik video esitamiseks, on selle <b>\u00fclekandekiirus<\/b> \u2014 <b>bitrate<\/b>.<\/p>\n<blockquote><p>bitrate = laius * k\u00f5rgus * bit s\u00fcgavus * kaadreid sekundis<\/p><\/blockquote>\n<p>\nN\u00e4iteks, 30 kaadrit sekundis, 24 bitti pikseli kohta ja eraldusv\u00f5imega 480\u00d7240 on vajalik 82,944,000 bitti sekundis v\u00f5i 82,944 Mbit\/s (30x480x240x24) \u2014 aga seejuures ei kasutada mitte \u00fchtegi tihendamismeetodit.<\/p>\n<p>Kui \u00fclekandekiirus <i>on peaaegu konstantne<\/i>, siis nimetatakse seda <b>konstantseks \u00fclekandekiirus<\/b> (<b>CBR<\/b> \u2014 l\u00fchend <i>constant bit rate<\/i>). Kuid see v\u00f5ib ka varieeruda, sel juhul nimetatakse seda <b>muutuvaks andmeedastuskiirus<\/b> (<b>VBR<\/b> \u2014 l\u00fchend <i>variable bit rate<\/i>).<\/p>\n<p>See graafik n\u00e4itab piiratud VBR-i, kui t\u00e4ielikult tumeda kaadri puhul ei kulutata liiga palju bitte.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hit\u00f5ed\" 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, mis kahekordistab tajutavat videodisplei kaadrisagedust ilma t\u00e4iendava ribalaiuse kasutamiseta. See meetod on tuntud kui <b>v\u00e4ljakudekad video<\/b>; p\u00f5him\u00f5tteliselt saadab see poole ekraanist esimeses \"kaadris\" ja teise poole j\u00e4rgmisel \"kaadris.\"<\/p>\n<p>Praegu toimub stseenide visualiseerimine peamiselt <b>progressiivse skaneerimise tehnoloogia<\/b>. See on meetod liikuvate piltide kuvamiseks, s\u00e4ilitamiseks v\u00f5i edastamiseks, kus iga kaadri k\u00f5ik read joonistatakse j\u00e4rjestikuseid.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hit\u00f5ed\" src=\"\/wp-content\/uploads\/2019\/12\/434afd828d803ec1e4c87a3827c07dde.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u00fc\u00fcd oleme kursis, kuidas pilt digitaalsetes vormides esitatakse, kuidas on korraldatud selle v\u00e4rvid ja kui palju bitti sekundis kulutame video n\u00e4itamiseks, olgu see siis pidev (CBR) v\u00f5i muutuv (VBR) edastuskiirus. Teame m\u00e4\u00e4ratud eraldusv\u00f5imet koos m\u00e4\u00e4ratud kaadrisagedusega ning oleme tutvunud paljude teiste m\u00f5istetega, nagu vahelduvv\u00e4line video, PAR ja paljude teistega.<\/p>\n<h2>\u00dclem\u00e4\u00e4rasuse eemaldamine<\/h2>\n<p>\nOn teada, et kompressimata videot ei saa normaalselt kasutada. Tund aega 720p resolutsiooniga videot 30 kaadrit sekundis v\u00f5taks 278 GB. Sellisele v\u00e4\u00e4rtusele j\u00f5uame, korrutades 1280 x 720 x 24 x 30 x 3600 (laius, k\u00f5rgus, bitid pikseli kohta, FPS ja aeg sekundites).<\/p>\n<p>Kasutamine <b>kaotusteta kompressioonialgoritmid<\/b>, nagu DEFLATE (kasutatakse PKZIP-is, Gzip-is ja PNG-s), ei anna piisavat v\u00e4hendamist vajaliku ribalaiuse osas. Peame otsima teisi video kokkusurumise viise.<\/p>\n<p>Selleks saab kasutada meie n\u00e4gemise omadusi. Meie silmad tajuvad paremini heledust kui v\u00e4rve. Video on j\u00e4rjestatud piltide kogum, mis kordub aja jooksul. \u00dche stseeni k\u00f5rval asuvate kaadrite vahel on v\u00e4iksed erinevused. Lisaks sisaldab iga kaader palju piirkondi, mis kasutavad \u00fchte ja sama (v\u00f5i sarnast) v\u00e4rvi.<\/p>\n<h2>V\u00e4rv, heledus ja meie silmad<\/h2>\n<p>\nMeie silmad on heledusele tundlikumad kui v\u00e4rvile. Veenduge ise, vaadates seda kujutist.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hit\u00f5ed\" src=\"\/wp-content\/uploads\/2019\/12\/bf50b7dfd54ebbdb66556bbf5e304090.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Kui te ei n\u00e4e, et vasakus pooles pildi ruutude v\u00e4rvid <b>A<\/b> ja <b>B<\/b> on tegelikult samad, siis see on normaalne. Meie aju paneb meid rohkem t\u00e4helepanu p\u00f6\u00f6rama heledusele kui v\u00e4rvile. Paremal pool on t\u00e4histatud ruutude vahel sama v\u00e4rvi \u00fchendus \u2014 seega suudame (ehk siis meie aju) kergesti kindlaks teha, et seal on tegelikult sama v\u00e4rv.<\/p>\n<blockquote><p>Vaatame (lihtsustatult) l\u00e4hemalt, kuidas meie silmad t\u00f6\u00f6tavad. Silm on keeruline organ, mis koosneb paljusid osadest. Kuid meid huvitavad eelk\u00f5ige koonus- ja varsarakud. Silmas on umbes 120 miljonit varsarakku ja 6 miljonit koonusrakku.<\/p>\n<p>Vaatleme v\u00e4rvi ja heleduse tajumist kui eraldi funktsioone silma teatud osades (tegelikult on asi keerulisem, kuid lihtsustame). Keerukad rakud vastutavad enamasti heleduse eest, samas kui koonusrakud vastutavad v\u00e4rvi eest. Koonusrakud jaotatakse kolme t\u00fc\u00fcpi s\u00f5ltuvalt sisaldatavast pigmendist: S-koonused (sinine), M-koonused (roheline) ja L-koonused (punane).<\/p>\n<p>Kuna meil on palju rohkem keppe (heleduse jaoks) kui koonusrakke (v\u00e4rvi jaoks), v\u00f5ib j\u00e4reldada, et me oleme paremini v\u00f5imelised eristama tumeduse ja valguse \u00fcleminekuid kui v\u00e4rve.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hit\u00f5ed\" src=\"\/wp-content\/uploads\/2019\/12\/d344365d45e43b36635ce29baa1132b4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Kontrastitundlikkuse funktsioonid<\/h2>\n<p>\nEksperimentaalps\u00fchholoogia ja paljude teiste valdkondade teadlased on v\u00e4lja t\u00f6\u00f6tanud arvukalt teooriaid inimn\u00e4gemise kohta. \u00dcks neist nimetatakse <b>kontrastitundlikkuse funktsioonideks<\/b>. Need on seotud ruumilise ja ajaga valgustusega. L\u00fchidalt \u00f6eldes, r\u00e4\u00e4gime sellest, kui palju muutusi on vajalik, enne kui vaatleja neid m\u00e4rkab. Pange t\u00e4hele s\u00f5na \u201efunktsioon\u201d mitmuses. See on seotud sellega, et saame m\u00f5\u00f5ta kontrasti tundlikkuse funktsioone mitte ainult mustvalges, vaid ka v\u00e4rvilistes piltides. Need eksperimendi tulemused n\u00e4itavad, et enamikul juhtudel on meie silmad valgustusele tundlikumad kui v\u00e4rvile.<\/p><\/blockquote>\n<p>Kuna on teada, et oleme valgustuse suhtes tundlikumad, v\u00f5iksime proovida seda fakti \u00e4ra kasutada.<\/p>\n<h2>V\u00e4rvimudel<\/h2>\n<p>\nOleme natuke aru saanud, kuidas t\u00f6\u00f6tada v\u00e4rviliste piltidega, kasutades RGB-skeemi. On ka teisi mudeleid. On mudel, mis eraldab heleduse v\u00e4rvustest ja seda tuntakse kui <b>YCbCr<\/b>. Muide, on ka teisi mudeleid, mis teevad sarnase jaotuse, kuid k\u00e4sitleme ainult seda.<\/p>\n<p>Selles v\u00e4rvimudelis <b>Y<\/b> \u2014 esindab heledust, samas kasutatakse kaht v\u00e4rvikanalit: <b>Cb<\/b> (k\u00fclluslik sinine) ja <b>Cr<\/b> (k\u00fcllane punane). YCbCr v\u00f5ib olla saadud RGB-st, samuti on v\u00f5imalik ka tagurpidi muundamine. Kasutades seda mudelit, saame luua t\u00e4isv\u00e4rvilisi pilte, nagu allpool n\u00e4htav:<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hit\u00f5ed\" src=\"\/wp-content\/uploads\/2019\/12\/e7458471caf7ef071bb0362e96b44f11.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>YCbCr ja RGB vaheline muundamine<\/h2>\n<p>\nKeegi v\u00f5ib v\u00e4ita: kuidas on v\u00f5imalik saada k\u00f5iki v\u00e4rve, kui roheline ei ole kasutusel?<\/p>\n<p>Sellele k\u00fcsimusele vastamiseks muundame RGB YCbCr-iks. Kasutame standardis kehtestatud koefitsiente <b>BT.601<\/b>, mille soovitab <b>ITU-R<\/b>. See organisatsioon m\u00e4\u00e4ratleb digitaalsete video standardid. N\u00e4iteks: mis on 4K? Millised peaksid olema kaadrisagedus, eraldusv\u00f5ime, v\u00e4rvimudel?<\/p>\n<p>Esiteks arvutame heledust. Kasutame ITU soovitatud konstandeid 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 eraldame 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 muundada ja isegi saada rohelise YCbCr abil:<\/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>Tavaliselt kasutavad ekraanid (monitorid, telerid, ekraanid jne) ainult RGB mudelit. Kuid seda mudelit saab organiseerida erinevalt:<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hit\u00f5ed\" src=\"\/wp-content\/uploads\/2019\/12\/8736e59d3a7606494fe6a7718d5b4aa2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>V\u00e4rvi alampurskamine<\/h2>\n<p>\nPilt, mis on esitatud heleduse ja v\u00e4rvuse kombinatsioonina, v\u00f5imaldab meil kasutada inimeste n\u00e4gemise s\u00fcsteemi suuremat tundlikkust heledusele kui v\u00e4rvusele, kui me valikuliselt teabe eemaldame. V\u00e4rvialane alal\u00e4bilaskmine on piltide kodeerimise meetod, mis kasutab v\u00e4rvuse jaoks madalamat eraldusv\u00f5imet kui heleduse jaoks.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hit\u00f5ed\" src=\"\/wp-content\/uploads\/2019\/12\/11b5b602ab1374896df296f787932ace.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Kui palju on lubatud v\u00e4rvuse eraldusv\u00f5imet v\u00e4hendada?! Tundub, et juba on olemas m\u00f5ned skeemid, mis kirjeldavad, kuidas t\u00f6\u00f6tleda eraldusv\u00f5imet ja sulandada (L\u00f5ppv\u00e4rv = Y + Cb + Cr).<\/p>\n<p>Need skeemid on tuntud kui <b>alal\u00e4bilaskmise s\u00fcsteemid<\/b> ja need v\u00e4ljendatakse 3:1 suhetes \u2014 <b>a<\/b>:<b>x<\/b>:<b>y<\/b>, mis m\u00e4\u00e4rab heledus- ja v\u00e4rvuseidendi signaalide proovide arvu.<\/p>\n<p><b>a<\/b> \u2014 standardne horisontaalne valimine (tavaliselt 4)<br \/>\n<b>x<\/b> \u2014 v\u00e4rvuse proovide arv esimese pikslirea kohta (horisontaalne eraldusv\u00f5ime seoses <b>a<\/b>)<br \/>\n<b>y<\/b> \u2014 v\u00e4rvuse proovide muutuste arv esimese ja teise pikslirea vahel.<\/p>\n<blockquote><p>Erandiks on <b>4<\/b>:<b>1<\/b>:<b>0<\/b>, mis tagab \u00fche v\u00e4rvuse proovi iga 4x4 heleduslahtri kohta.<\/p><\/blockquote>\n<p>Kaasaegsetes koodekites kasutatavad \u00fcldskeemid:<\/p>\n<ul>\n<li><b>4<\/b>:<b>4<\/b>:<b>4<\/b> (ilma alamdiskreetimiseta)<\/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 sulandamise n\u00e4ide<\/h3>\n<p>\nSiin on YCbCr 4:2:0 abil \u00fchitatud pildi fragment. Pange t\u00e4hele, et meil kulub ainult 12 bitti pikslile.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hit\u00f5ed\" src=\"\/wp-content\/uploads\/2019\/12\/67e288b0a46fca88452addaef736f4cd.png\" style=\"display:block;margin: 0 auto;\" \/><\/p><\/blockquote>\n<p>Nii n\u00e4eb v\u00e4lja sama pilt, kodeeritud peamiste v\u00e4rvisubdiskreetimise t\u00fc\u00fcpide j\u00e4rgi. \u00dclemine rida on l\u00f5plik YCbCr, alumine rida n\u00e4itab v\u00e4rvivoldingu eraldusv\u00f5imet. T\u00f5eliselt head tulemused, arvestades v\u00e4hese kvaliteedikao.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hit\u00f5ed\" src=\"\/wp-content\/uploads\/2019\/12\/fb54b6fcdbbb63cb19d19b89df9f6d85.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKas m\u00e4letate, et loendasime 278 GB kettaruumi tunni pikkuse 720p ja 30 kaadrit sekundis video faili talletamiseks? Kui kasutame YCbCr 4:2:0, siis kahaneb see suurus poole v\u00f5rra \u2014 139 GB. Seni on see siiski kaugel vastuv\u00f5etavast tulemusest.<\/p>\n<p>Saate ise YCbCr-i histogrammi luua FFmpeg abil. Sellel pildil domineerib sinine punase \u00fcle, mis on histogrammil h\u00e4sti n\u00e4ha.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hit\u00f5ed\" src=\"\/wp-content\/uploads\/2019\/12\/6e74cb646cabc77079aea7eaee846fd1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<blockquote>\n<h4>V\u00e4rvivolding, heledus, v\u00e4rvigamma \u2014 video\u00fclevaade<\/h4>\n<p>\nSoovitatav on vaadata seda h\u00e4mmastavat videot. Siin selgitatakse, mis on heledus, ja \u00fcldiselt on k\u00f5ik punktid h\u00e4sti 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=\"Vaata 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 v\u00e4hendada ajakulu. Kuid esmalt m\u00e4\u00e4ratlegime m\u00f5ned p\u00f5hiterminoloogiad. Oletame, et meil on film, kus on 30 kaadrit sekundis, ja siin on selle esimesed 4 kaadrit:<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hit\u00f5ed\" 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\u00f5hit\u00f5ed\" 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\u00f5hit\u00f5ed\" 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\u00f5hit\u00f5ed\" src=\"\/wp-content\/uploads\/2019\/12\/c65ee526ec4539996f6bb94463d0cf2d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u00e4eme kaadrites palju kordusi: n\u00e4iteks sinine taust, mis ei muutu kaadrist kaadrisse. Selle probleemi lahendamiseks saame neid abstraktselt klassifitseerida kolme t\u00fc\u00fcpi kaadriks.<\/p>\n<h3>I-kaar (<b>I<\/b>Intro Frame)<\/h3>\n<p>\nI-kaar (link-kaader, v\u00f5tme-kaader, sise-kaader) on iseseisev. S\u00f5ltumata sellest, mida tuleb visualiseerida, on I-kaar sisuliselt staatiline foto. Esimene kaader on tavaliselt I-kaar, kuid j\u00e4lgime I-kaare ka kaugelt mitte esimestes kaadris.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hit\u00f5ed\" src=\"\/wp-content\/uploads\/2019\/12\/44f2a7d6154f1a40fdb1174a443a9c3f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>P-kaar (<b>P<\/b>Predicted Frame)<\/h3>\n<p>\nP-kerge (ennustatav kerge) kasutab \u00e4ra, et peaaegu alati saab praegust pilti esitada kasutades eelmist kerget. N\u00e4iteks teises kerges on ainus muutus edasiviiv pall. Saame kerge 2 lihtsalt veidi muutes kergest 1, kasutades ainult nende kergete vahe. Kerge 2 ehitamiseks viitame eelnevale kergemale 1.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hit\u00f5ed\" 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\u00f5hit\u00f5ed\" src=\"\/wp-content\/uploads\/2019\/12\/ab8e8f6020825830c4d03004528af1a4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>B-kerge (<b>B<\/b>i-predictive Frame)<\/h3>\n<p>\nA kuidas oleks viidete asemel mitte ainult minevikus, vaid ka tulevikus kergetele, et tagada veelgi parem kokkusurumine?! See on peamiselt B-kerge (kahepoolsed kerged).<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hit\u00f5ed\" 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\u00f5hit\u00f5ed\" 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\u00f5hit\u00f5ed\" 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 t\u00fc\u00fcbid kergetest tagavad parima kokkusurumise. Uurime, kuidas see toimub j\u00e4rgmises jaotises. Seni tasub m\u00e4rkida, et k\u00f5ige \"kallim\" m\u00e4lu kasutamine on I-kerge, P-kerge on m\u00e4rgatavalt odavam, samas kui k\u00f5ige kasulikum variant video jaoks on B-kerge.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hit\u00f5ed\" src=\"\/wp-content\/uploads\/2019\/12\/97b9177ffff302881deb1c86ce416166.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Ajaliseks liigseks (vahekergete ennustamine)<\/h2>\n<p>\nVaatame, millised on meie v\u00f5imalused korduvate ajakulu v\u00e4hendamiseks. Seda t\u00fc\u00fcpi liigset andmemahutatust saame lahendada vastastikuste prognoosimisv\u00f5tete abil.<\/p>\n<p>P\u00fc\u00fcdke kodeerimise j\u00e4rjestuses 0 ja 1 kulutada v\u00f5imalikult v\u00e4he bitte.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hit\u00f5ed\" src=\"\/wp-content\/uploads\/2019\/12\/f0dc2df33a5297622a77a4ca09b19af8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSaame teha <b>lahutamise<\/b>, lihtsalt lahutame kaadri 1 kaadrist 0. Saame kaadri 1, kasutades ainult erinevust selle ja eelneva kaadri vahel, tegelikult kodeerime vaid saadud j\u00e4\u00e4ki.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hit\u00f5ed\" src=\"\/wp-content\/uploads\/2019\/12\/c14981c3a3a0459a02620805c4a0f2db.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAga mis siis, kui ma \u00fctlen teile, et on veel parem meetod, mis kasutab veel v\u00e4hem bitte?! Alustame selge ruudustiku loomisega kaadrist 0, mis koosneb plokkidest. Seej\u00e4rel proovime v\u00f5rrelda plokke kaadrist 0 kaadriga 1. Teisis\u00f5nu, hindame liikumist kaadrite vahel.<\/p>\n<blockquote><p> Wikipediast \u2014 <b>plokkide liikumise kompensatsioon<\/b><\/p>\n<p>Plokkide liikumise kompensatsioon jagab praeguse kaadri mittet\u00e4iendavateks plokkideks ja liikumise kompensatsiooni vektor n\u00e4itab plokkide p\u00e4ritolu (levinud valearusaam on, et <i>eelmine<\/i> kaader jaguneb eraldiseisvateks plokkideks ning liikumise kompensatsiooni vektorid n\u00e4itavad, kuhu need plokid liiguvad. Tegelikult on vastupidi \u2014 anal\u00fc\u00fcsitakse mitte eelmist kadreid, vaid j\u00e4rgmist, selgub mitte see, kuhu plokid liiguvad, vaid kust nad on tulnud. T\u00fc\u00fcpiliselt kattuvad algsed plokid algses kaadris. M\u00f5ned videokompressiooni algoritmid koguvad praeguse kaadri osad isegi mitte \u00fchest, vaid mitmest eelnevalt edastatud kaadrist.<\/p><\/blockquote>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hit\u00f5ed\" src=\"\/wp-content\/uploads\/2019\/12\/0c34e84b318be2d250bade240fad80ed.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nProtsessi k\u00e4igus n\u00e4eme, et pall on liikunud (<b>x<\/b>=0, <b>y<\/b>=25) koha pealt (<b>x<\/b>=6, <b>y<\/b>=26), v\u00e4\u00e4rtused <b>x<\/b> ja <b>y<\/b> moodustavad liikumise vektori. Veel \u00fcks samm, mida saame teha, et andmeid s\u00e4\u00e4sta, on kodeerida ainult liikumise vektorite erinevus viimase ploki asukoha ja prognoositud vahel, seega l\u00f5plik liikumise vektor on (x=6-0=6, y=26-25=1).<\/p>\n<p>Reaalses situatsioonis oleks see pall jagatud <b>n<\/b> plokkideks, kuid see ei muuda asja olemust.<\/p>\n<p>Kadris olevad objektid liiguvad kolmes m\u00f5\u00f5tmes, seega kui pall liigub, v\u00f5ib see visuaalselt muutuda v\u00e4iksemaks (v\u00f5i suuremaks, kui see liigub vaatleja suunas). On normaalne, et plokkide vahel ei pruugi olla ideaalset vastavust. Siin on \u00fchendatud vaade meie hindamisest ja reaalsest pildist.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hit\u00f5ed\" 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 kodeerimiseks vajalikud andmed oluliselt v\u00e4hem, kui kasutades lihtsamat meetodit raamide vahelise delta arvutamiseks.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hit\u00f5ed\" src=\"\/wp-content\/uploads\/2019\/12\/319507ad7197b7693efff11dcd7e4df4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Kuidas t\u00f5eline liikumise kompensatsioon v\u00e4lja n\u00e4eb<\/h2>\n<p>\nSeda meetodit rakendatakse kohe k\u00f5ikidele plokkidele. Sageli jaguneb meie nii-\u00f6elda liikuv pall kohe mitmeks plokiks.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hit\u00f5ed\" src=\"\/wp-content\/uploads\/2019\/12\/978b5612dbd164d2865ccdec4474fdb4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSa saad neid kontseptsioone ise katsuda, kasutades <noindex><a rel=\"nofollow\" href=\"https:\/\/jupyter.org\/\">Jupyter<\/a><\/noindex>.<\/p>\n<p>Liikumise vektorite n\u00e4gemiseks saab luua video v\u00e4list ennustust 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\u00f5hit\u00f5ed\" src=\"\/wp-content\/uploads\/2019\/12\/056d6dfd2c18baaabc70655edfe3d609.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSamuti saad 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 esimestel k\u00fcmnel kaadril).<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hit\u00f5ed\" 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 alasid.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hit\u00f5ed\" src=\"\/wp-content\/uploads\/2019\/12\/24bff6d64704cf0c8e1010832ea8f6ea.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVaadakem sellele n\u00e4itele l\u00e4hemalt. See stseen koosneb peamiselt sinistest ja valgetest v\u00e4rvide toonidest.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hit\u00f5ed\" src=\"\/wp-content\/uploads\/2019\/12\/12edf221c61e064674ad363db9f3342c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSee on I-raam. Eelmisi raame prognoosimiseks kasutada ei saa, kuid saame selle kokku suruda. Kodeerime punase ploki eristamise. Kui vaatame selle naabreid, siis m\u00e4rkame, et \u00fcmberringi on teatud v\u00e4rvilised trendid.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hit\u00f5ed\" src=\"\/wp-content\/uploads\/2019\/12\/b67b3fba3d1792db81d0f1cb52c7c29b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOletame, et kaadris levivad v\u00e4rvid vertikaalselt. See t\u00e4hendab, et tundmatute pikslite v\u00e4rvide v\u00e4\u00e4rtused sisaldavad naabrite v\u00e4\u00e4rtusi.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hit\u00f5ed\" 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), seej\u00e4rel lahutada reaalsed v\u00e4\u00e4rtused. See annab meile j\u00e4\u00e4kploki, mis viib palju tihedama matriitsini v\u00f5rreldes originaaliga.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hit\u00f5ed\" src=\"\/wp-content\/uploads\/2019\/12\/52fd77c96aa8445af12fca468c72c844.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKui soovite sisemiste prognoosidega harjutada, saate luua video makrobokidest ja nende prognoosidest, kasutades ffmpeg'i. Iga ploki v\u00e4rvi t\u00e4henduse m\u00f5istmiseks peate tutvuma ffmpeg'i dokumentatsiooniga.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hit\u00f5ed\" 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 Analyzer'it (nagu eelnevalt mainisin, on prooviversioonis piirang esimestele 10 kaadrile, kuid seda piisab alguses).<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas videokooder t\u00f6\u00f6tab. Osa 1. P\u00f5hit\u00f5ed\" 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\/\"> Videokodeki 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-novosti-interneta"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.0.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\/novosti-interneta\/kak-rabotaet-videokodek-chast-1-osnovy\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.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\/novosti-interneta\/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 video kodeerimine t\u00f6\u00f6tab. Osa 1. Alused | ProHoster","description":"Teine osa: Videokodeki t\u00f6\u00f6p\u00f5him\u00f5tted Iga rasterpilt on v\u00f5imalik esitada kui.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/novosti-interneta\/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\/novosti-interneta\/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}]}}