{"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\/pl\/blog\/news\/kak-rabotaet-videokodek-chast-1-osnovy","title":{"rendered":"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h3>Cz\u0119\u015b\u0107 druga:<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/480430\/\"> Zasady dzia\u0142ania kodeka wideo<\/a><\/noindex><\/h3>\n<p>Ka\u017cdy obraz rastrowy <b>mo\u017cna przedstawi\u0107 w postaci<\/b> dwuwymiarowej macierzy <b>. Kiedy m\u00f3wimy o kolorach, mo\u017cna rozwin\u0105\u0107 t\u0119 ide\u0119, traktuj\u0105c obraz jako<\/b>tr\u00f3jwymiarow\u0105 macierz <b>, w kt\u00f3rej dodatkowe wymiary s\u0142u\u017c\u0105 do przechowywania danych dla ka\u017cdego z kolor\u00f3w.<\/b>Je\u015bli rozwa\u017cymy ostateczny kolor jako kombinacj\u0119 tzw. kolor\u00f3w podstawowych (czerwonego, zielonego i niebieskiego), w naszej tr\u00f3jwymiarowej macierzy definiujemy trzy p\u0142aszczyzny: pierwsza dla koloru czerwonego, druga dla zielonego, a ostatnia dla niebieskiego.<\/p>\n<p>Nazwijmy ka\u017cdy punkt w tej macierzy pikselem (elementem obrazu). Ka\u017cdy piksel zawiera informacje o intensywno\u015bci (zwykle w postaci warto\u015bci numerycznej) ka\u017cdego koloru. Na przyk\u0142ad,<br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/481418\/\"><img decoding=\"async\" alt=\"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy\" src=\"\/wp-content\/uploads\/2019\/12\/ce37dd683a4c3ed434dae1d488646716.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\nczerwony piksel <b>oznacza, \u017ce zawiera 0 zielonego, 0 niebieskiego i maksymaln\u0105 ilo\u015b\u0107 czerwonego.<\/b> Piksel r\u00f3\u017cowego koloru <b>mo\u017ce by\u0107 stworzony za pomoc\u0105 kombinacji trzech kolor\u00f3w. U\u017cywaj\u0105c zakresu numerycznego od 0 do 255, r\u00f3\u017cowy piksel definiuje si\u0119 jako<\/b> Czerwony = 255 <b>Zielony = 192<\/b>, <b>Niebieski = 203<\/b> i <b>Artyku\u0142 opublikowano dzi\u0119ki wsparciu firmy EDISON.<\/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 - rozw\u00f3j stron internetowych\"><img decoding=\"async\" alt=\"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy\" src=\"\/wp-content\/uploads\/2019\/12\/e5063b9a32248767cb0702e7aa2e7f9e.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br clear=\"right\"><br \/>\nTworzymy<\/p>\n<p>aplikacje do monitoringu wideo, strumieniowania wideo <noindex><a rel=\"nofollow\" href=\"https:\/\/www.edsd.ru\/ru\/portfolio\/tehnologiya\/video\">, a tak\u017ce zajmujemy si\u0119<\/a><\/noindex>nagrywaniem wideo w sali operacyjnej <noindex><a rel=\"nofollow\" href=\"https:\/\/www.edsd.ru\/videozapis-v-bolnichnoj-operacionnoj-s-vozmozhnostyu-obsuzhdeniya-na-forume\">Alternatywne metody kodowania kolorowego obrazu<\/a><\/noindex>.<\/p><\/blockquote>\n<h3>Aby przedstawi\u0107 kolory sk\u0142adaj\u0105ce si\u0119 na obraz, istnieje wiele innych modeli. Na przyk\u0142ad, mo\u017cna u\u017cy\u0107 palety indeksowanej, w kt\u00f3rej potrzebny jest tylko jeden bajt do reprezentacji ka\u017cdego piksela, zamiast trzech, wymaganych przy u\u017cywaniu modelu RGB. W takim modelu mo\u017cna zastosowa\u0107 macierz 2D zamiast 3D do przedstawienia ka\u017cdego koloru. Oszcz\u0119dza to pami\u0119\u0107, ale daje mniejsz\u0105 gam\u0119 kolor\u00f3w.<\/h3>\n<p>\nRGB<\/p>\n<p><img decoding=\"async\" alt=\"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy\" src=\"\/wp-content\/uploads\/2019\/12\/573a39c53527b4ec0403f019becf2d22.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Na przyk\u0142ad, sp\u00f3jrz na ten obrazek poni\u017cej. Pierwsza twarz jest ca\u0142kowicie pokryta. Pozosta\u0142e to p\u0142aszczyzny czerwone, zielone i niebieskie (intensywno\u015b\u0107 odpowiadaj\u0105cych kolor\u00f3w pokazana w odcieniach szaro\u015bci).<\/h2>\n<p>Na przyk\u0142ad, sp\u00f3jrz na ten obrazek poni\u017cej. Pierwsza twarz jest ca\u0142kowicie pokolorowana. Pozosta\u0142e to czerwone, zielone i niebieskie p\u0142aszczyzny (intensywno\u015b\u0107 odpowiednich kolor\u00f3w przedstawiona w odcieniach szaro\u015bci).<\/p>\n<p><img decoding=\"async\" alt=\"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy\" src=\"\/wp-content\/uploads\/2019\/12\/cf1f802d4381e062005490f5f9f26911.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWidzimy, \u017ce odcienie czerwieni w oryginale b\u0119d\u0105 w tych samych miejscach, w kt\u00f3rych obserwuje si\u0119 najja\u015bniejsze cz\u0119\u015bci drugiej osoby. Z kolei wk\u0142ad niebieskiego koloru mo\u017cna dostrzec g\u0142\u00f3wnie tylko w oczach Mario (ostatnie twarz) oraz elementach jego odzie\u017cy. Zwr\u00f3\u0107 uwag\u0119, gdzie wszystkie trzy p\u0142aszczyzny kolor\u00f3w maj\u0105 najmniejszy wk\u0142ad (najciemniejsze cz\u0119\u015bci obraz\u00f3w) \u2014 jest to w w\u0105sach Mario.<\/p>\n<p>Do przechowywania intensywno\u015bci ka\u017cdego koloru potrzebna jest okre\u015blona liczba bit\u00f3w \u2014 ta warto\u015b\u0107 nazywana jest <b>g\u0142\u0119bi\u0105 bitow\u0105.<\/b>Przyjmijmy, \u017ce na jedn\u0105 p\u0142aszczyzn\u0119 kolor\u00f3w wydawane s\u0105 8 bity (w zakresie od 0 do 255). W\u00f3wczas mamy g\u0142\u0119bi\u0119 koloru wynosz\u0105c\u0105 24 bity (8 bit\u00f3w * 3 p\u0142aszczyzny R\/G\/B).<\/p>\n<p>Inn\u0105 cech\u0105 obrazu jest <b>rozdzielczo\u015b\u0107,<\/b>kt\u00f3ra okre\u015bla liczb\u0119 pikseli w jednym wymiarze. Cz\u0119sto oznaczana jako <b>szeroko\u015b\u0107 \u00d7 wysoko\u015b\u0107,<\/b>jak poni\u017cej na obrazku-przyk\u0142adzie 4 na 4.<br \/>\n<img decoding=\"async\" alt=\"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy\" src=\"\/wp-content\/uploads\/2019\/12\/51a4d948e6d44e4058e346fdbaf9d6c2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKolejn\u0105 cech\u0105, kt\u00f3r\u0105 mamy do czynienia przy pracy z obrazami\/wideo, jest <b>proporcja<\/b>, opisuj\u0105ca zwyk\u0142y proporcjonalny zwi\u0105zek mi\u0119dzy szeroko\u015bci\u0105 a wysoko\u015bci\u0105 obrazu lub piksela.<\/p>\n<p>Kiedy m\u00f3wi si\u0119, \u017ce jaki\u015b film lub obraz ma rozmiar 16 na 9, zazwyczaj ma si\u0119 na my\u015bli <b>proporcj\u0119 ekranu<\/b> (<b>DAR<\/b> \u2014 od <i>Wy\u015bwietlacz Proporcjonal Wska\u017anik,<\/i>). Jednak czasami mog\u0105 wyst\u0119powa\u0107 r\u00f3\u017cne formy poszczeg\u00f3lnych pikseli \u2014 w tym przypadku m\u00f3wimy o <b>proporcji pikseli,<\/b> (<b>PAR.<\/b> \u2014 od <i>Wska\u017anik Proporcjonal Piksela.<\/i>).<\/p>\n<p><img decoding=\"async\" alt=\"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy\" src=\"\/wp-content\/uploads\/2019\/12\/1158c6e98247a1a1084440969f9400c6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy\" src=\"\/wp-content\/uploads\/2019\/12\/a610f0f77bdb245c05799d3de4147302.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<blockquote><p>Gospodyni na uwadze: <b>DVD<\/b> -the node, and the other \u2014 <b>DAR 4 na 3.<\/b><\/p>\n<p>Chocia\u017c rzeczywista rozdzielczo\u015b\u0107 DVD wynosi 704\u00d7480, zachowuje proporcje 4:3, poniewa\u017c PAR ma warto\u015b\u0107 10:11 (704\u00d710 \/ 480\u00d711).<\/p><\/blockquote>\n<p>\nNo i na koniec, mo\u017cemy okre\u015bli\u0107 <b>wideo<\/b> jako sekwencj\u0119 <b>n<\/b> klatek w okresie, <b>czasu<\/b>, kt\u00f3re mo\u017cna uzna\u0107 za dodatkowy wymiar. A <b>n<\/b> wtedy \u2014 to liczba klatek na sekund\u0119 (<b>FPS,<\/b> \u2014 od <i>Klatek na sekund\u0119.<\/i>).<\/p>\n<p><img decoding=\"async\" alt=\"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy\" src=\"\/wp-content\/uploads\/2019\/12\/f940932bbd66aa361c7966f8b44ed431.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLiczba bit\u00f3w na sekund\u0119, potrzebna do wy\u015bwietlenia wideo, jest jego <b>przep\u0142ywowo\u015bci\u0105,<\/b> \u2014 <b>bitrate,<\/b>.<\/p>\n<blockquote><p>bitrate = szeroko\u015b\u0107 * wysoko\u015b\u0107 * g\u0142\u0119bia bitowa * klatki na sekund\u0119.<\/p><\/blockquote>\n<p>\nNa przyk\u0142ad, dla wideo z 30 klatkami na sekund\u0119, 24 bitami na piksel, rozdzielczo\u015b\u0107 480\u00d7240 wymaga 82,944,000 bit\u00f3w na sekund\u0119 lub 82,944 Mbit\/s (30x480x240x24) \u2014 ale to, je\u015bli nie stosuje si\u0119 \u017cadnych metod kompresji.<\/p>\n<p>Je\u015bli przep\u0142ywowo\u015b\u0107 <i>jest prawie sta\u0142a,<\/i>nazywana jest <b>sta\u0142\u0105 przep\u0142ywowo\u015bci\u0105,<\/b> (<b>CBR,<\/b> \u2014 od <i>sta\u0142ym wska\u017anikiem bitowym.<\/i>). Ale mo\u017ce te\u017c by\u0107 zmienna, w takim przypadku nazywa si\u0119 <b>zmienn\u0105 pr\u0119dko\u015b\u0107 transferu<\/b> (<b>VBR<\/b> \u2014 od <i>zmienna przep\u0142ywno\u015b\u0107<\/i>).<\/p>\n<p>Ten wykres przedstawia ograniczone VBR, kiedy nie wydaje si\u0119 zbyt wiele bit\u00f3w w przypadku ca\u0142kowicie ciemnej klatki.<\/p>\n<p><img decoding=\"async\" alt=\"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy\" src=\"\/wp-content\/uploads\/2019\/12\/f307dde8da9ef1e017646ebcad0c4062.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPocz\u0105tkowo in\u017cynierowie opracowali metod\u0119 podwajania postrzeganego wsp\u00f3\u0142czynnika od\u015bwie\u017cania wideo bez u\u017cycia dodatkowej przepustowo\u015bci. Metoda ta znana jest jako <b>wideo przeplotowe<\/b>; w zasadzie wysy\u0142a po\u0142ow\u0119 ekranu w pierwszej \u201eklatce\u201d, a drug\u0105 po\u0142ow\u0119 w nast\u0119pnej \u201eklatce\u201d.<\/p>\n<p>Obecnie wizualizacja scen odbywa si\u0119 g\u0142\u00f3wnie przy u\u017cyciu <b>technologii progresywnego skanowania<\/b>. To spos\u00f3b wy\u015bwietlania, przechowywania lub przesy\u0142ania ruchomych obraz\u00f3w, w kt\u00f3rym wszystkie linie ka\u017cdej klatki s\u0105 rysowane kolejno.<\/p>\n<p><img decoding=\"async\" alt=\"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy\" src=\"\/wp-content\/uploads\/2019\/12\/434afd828d803ec1e4c87a3827c07dde.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nC\u00f3\u017c! Teraz wiemy, jak obraz jest przedstawiany w formie cyfrowej, jak s\u0105 zbudowane jego kolory, ile bit\u00f3w na sekund\u0119 wydajemy na pokazanie wideo, je\u015bli pr\u0119dko\u015b\u0107 transferu jest sta\u0142a (CBR) lub zmienna (VBR). Znamy podane rozdzielczo\u015bci przy u\u017cyciu zadanej cz\u0119stotliwo\u015bci klatek, zapoznali\u015bmy si\u0119 z wieloma innymi terminami, takimi jak wideo przeplotowe, PAR i innymi.<\/p>\n<h2>Usuwanie nadmiarowo\u015bci<\/h2>\n<p>\nWiadomo, \u017ce wideo bez kompresji jest niewykonalne w normalnym u\u017cytku. Godzinne wideo w rozdzielczo\u015bci 720p i cz\u0119stotliwo\u015bci 30 klatek na sekund\u0119 zajmowa\u0142oby 278 GB. Do tego wyniku dochodzimy, mno\u017c\u0105c 1280 x 720 x 24 x 30 x 3600 (szeroko\u015b\u0107, wysoko\u015b\u0107, bity na piksel, FPS i czas w sekundach).<\/p>\n<p>U\u017cycie <b>algorytmy kompresji bezstratnej<\/b>, takie jak DEFLATE (u\u017cywane w PKZIP, Gzip i PNG), nie zapewni wystarczaj\u0105cego zmniejszenia wymaganej przepustowo\u015bci. Musimy poszuka\u0107 innych metod kompresji wideo.<\/p>\n<p>Mo\u017cna to osi\u0105gn\u0105\u0107, korzystaj\u0105c z cech naszego wzroku. Lepiej rozr\u00f3\u017cniamy jasno\u015b\u0107 ni\u017c kolory. Wideo jest zestawem kolejnych obraz\u00f3w, powtarzaj\u0105cych si\u0119 w czasie. R\u00f3\u017cnice mi\u0119dzy s\u0105siaduj\u0105cymi klatkami tej samej sceny s\u0105 niewielkie. Ponadto ka\u017cda klatka zawiera wiele obszar\u00f3w u\u017cywaj\u0105cych tego samego (lub podobnego) koloru.<\/p>\n<h2>Kolor, jasno\u015b\u0107 i nasze oczy<\/h2>\n<p>\nNasze oczy s\u0105 bardziej wra\u017cliwe na jasno\u015b\u0107 ni\u017c na kolor. Mo\u017cesz si\u0119 o tym przekona\u0107 samemu, patrz\u0105c na ten obrazek.<\/p>\n<p><img decoding=\"async\" alt=\"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy\" src=\"\/wp-content\/uploads\/2019\/12\/bf50b7dfd54ebbdb66556bbf5e304090.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Je\u015bli nie widzisz, co jest w lewej po\u0142owie obrazu, kolory kwadrat\u00f3w <b>A<\/b> i <b>B<\/b> w rzeczywisto\u015bci s\u0105 takie same, wi\u0119c to w porz\u0105dku. Nasz m\u00f3zg sprawia, \u017ce zwracamy wi\u0119ksz\u0105 uwag\u0119 na \u015bwiat\u0142ocie\u0144, a nie na kolor. Po prawej stronie mi\u0119dzy oznaczonymi kwadratami znajduje si\u0119 przerywana linia w tym samym kolorze \u2014 dlatego \u0142atwo okre\u015blamy (znaczy to nasz m\u00f3zg), \u017ce w rzeczywisto\u015bci tam jest ten sam kolor.<\/p>\n<blockquote><p>Przyjrzyjmy si\u0119 (w uproszczeniu), jak dzia\u0142aj\u0105 nasze oczy. Oko to skomplikowany organ sk\u0142adaj\u0105cy si\u0119 z wielu cz\u0119\u015bci. Jednak najbardziej interesuj\u0105 nas czopki i pr\u0119ciki. Oko zawiera oko\u0142o 120 milion\u00f3w pr\u0119cik\u00f3w i 6 milion\u00f3w czopk\u00f3w.<\/p>\n<p>Rozwa\u017cmy percepcj\u0119 koloru i jasno\u015bci jako oddzielne funkcje okre\u015blonych cz\u0119\u015bci oka (w rzeczywisto\u015bci jest to nieco bardziej skomplikowane, ale upro\u015bcimy). Kom\u00f3rki pr\u0119cikowe w wi\u0119kszo\u015bci odpowiadaj\u0105 za jasno\u015b\u0107, podczas gdy kom\u00f3rki czopek odpowiadaj\u0105 za kolor. Czopki dziel\u0105 si\u0119 na trzy typy, w zale\u017cno\u015bci od zawartego pigmentu: czopki S (niebieski), czopki M (zielony) i czopki L (czerwony).<\/p>\n<p>Poniewa\u017c mamy znacznie wi\u0119cej pr\u0119cik\u00f3w (jasno\u015b\u0107) ni\u017c czopk\u00f3w (kolor\u00f3w), mo\u017cna stwierdzi\u0107, \u017ce jeste\u015bmy bardziej zdolni do rozr\u00f3\u017cniania przej\u015b\u0107 mi\u0119dzy ciemno\u015bci\u0105 a \u015bwiat\u0142em ni\u017c kolorami.<\/p>\n<p><img decoding=\"async\" alt=\"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy\" src=\"\/wp-content\/uploads\/2019\/12\/d344365d45e43b36635ce29baa1132b4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Funkcje czu\u0142o\u015bci na kontrast<\/h2>\n<p>\nBadacze psychologii eksperymentalnej i wielu innych dziedzin opracowali wiele teorii ludzkiego wzroku. I jedna z nich nazywa si\u0119 <b>funkcje czu\u0142o\u015bci na kontrast<\/b>. S\u0105 one zwi\u0105zane z przestrzennym i czasowym o\u015bwietleniem. Kr\u00f3tko m\u00f3wi\u0105c, chodzi o to, ile zmian jest potrzebnych, zanim obserwator je zauwa\u017cy. Zauwa\u017cmy liczb\u0119 mnog\u0105 s\u0142owa \u201efunkcja\u201d. Jest to zwi\u0105zane z tym, \u017ce mo\u017cemy mierzy\u0107 funkcje czu\u0142o\u015bci na kontrast nie tylko dla obraz\u00f3w czarno-bia\u0142ych, ale i kolorowych. Wyniki tych eksperyment\u00f3w pokazuj\u0105, \u017ce w wi\u0119kszo\u015bci przypadk\u00f3w nasze oczy s\u0105 bardziej wra\u017cliwe na jasno\u015b\u0107 ni\u017c na kolor.<\/p><\/blockquote>\n<p>Poniewa\u017c wiadomo, \u017ce jeste\u015bmy bardziej wra\u017cliwi na jasno\u015b\u0107 obrazu, mo\u017cna spr\u00f3bowa\u0107 wykorzysta\u0107 ten fakt.<\/p>\n<h2>Model kolor\u00f3w<\/h2>\n<p>\nNieco zrozumieli\u015bmy, jak pracowa\u0107 z obrazami kolorowymi, u\u017cywaj\u0105c schematu RGB. Istniej\u0105 te\u017c inne modele. Jest model, kt\u00f3ry oddziela jasno\u015b\u0107 od kolorowo\u015bci i jest znany jako <b>YCbCr<\/b>. Zreszt\u0105, istniej\u0105 inne modele, kt\u00f3re robi\u0105 analogiczne rozdzielenie, ale om\u00f3wimy tylko ten.<\/p>\n<p>W tym modelu kolor\u00f3w <b>Y<\/b> \u2014 to reprezentacja jasno\u015bci, a tak\u017ce wykorzystywane s\u0105 dwa kana\u0142y kolor\u00f3w: <b>Cb<\/b> (nasycony niebieski) oraz <b>Cr<\/b> (nasycony czerwony). YCbCr mo\u017ce by\u0107 uzyskany z RGB, a tak\u017ce mo\u017cliwe jest odwrotne przekszta\u0142cenie. Korzystaj\u0105c z tego modelu, mo\u017cemy tworzy\u0107 obrazy w pe\u0142nym kolorze, jak wida\u0107 poni\u017cej:<\/p>\n<p><img decoding=\"async\" alt=\"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy\" src=\"\/wp-content\/uploads\/2019\/12\/e7458471caf7ef071bb0362e96b44f11.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Przekszta\u0142cenie mi\u0119dzy YCbCr a RGB<\/h2>\n<p>\nNiekt\u00f3rzy mog\u0105 zapyta\u0107: jak mo\u017cna uzyska\u0107 wszystkie kolory, je\u015bli nie u\u017cywa si\u0119 zielonego?<\/p>\n<p>Aby odpowiedzie\u0107 na to pytanie, przekszta\u0142camy RGB w YCbCr. Skorzystamy z wsp\u00f3\u0142czynnik\u00f3w przyj\u0119tych w standardzie <b>BT.601<\/b>, kt\u00f3ry zosta\u0142 zalecany przez jednostk\u0119 <b>ITU-R<\/b>. Ta jednostka okre\u015bla standardy wideo cyfrowego. Na przyk\u0142ad: czym jest 4K? Jakie powinny by\u0107 cz\u0119stotliwo\u015b\u0107 klatek, rozdzielczo\u015b\u0107, model kolor\u00f3w?<\/p>\n<p>Najpierw obliczymy jasno\u015b\u0107. Skorzystamy z sta\u0142ych zaproponowanych przez ITU i zast\u0105pimy warto\u015bci RGB.<\/p>\n<p><b>Y<\/b> = 0.299<b>R<\/b> + 0.587<b>G<\/b> + 0.114<b>B<\/b> <\/p>\n<p>Po uzyskaniu jasno\u015bci oddzielimy niebieski i czerwony kolor:<\/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>Mo\u017cemy r\u00f3wnie\u017c przekszta\u0142ci\u0107 z powrotem i nawet uzyska\u0107 zielony za pomoc\u0105 YCbCr:<\/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>Zazwyczaj wy\u015bwietlacze (monitory, telewizory, ekrany itp.) u\u017cywaj\u0105 tylko modelu RGB. Ale ten model mo\u017cna zorganizowa\u0107 na r\u00f3\u017cne sposoby:<\/p>\n<p><img decoding=\"async\" alt=\"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy\" src=\"\/wp-content\/uploads\/2019\/12\/8736e59d3a7606494fe6a7718d5b4aa2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Subskrypcja kolor\u00f3w<\/h2>\n<p>\nZ obrazem przedstawionym jako kombinacja jasno\u015bci i chrominancji, mo\u017cemy wykorzysta\u0107 wi\u0119ksz\u0105 wra\u017cliwo\u015b\u0107 ludzkiego wzroku na jasno\u015b\u0107 ni\u017c na chrominancj\u0119, je\u015bli b\u0119dziemy selektywnie usuwa\u0107 informacje. Subdyskrypcja kolor\u00f3w to metoda kodowania obraz\u00f3w, kt\u00f3ra wykorzystuje mniejsze rozdzielczenie dla chrominancji ni\u017c dla jasno\u015bci.<\/p>\n<p><img decoding=\"async\" alt=\"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy\" src=\"\/wp-content\/uploads\/2019\/12\/11b5b602ab1374896df296f787932ace.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Jak bardzo mo\u017cna zmniejszy\u0107 rozdzielczo\u015b\u0107 chrominancji?! Okazuje si\u0119, \u017ce istniej\u0105 ju\u017c pewne schematy, kt\u00f3re opisuj\u0105, jak przetwarza\u0107 rozdzielczo\u015b\u0107 i \u0142\u0105czenie (Kolor ko\u0144cowy = Y + Cb + Cr).<\/p>\n<p>Te schematy znane s\u0105 jako <b>systemy subdyskrypcji<\/b> i s\u0105 wyra\u017cane w postaci wsp\u00f3\u0142czynnika 3:1 \u2014 <b>a<\/b>:<b>x<\/b>:<b>y<\/b>, kt\u00f3ry okre\u015bla liczb\u0119 pr\u00f3bek sygna\u0142\u00f3w jasno\u015bci i chrominancji.<\/p>\n<p><b>a<\/b> \u2014 standardowa pr\u00f3ba pozioma (zwykle r\u00f3wna 4)<br \/>\n<b>x<\/b> \u2014 liczba pr\u00f3bek chrominancji w pierwszym wierszu pikseli (rozdzielczo\u015b\u0107 pozioma w stosunku do <b>a<\/b>)<br \/>\n<b>y<\/b> \u2014 liczba zmian pr\u00f3bek chrominancji mi\u0119dzy pierwszym a drugim wierszem pikseli.<\/p>\n<blockquote><p>Wyj\u0105tkiem jest <b>4<\/b>:<b>1<\/b>:<b>0<\/b>, zapewniaj\u0105cy jedn\u0105 pr\u00f3bk\u0119 chrominancji w ka\u017cdym bloku rozdzielczo\u015bci jasno\u015bci 4 na 4.<\/p><\/blockquote>\n<p>Og\u00f3lne schematy stosowane w nowoczesnych kodekach:<\/p>\n<ul>\n<li><b>4<\/b>:<b>4<\/b>:<b>4<\/b> (bez subpr\u00f3bkowania)<\/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 przyk\u0142ad \u0142\u0105czenia<\/h3>\n<p>\nOto po\u0142\u0105czony fragment obrazu przy u\u017cyciu YCbCr 4:2:0. Zauwa\u017c, \u017ce wydajemy tylko 12 bit\u00f3w na piksel.<\/p>\n<p><img decoding=\"async\" alt=\"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy\" src=\"\/wp-content\/uploads\/2019\/12\/67e288b0a46fca88452addaef736f4cd.png\" style=\"display:block;margin: 0 auto;\" \/><\/p><\/blockquote>\n<p>Tak wygl\u0105da to samo zdj\u0119cie zakodowane g\u0142\u00f3wnymi typami subpr\u00f3bkowania kolor\u00f3w. G\u00f3rny rz\u0105d to ko\u0144cowy YCbCr, dolny rz\u0105d pokazuje rozdzielczo\u015b\u0107 koloru. Ca\u0142kiem przyzwoite wyniki, bior\u0105c pod uwag\u0119 niewielkie straty jako\u015bci.<\/p>\n<p><img decoding=\"async\" alt=\"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy\" src=\"\/wp-content\/uploads\/2019\/12\/fb54b6fcdbbb63cb19d19b89df9f6d85.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPami\u0119tacie, \u017ce obliczyli\u015bmy 278 GB miejsca na dysku do przechowywania godzinnego pliku wideo o rozdzielczo\u015bci 720p i 30 klatkach na sekund\u0119? Przy u\u017cyciu YCbCr 4:2:0, ta wielko\u015b\u0107 zmniejszy si\u0119 o po\u0142ow\u0119 \u2014 139 GB. Jak na razie wci\u0105\u017c daleko do akceptowalnego wyniku.<\/p>\n<p>Mo\u017cesz samodzielnie uzyska\u0107 histogram YCbCr za pomoc\u0105 FFmpeg. Na tym obrazku niebieski dominuje nad czerwonym, co dobrze wida\u0107 na samym histogramie.<\/p>\n<p><img decoding=\"async\" alt=\"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy\" src=\"\/wp-content\/uploads\/2019\/12\/6e74cb646cabc77079aea7eaee846fd1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<blockquote>\n<h4>Kolorowo\u015b\u0107, jasno\u015b\u0107, gama kolor\u00f3w \u2014 przegl\u0105d wideo<\/h4>\n<p>\nZalecamy obejrzenie tego niesamowitego wideo. Wyja\u015bnia, czym jest jasno\u015b\u0107, a tak\u017ce wszystko wyja\u015bnia do ko\u0144ca. <i>o jasno\u015bci i kolorze.<\/i> Rodzaje klatek<\/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=\"Odtwarzaj wideo\" 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>Przechodzimy dalej. Spr\u00f3bujemy wyeliminowa\u0107 nadmiarowo\u015b\u0107 w czasie. Ale najpierw zdefiniujmy troch\u0119 podstawowej terminologii. Za\u0142\u00f3\u017cmy, \u017ce mamy film z 30 klatkami na sekund\u0119, oto jego pierwsze 4 klatki:<\/h2>\n<p>\nWidzimy wiele powt\u00f3rze\u0144 w klatkach: na przyk\u0142ad niebieskie t\u0142o, kt\u00f3re nie zmienia si\u0119 z klatki na klatk\u0119. Aby rozwi\u0105za\u0107 ten problem, mo\u017cemy abstrakcyjnie sklasyfikowa\u0107 je jako trzy typy klatek.<\/p>\n<p><img decoding=\"async\" alt=\"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy\" src=\"\/wp-content\/uploads\/2019\/12\/103dc714d756d014e1d2c1bfb33751b1.png\" style=\"display:block;margin: 0 auto;\" \/> <img decoding=\"async\" alt=\"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy\" src=\"\/wp-content\/uploads\/2019\/12\/fdd7d89b884b2f77fea7c386c0d29fef.png\" style=\"display:block;margin: 0 auto;\" \/> <img decoding=\"async\" alt=\"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy\" src=\"\/wp-content\/uploads\/2019\/12\/61746b829025d5abcb7db072a54400c0.png\" style=\"display:block;margin: 0 auto;\" \/> <img decoding=\"async\" alt=\"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy\" src=\"\/wp-content\/uploads\/2019\/12\/c65ee526ec4539996f6bb94463d0cf2d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nI-klatka (<\/p>\n<h3>ntro Frame)<b>I<\/b>I-klatka (klatka kluczowa, klatka referencyjna, klatka wewn\u0119trzna) jest autonomiczna. Niezale\u017cnie od tego, co trzeba wizualizowa\u0107, I-klatka jest w istocie statycznym zdj\u0119ciem. Pierwsza klatka jest zazwyczaj I-klatk\u0105, jednak regularnie b\u0119dziemy obserwowa\u0107 I-klatki r\u00f3wnie\u017c w\u015br\u00f3d tych, kt\u00f3re nie s\u0105 na pocz\u0105tku.<\/h3>\n<p>\nP-klatka (<\/p>\n<p><img decoding=\"async\" alt=\"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy\" src=\"\/wp-content\/uploads\/2019\/12\/44f2a7d6154f1a40fdb1174a443a9c3f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>redicted Frame)<b>P<\/b>P-klatka (klatka przewidywana) wykorzystuje przewag\u0119 tego, \u017ce prawie zawsze bie\u017c\u0105cy obraz mo\u017ce by\u0107 odtworzony za pomoc\u0105 poprzedniej klatki. Na przyk\u0142ad w drugiej klatce jedyn\u0105 zmian\u0105 jest poruszaj\u0105ca si\u0119 w prz\u00f3d pi\u0142ka. Mo\u017cemy uzyska\u0107 klatk\u0119 2, po prostu nieco zmieniaj\u0105c klatk\u0119 1, u\u017cywaj\u0105c tylko r\u00f3\u017cnicy mi\u0119dzy tymi klatkami. Aby zbudowa\u0107 klatk\u0119 2, odniesiemy si\u0119 do wcze\u015bniejszej klatki 1.<\/h3>\n<p>\n\u2190<\/p>\n<p><img decoding=\"async\" alt=\"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy\" src=\"\/wp-content\/uploads\/2019\/12\/1245857fd8406a24da02d0c71beb7b4d.png\" style=\"display:block;margin: 0 auto;\" \/> \u2190 <img decoding=\"async\" alt=\"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy\" src=\"\/wp-content\/uploads\/2019\/12\/ab8e8f6020825830c4d03004528af1a4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>B-klatka (<b>B<\/b>i-ramka przewidywana)<\/h3>\n<p>\nA co z linkami nie tylko do przesz\u0142ych, ale tak\u017ce do przysz\u0142ych klatek, aby zapewni\u0107 jeszcze lepsze kompresje?! To w du\u017cej mierze jest B-klatka (klatka dwukierunkowa).<\/p>\n<p><img decoding=\"async\" alt=\"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy\" src=\"\/wp-content\/uploads\/2019\/12\/f28d4e02836e9b37f0f21937dd1ba660.png\" style=\"display:block;margin: 0 auto;\" \/> \u2190 <img decoding=\"async\" alt=\"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy\" src=\"\/wp-content\/uploads\/2019\/12\/7a6b3a329db155c94a91f58a99874bb9.png\" style=\"display:block;margin: 0 auto;\" \/> \u2192 <img decoding=\"async\" alt=\"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy\" src=\"\/wp-content\/uploads\/2019\/12\/09df4bc5a35df89575c7b51349be4340.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Wyj\u015bcie po\u015brednie<\/h2>\n<p>\nTe typy klatek s\u0105 wykorzystywane do zapewnienia najlepszej kompresji. Om\u00f3wimy, jak to dzia\u0142a w nast\u0119pnej sekcji. Na razie zauwa\u017cmy, \u017ce najbardziej \u201ekosztown\u0105\u201d pod wzgl\u0119dem u\u017cytej pami\u0119ci jest I-klatka, P-klatka kosztuje znacznie mniej, a najbardziej op\u0142acalnym wyborem dla wideo jest B-klatka.<\/p>\n<p><img decoding=\"async\" alt=\"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy\" src=\"\/wp-content\/uploads\/2019\/12\/97b9177ffff302881deb1c86ce416166.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Nadmierno\u015b\u0107 czasowa (prognozowanie mi\u0119dzyklatkowe)<\/h2>\n<p>\nZobaczmy, jakie mamy mo\u017cliwo\u015bci minimalizacji powt\u00f3rze\u0144 w czasie. Ten typ nadmiarowo\u015bci rozwi\u0105\u017cemy za pomoc\u0105 metod wzajemnego prognozowania.<\/p>\n<p>Postaramy si\u0119 wyda\u0107 jak najmniej bit\u00f3w na kodowanie sekwencji klatek 0 i 1.<\/p>\n<p><img decoding=\"async\" alt=\"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy\" src=\"\/wp-content\/uploads\/2019\/12\/f0dc2df33a5297622a77a4ca09b19af8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMo\u017cemy wykona\u0107 <b>odejmowanie<\/b>, po prostu odejmujemy klatk\u0119 1 od klatki 0. Uzyskujemy klatk\u0119 1, u\u017cywaj\u0105c r\u00f3\u017cnicy mi\u0119dzy ni\u0105 a poprzedni\u0105 klatk\u0105, w rzeczywisto\u015bci koduj\u0105c tylko uzyskan\u0105 pozosta\u0142o\u015b\u0107.<\/p>\n<p><img decoding=\"async\" alt=\"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy\" src=\"\/wp-content\/uploads\/2019\/12\/c14981c3a3a0459a02620805c4a0f2db.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAle co, je\u015bli powiem ci, \u017ce istnieje jeszcze lepsza metoda, kt\u00f3ra wykorzystuje nawet mniej bit\u00f3w?! Najpierw podzielmy klatk\u0119 0 na wyra\u017an\u0105 siatk\u0119 sk\u0142adaj\u0105c\u0105 si\u0119 z blok\u00f3w. A potem spr\u00f3bujmy dopasowa\u0107 bloki z klatki 0 do klatki 1. Innymi s\u0142owy, ocenimy ruch mi\u0119dzy klatkami.<\/p>\n<blockquote><p> Z Wikipedii \u2014 <b>kompensacja ruchu blokowego<\/b><\/p>\n<p>Kompensacja ruchu blokowego dzieli bie\u017c\u0105c\u0105 klatk\u0119 na nieprzecinaj\u0105ce si\u0119 bloki, a wektor kompensacji ruchu informuje o pochodzeniu blok\u00f3w (powszechne nieporozumienie polega na tym, \u017ce <i>poprzednia<\/i> klatka jest dzielona na nieprzecinaj\u0105ce si\u0119 bloki, a wektory kompensacji ruchu informuj\u0105, dok\u0105d te bloki si\u0119 przemieszczaj\u0105. W rzeczywisto\u015bci jest odwrotnie \u2014 analizowana jest nie poprzednia klatka, a nast\u0119pna, ustala si\u0119 nie dok\u0105d przesuwaj\u0105 si\u0119 bloki, ale sk\u0105d si\u0119 pojawi\u0142y). Zwykle pocz\u0105tkowe bloki nak\u0142adaj\u0105 si\u0119 w klatce \u017ar\u00f3d\u0142owej. Niekt\u00f3re algorytmy kompresji wideo zbieraj\u0105 bie\u017c\u0105c\u0105 klatk\u0119 z cz\u0119\u015bci nawet nie jednego, a od razu kilku wcze\u015bniej przes\u0142anych klatek.<\/p><\/blockquote>\n<p><img decoding=\"async\" alt=\"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy\" src=\"\/wp-content\/uploads\/2019\/12\/0c34e84b318be2d250bade240fad80ed.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nW procesie oceny widzimy, \u017ce kula przemie\u015bci\u0142a si\u0119 z (<b>x<\/b>=0, <b>y<\/b>=25) na (<b>x<\/b>=6, <b>y<\/b>=26), warto\u015bci <b>x<\/b> i <b>y<\/b> okre\u015blaj\u0105 kierunek ruchu. Kolejny krok, jaki mo\u017cemy podj\u0105\u0107, aby zachowa\u0107 bity, to kodowanie tylko r\u00f3\u017cnicy wektor\u00f3w ruchu pomi\u0119dzy ostatni\u0105 pozycj\u0105 bloku a przewidywan\u0105, wi\u0119c ostateczny wektor ruchu b\u0119dzie (x=6-0=6, y=26-25=1).<\/p>\n<p>W rzeczywistej sytuacji ta kulka by\u0142aby podzielona na <b>n<\/b> bloki, ale nie zmienia to istoty sprawy.<\/p>\n<p>Obiekty w kadrze poruszaj\u0105 si\u0119 w trzech wymiarach, wi\u0119c podczas ruchu kulki mo\u017ce ona sta\u0107 si\u0119 wizualnie mniejsza (lub wi\u0119ksza, gdy zbli\u017ca si\u0119 do widza). To normalne, \u017ce nie b\u0119dzie idealnego dopasowania pomi\u0119dzy blokami. Oto z\u0142o\u017cony widok naszej oceny i rzeczywistego obrazu.<\/p>\n<p><img decoding=\"async\" alt=\"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy\" src=\"\/wp-content\/uploads\/2019\/12\/0fb4737e1076221e786fd6a78357422d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJednak widzimy, \u017ce kiedy stosujemy ocen\u0119 ruchu, danych do kodowania jest znacz\u0105co mniej ni\u017c przy u\u017cyciu prostszej metody obliczania r\u00f3\u017cnicy pomi\u0119dzy klatkami.<\/p>\n<p><img decoding=\"async\" alt=\"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy\" src=\"\/wp-content\/uploads\/2019\/12\/319507ad7197b7693efff11dcd7e4df4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Jak b\u0119dzie wygl\u0105da\u0107 rzeczywista kompensacja ruchu<\/h2>\n<p>\nTa metoda stosowana jest od razu do wszystkich blok\u00f3w. Cz\u0119sto nasza hipotetyczna poruszaj\u0105ca si\u0119 kulka zostanie podzielona na kilka blok\u00f3w.<\/p>\n<p><img decoding=\"async\" alt=\"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy\" src=\"\/wp-content\/uploads\/2019\/12\/978b5612dbd164d2865ccdec4474fdb4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMo\u017cesz samodzielnie zbada\u0107 te koncepcje, u\u017cywaj\u0105c <noindex><a rel=\"nofollow\" href=\"https:\/\/jupyter.org\/\">Jupyter<\/a><\/noindex>.<\/p>\n<p>Aby zobaczy\u0107 wektory ruchu, mo\u017cesz stworzy\u0107 film z zewn\u0119trznym przewidywaniem za pomoc\u0105 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.ffmpeg.org\/\">ffmpeg<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy\" src=\"\/wp-content\/uploads\/2019\/12\/056d6dfd2c18baaabc70655edfe3d609.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMo\u017cna r\u00f3wnie\u017c skorzysta\u0107 z <noindex><a rel=\"nofollow\" href=\"https:\/\/software.intel.com\/en-us\/video-pro-analyzer\">Intel Video Pro Analyzer<\/a><\/noindex> (jest p\u0142atny, ale dost\u0119pna jest bezp\u0142atna wersja pr\u00f3bna, kt\u00f3ra ogranicza si\u0119 tylko do pierwszych dziesi\u0119ciu klatek).<\/p>\n<p><img decoding=\"async\" alt=\"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy\" src=\"\/wp-content\/uploads\/2019\/12\/5e28ccc6e6101b8d613f94d326a685f2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Redundancja przestrzenna (prognoza wewn\u0119trzna)<\/h2>\n<p>\nJe\u015bli przeanalizujemy ka\u017cd\u0105 klatk\u0119 w wideo, odkryjemy wiele powi\u0105zanych obszar\u00f3w.<\/p>\n<p><img decoding=\"async\" alt=\"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy\" src=\"\/wp-content\/uploads\/2019\/12\/24bff6d64704cf0c8e1010832ea8f6ea.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPrzyjrzyjmy si\u0119 temu przyk\u0142adzie. Ta scena sk\u0142ada si\u0119 g\u0142\u00f3wnie z niebieskiego i bia\u0142ego koloru.<\/p>\n<p><img decoding=\"async\" alt=\"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy\" src=\"\/wp-content\/uploads\/2019\/12\/12edf221c61e064674ad363db9f3342c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTo jest klatka I. Nie mo\u017cemy wzi\u0105\u0107 poprzednich klatek do prognozowania, ale mo\u017cemy j\u0105 skompresowa\u0107. Zakodujemy na czerwono zaznaczony blok. Je\u015bli spojrzymy na s\u0105siad\u00f3w, zauwa\u017cymy, \u017ce w jego otoczeniu wyst\u0119puj\u0105 pewne tendencje kolorystyczne.<\/p>\n<p><img decoding=\"async\" alt=\"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy\" src=\"\/wp-content\/uploads\/2019\/12\/b67b3fba3d1792db81d0f1cb52c7c29b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nZak\u0142adamy, \u017ce kolory w kadrze rozprzestrzeniaj\u0105 si\u0119 w pionie. Co oznacza, \u017ce warto\u015bci nieznanych pikseli b\u0119d\u0105 zawiera\u0142y warto\u015bci jego s\u0105siad\u00f3w.<\/p>\n<p><img decoding=\"async\" alt=\"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy\" src=\"\/wp-content\/uploads\/2019\/12\/6fe8f6ed7ebc66940fca27b8cd2c5915.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTaka prognoza mo\u017ce okaza\u0107 si\u0119 r\u00f3wnie\u017c nietrafiona. W\u0142a\u015bnie dlatego nale\u017cy zastosowa\u0107 t\u0119 metod\u0119 (prognoza wewn\u0119trzna), a nast\u0119pnie jeszcze odj\u0105\u0107 rzeczywiste warto\u015bci. To da nam blok resztkowy, co doprowadzi do znacznie bardziej skompresowanej macierzy w por\u00f3wnaniu do orygina\u0142u.<\/p>\n<p><img decoding=\"async\" alt=\"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy\" src=\"\/wp-content\/uploads\/2019\/12\/52fd77c96aa8445af12fca468c72c844.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJe\u015bli chcesz po\u0107wiczy\u0107 z wewn\u0119trznymi przewidywaniami, mo\u017cesz stworzy\u0107 wideo z makroblokami oraz ich przewidywaniami za pomoc\u0105 ffmpeg. Aby zrozumie\u0107 znaczenie ka\u017cdego koloru bloku, musisz zapozna\u0107 si\u0119 z dokumentacj\u0105 ffmpeg.<\/p>\n<p><img decoding=\"async\" alt=\"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy\" src=\"\/wp-content\/uploads\/2019\/12\/0399473c538a550f9317fd59c347a565.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMo\u017cesz tak\u017ce skorzysta\u0107 z Intel Video Pro Analyzer (jak ju\u017c wspomnia\u0142em, w wersji pr\u00f3bnej bezp\u0142atnej, ograniczenie do pierwszych 10 klatek, ale tego wystarczy na pocz\u0105tek).<\/p>\n<p><img decoding=\"async\" alt=\"Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy\" src=\"\/wp-content\/uploads\/2019\/12\/abcdf1eb4b7dbdcf2a7a64154f3052ba.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Cz\u0119\u015b\u0107 druga:<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/480430\/\"> Zasady dzia\u0142ania kodeka wideo<\/a><\/noindex><\/h3>\n<p>\u0179r\u00f3d\u0142o: <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\/pl\/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=\"pl_PL\" \/>\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\/pl\/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\udd47Jak dzia\u0142a kodek wideo. Cz\u0119\u015b\u0107 1. Podstawy | ProHoster","description":"Cz\u0119\u015b\u0107 druga: Zasady dzia\u0142ania kodeka wideo Dowolny obraz rastrowy mo\u017cna przedstawi\u0107 w postaci.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/news\/kak-rabotaet-videokodek-chast-1-osnovy","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","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\/pl\/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\/pl\/wp-json\/wp\/v2\/posts\/54312","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=54312"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/54312\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=54312"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=54312"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=54312"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}