{"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\/nl\/blog\/news\/kak-rabotaet-videokodek-chast-1-osnovy","title":{"rendered":"Hoe werkt een videocodec. Deel 1. Basisprincipes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h3>Tweede deel:<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/480430\/\"> Principes van videocodecs<\/a><\/noindex><\/h3>\n<p>Elk raster <b>afbeelding<\/b> kan worden voorgesteld als <b>een tweedimensionale matrix<\/b>. Wanneer het gaat om kleuren, kan het idee verder worden ontwikkeld door de afbeelding te beschouwen als <b>een driedimensionale matrix<\/b>, waarin aanvullende dimensies worden gebruikt om gegevens voor elke kleur op te slaan.<\/p>\n<p>Wanneer we de uiteindelijke kleur beschouwen als een combinatie van de zogenaamde primaire kleuren (rood, groen en blauw), defini\u00ebren we in onze driedimensionale matrix drie vlaktes: de eerste voor de kleur rood, de tweede voor groen en de laatste voor blauw.<br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/481418\/\"><img decoding=\"async\" alt=\"Hoe werkt een videocodec. Deel 1. Basisprincipes\" src=\"\/wp-content\/uploads\/2019\/12\/ce37dd683a4c3ed434dae1d488646716.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\nLaten we elke punt in deze matrix een pixel (beeldelement) noemen. Elke pixel bevat informatie over de intensiteit (meestal in de vorm van een getalswaarde) van elke kleur. Bijvoorbeeld, <b>een rode pixel<\/b> betekent dat deze 0 groen, 0 blauw en maximaal rood bevat. <b>Een roze pixel<\/b> kan worden gevormd met behulp van een combinatie van de drie kleuren. Met een getalbereik van 0 tot 255, wordt een roze pixel gedefinieerd als <b>Rood = 255<\/b>, <b>Groen = 192<\/b> en <b>Blauw = 203<\/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 - webontwikkeling\"><img decoding=\"async\" alt=\"Hoe werkt een videocodec. Deel 1. Basisprincipes\" src=\"\/wp-content\/uploads\/2019\/12\/e5063b9a32248767cb0702e7aa2e7f9e.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br clear=\"right\"><br \/>\nHet artikel is gepubliceerd met de steun van EDISON.<\/p>\n<p>We ontwikkelen <noindex><a rel=\"nofollow\" href=\"https:\/\/www.edsd.ru\/ru\/portfolio\/tehnologiya\/video\">toepassingen voor videobewaking, streaming video<\/a><\/noindex>, en we houden ons ook bezig met <noindex><a rel=\"nofollow\" href=\"https:\/\/www.edsd.ru\/videozapis-v-bolnichnoj-operacionnoj-s-vozmozhnostyu-obsuzhdeniya-na-forume\">videoregistratie in de operatiekamer<\/a><\/noindex>.<\/p><\/blockquote>\n<h3>Alternatieve manieren om een kleurenafbeelding te coderen<\/h3>\n<p>\nVoor het weergeven van de kleuren waaruit de afbeelding bestaat, zijn er vele andere modellen. Bijvoorbeeld, een ge\u00efndexeerde palet kan worden gebruikt, waarbij slechts \u00e9\u00e9n byte nodig is om elke pixel voor te stellen, in tegenstelling tot de drie die nodig zijn bij het gebruik van het RGB-model. In zo'n model kan een 2D-matrix worden gebruikt in plaats van een 3D-matrix voor het weergeven van elke kleur. Dit bespaart geheugen, maar biedt een kleinere kleurnuance.<\/p>\n<p><img decoding=\"async\" alt=\"Hoe werkt een videocodec. Deel 1. Basisprincipes\" src=\"\/wp-content\/uploads\/2019\/12\/573a39c53527b4ec0403f019becf2d22.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>RGB<\/h2>\n<p>Bekijk bijvoorbeeld deze afbeelding hieronder. Het eerste gezicht is volledig gekleurd. De anderen zijn de rode, groene en blauwe vlakken (de intensiteit van de overeenkomende kleuren wordt weergegeven in grijstinten).<\/p>\n<p><img decoding=\"async\" alt=\"Hoe werkt een videocodec. Deel 1. Basisprincipes\" src=\"\/wp-content\/uploads\/2019\/12\/cf1f802d4381e062005490f5f9f26911.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWe zien dat de tinten rood in het origineel op dezelfde plekken te zien zijn als waar de helderste delen van het tweede gezicht zich bevinden. Terwijl de bijdrage van de blauwe kleur voornamelijk alleen te zien is in de ogen van Mario (het laatste gezicht) en de elementen van zijn kleding. Let op waar alle drie de kleurvlakken de minste bijdrage leveren (de donkerste delen van de afbeeldingen) \u2014 dit zijn de snorharen van Mario.<\/p>\n<p>Voor het opslaan van de intensiteit van elke kleur is een bepaald aantal bits vereist \u2014 deze waarde wordt de <b>kleurendiepte<\/b>. Stel dat 8 bits (afgeleid van de waarde van 0 tot 255) worden gebruikt voor \u00e9\u00e9n kleurvlak. Dan hebben we een kleurendiepte van 24 bits (8 bits \u00d7 3 vlakken R\/G\/B).<\/p>\n<p>Een andere eigenschap van een afbeelding is <b>resolutie<\/b>, wat het aantal pixels in \u00e9\u00e9n dimensie vertegenwoordigt. Vaak wordt deze aangegeven als <b>breedte \u00d7 hoogte<\/b>, zoals hieronder in de afbeeldingvoorbeeld 4 op 4.<br \/>\n<img decoding=\"async\" alt=\"Hoe werkt een videocodec. Deel 1. Basisprincipes\" src=\"\/wp-content\/uploads\/2019\/12\/51a4d948e6d44e4058e346fdbaf9d6c2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEen andere eigenschap waarmee we te maken hebben bij het werken met afbeeldingen\/video's is <b>beeldverhouding<\/b>, die de gebruikelijke proportionele relatie tussen de breedte en hoogte van een afbeelding of pixel beschrijft.<\/p>\n<p>Als men zegt dat een bepaalde film of afbeelding de afmeting 16 op 9 heeft, wordt meestal bedoeld <b>de beeldverhouding van het scherm<\/b> (<b>DAR<\/b> \u2014 van <i>Display Aspect Ratio<\/i>). Maar soms kunnen er verschillende vormen van individuele pixels zijn \u2014 in dit geval hebben we het over <b>de pixelverhouding<\/b> (<b>PAR<\/b> \u2014 van <i>Pixel Aspect Ratio<\/i>).<\/p>\n<p><img decoding=\"async\" alt=\"Hoe werkt een videocodec. Deel 1. Basisprincipes\" src=\"\/wp-content\/uploads\/2019\/12\/1158c6e98247a1a1084440969f9400c6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Hoe werkt een videocodec. Deel 1. Basisprincipes\" src=\"\/wp-content\/uploads\/2019\/12\/a610f0f77bdb245c05799d3de4147302.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<blockquote><p>Voor de huismoeder om op te letten: <b>DVD<\/b> overeenkomt met <b>DAR 4 op 3<\/b><\/p>\n<p>Hoewel de werkelijke resolutie van DVD 704&#215;480 bedraagt, behoudt het toch een beeldverhouding van 4:3, omdat de PAR een waarde van 10:11 heeft (704&#215;10 \/ 480&#215;11).<\/p><\/blockquote>\n<p>\nEn ten slotte kunnen we <b>video's<\/b> defini\u00ebren als een reeks van <b>n<\/b> frames per tijdperiood <b>tijd<\/b>, wat als een extra dimensie kan worden beschouwd. En <b>n<\/b> dan is het de framefrequentie of het aantal frames per seconde (<b>FPS<\/b> \u2014 van <i>Frames per Second<\/i>).<\/p>\n<p><img decoding=\"async\" alt=\"Hoe werkt een videocodec. Deel 1. Basisprincipes\" src=\"\/wp-content\/uploads\/2019\/12\/f940932bbd66aa361c7966f8b44ed431.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHet aantal bits per seconde dat nodig is voor het afspelen van video is zijn <b>dataverhouding<\/b> \u2014 <b>bitrate<\/b>.<\/p>\n<blockquote><p>bitrate = breedte * hoogte * kleurendiepte * frames per seconde<\/p><\/blockquote>\n<p>\nBijvoorbeeld, voor video met 30 frames per seconde, 24 bits per pixel, heeft een resolutie van 480&#215;240 82.944.000 bits per seconde of 82,944 Mbit\/s nodig (30x480x240x24) - maar dit is zonder het gebruik van compressiemethoden.<\/p>\n<p>Als de dataverhouding <i>bijna constant is<\/i>, wordt deze een <b>constante dataverhouding<\/b> (<b>CBR<\/b> \u2014 van <i>constant bit rate<\/i>). Maar deze kan ook vari\u00ebren, in dat geval wordt het <b>variabele dataverhouding<\/b> (<b>VBR<\/b> \u2014 van <i>variable bit rate<\/i>).<\/p>\n<p>Deze grafiek toont een beperkte VBR, wanneer er niet te veel bits worden besteed in het geval van een volledig zwart frame.<\/p>\n<p><img decoding=\"async\" alt=\"Hoe werkt een videocodec. Deel 1. Basisprincipes\" src=\"\/wp-content\/uploads\/2019\/12\/f307dde8da9ef1e017646ebcad0c4062.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOorspronkelijk hebben ingenieurs een methode ontwikkeld om de waargenomen framefrequentie van een videodisplay te verdubbelen zonder extra bandbreedte te gebruiken. Deze methode staat bekend als <b>interlaced video<\/b>; in wezen stuurt het de helft van het scherm in het eerste 'frame' en de andere helft in het volgende 'frame'.<\/p>\n<p>Tegenwoordig gebeurt de visualisatie van sc\u00e8nes voornamelijk met behulp van <b>de technologie voor progressieve scanning<\/b>. Dit is een manier om bewegende beelden weer te geven, op te slaan of te verzenden, waarbij alle lijnen van elk frame achtereenvolgens worden getekend.<\/p>\n<p><img decoding=\"async\" alt=\"Hoe werkt een videocodec. Deel 1. Basisprincipes\" src=\"\/wp-content\/uploads\/2019\/12\/434afd828d803ec1e4c87a3827c07dde.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNou, nu weten we hoe een afbeelding digitaal wordt weergegeven, hoe de kleuren zijn opgebouwd, hoeveel bits per seconde we nodig hebben om video weer te geven, of de bitrate constant (CBR) of variabel (VBR) is. We weten over de opgegeven resolutie met een opgegeven framerate en hebben kennisgemaakt met veel andere termen, zoals interlaced video, PAR en enkele anderen.<\/p>\n<h2>Verwijdering van redundantie<\/h2>\n<p>\nHet is bekend dat ongecomprimeerde video niet normaal te gebruiken is. Een uur video met een resolutie van 720p en een framerate van 30 frames per seconde zou 278 GB in beslag nemen. Dit getal krijgen we door 1280 x 720 x 24 x 30 x 3600 (breedte, hoogte, bits per pixel, FPS en tijd in seconden) met elkaar te vermenigvuldigen.<\/p>\n<p>Gebruik van <b>verliesloze compressie-algoritmen<\/b>, zoals DEFLATE (gebruikt in PKZIP, Gzip en PNG), zal niet voldoende verminderen in de benodigde bandbreedte. We moeten naar andere manieren van video-compressie zoeken.<\/p>\n<p>Hiervoor kunnen we gebruik maken van de kenmerken van ons zicht. We onderscheiden helderheid beter dan kleuren. Video is een verzameling opeenvolgende afbeeldingen die in de loop van de tijd herhaald worden. Tussen aangrenzende frames van \u00e9\u00e9n sc\u00e8ne zijn de verschillen klein. Bovendien bevat elk frame veel gebieden die dezelfde (of vergelijkbare) kleur gebruiken.<\/p>\n<h2>Kleur, helderheid en onze ogen<\/h2>\n<p>\nOnze ogen zijn gevoeliger voor helderheid dan voor kleur. Je kunt dit zelf bevestigen door naar deze afbeelding te kijken.<\/p>\n<p><img decoding=\"async\" alt=\"Hoe werkt een videocodec. Deel 1. Basisprincipes\" src=\"\/wp-content\/uploads\/2019\/12\/bf50b7dfd54ebbdb66556bbf5e304090.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Als je niet ziet dat de kleuren van de vierkanten in de linkerhelft van de afbeelding <b>A<\/b> en <b>B<\/b> werkelijk hetzelfde zijn, is dat normaal. Onze hersenen dwingen ons om meer aandacht te besteden aan licht en schaduw, dan aan kleur. Aan de rechterkant is er een verbinding van dezelfde kleur tussen de gemarkeerde vierkanten \u2014 daarom (dwz onze hersenen) kunnen we gemakkelijk vaststellen dat het daar in feite dezelfde kleur is.<\/p>\n<blockquote><p>Laten we (vereenvoudigd) bekijken hoe onze ogen werken. Het oog is een complex orgaan, bestaande uit veel onderdelen. Echter, we zijn vooral ge\u00efnteresseerd in kegeltjes en staafjes. Het oog bevat ongeveer 120 miljoen staafjes en 6 miljoen kegeltjes.<\/p>\n<p>Laten we kleur- en lichtwaarneming beschouwen als afzonderlijke functies van bepaalde delen van het oog (in werkelijkheid is het iets gecompliceerder, maar we houden het simpel). Staafjes zijn vooral verantwoordelijk voor helderheid, terwijl kegeltjes verantwoordelijk zijn voor kleur. Kegeltjes worden ingedeeld in drie types, afhankelijk van het aanwezige pigment: S-kegeltjes (blauw), M-kegeltjes (groen) en L-kegeltjes (rood).<\/p>\n<p>Omdat we veel meer staafjes (helderheid) hebben dan kegeltjes (kleur), kan worden geconcludeerd dat we beter in staat zijn om overgangen tussen donker en licht te onderscheiden dan kleuren.<\/p>\n<p><img decoding=\"async\" alt=\"Hoe werkt een videocodec. Deel 1. Basisprincipes\" src=\"\/wp-content\/uploads\/2019\/12\/d344365d45e43b36635ce29baa1132b4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Functies van contrastgevoeligheid<\/h2>\n<p>\nOnderzoekers van experimentele psychologie en vele andere gebieden hebben talloze theorie\u00ebn over het menselijk zicht ontwikkeld. En een daarvan wordt genoemd <b>de functies van contrastgevoeligheid<\/b>. Ze zijn gerelateerd aan ruimtelijke en temporele verlichting. In het kort gaat het erom hoeveel veranderingen vereist zijn voordat de waarnemer deze opmerkt. Let op het meervoud van het woord \"functie\". Dit komt omdat we de contrastgevoeligheidsfuncties niet alleen kunnen meten voor zwart-witbeelden, maar ook voor kleuren. De resultaten van deze experimenten tonen aan dat onze ogen in de meeste gevallen gevoeliger zijn voor helderheid dan voor kleur.<\/p><\/blockquote>\n<p>Aangezien we weten dat we gevoeliger zijn voor de helderheid van een beeld, kunnen we proberen dit feit te gebruiken.<\/p>\n<h2>Kleurmodel<\/h2>\n<p>\nWe hebben al een beetje onderzocht hoe we met kleurafbeeldingen kunnen werken met behulp van het RGB-schema. Er zijn andere modellen. Er is een model dat helderheid van kleur scheidt en het staat bekend als <b>YCbCr<\/b>. Trouwens, er zijn andere modellen die een soortgelijke scheiding maken, maar we zullen alleen deze bespreken.<\/p>\n<p>In dit kleurmodel <b>Y<\/b> is de representatie van helderheid, en er worden twee kleurkanalen gebruikt: <b>Cb<\/b> (verzadigd blauw) en <b>Cr<\/b> (verzadigd rood). YCbCr kan worden verkregen uit RGB, net zoals een omgekeerde conversie mogelijk is. Met dit model kunnen we full-color afbeeldingen maken, zoals hieronder te zien is:<\/p>\n<p><img decoding=\"async\" alt=\"Hoe werkt een videocodec. Deel 1. Basisprincipes\" src=\"\/wp-content\/uploads\/2019\/12\/e7458471caf7ef071bb0362e96b44f11.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Conversie tussen YCbCr en RGB<\/h2>\n<p>\nIemand zou kunnen tegenwerpen: hoe kunnen alle kleuren worden verkregen zonder groen?<\/p>\n<p>Om deze vraag te beantwoorden, converteren we RGB naar YCbCr. We gebruiken de coefficients die in de standaard zijn vastgesteld. <b>BT.601<\/b>, die werd aanbevolen door de afdeling <b>ITU-R<\/b>. Deze afdeling bepaalt de normen voor digitale video. Bijvoorbeeld: wat is 4K? Wat moeten de framerate, resolutie en kleurmodel zijn?<\/p>\n<p>Laten we eerst de helderheid berekenen. We gebruiken de constanten die door de ITU zijn voorgesteld en vervangen de RGB-waarden.<\/p>\n<p><b>Y<\/b> = 0.299<b>R<\/b> + 0.587<b>G<\/b> + 0.114<b>B<\/b> <\/p>\n<p>Nadat we de helderheid hebben verkregen, scheiden we de blauwe en rode kleur:<\/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>En we kunnen ook terug converseren en zelfs groen verkrijgen met behulp van 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>Over het algemeen gebruiken weergaven (monitoren, televisies, schermen, enz.) alleen het RGB-model. Maar dit model kan op verschillende manieren worden georganiseerd:<\/p>\n<p><img decoding=\"async\" alt=\"Hoe werkt een videocodec. Deel 1. Basisprincipes\" src=\"\/wp-content\/uploads\/2019\/12\/8736e59d3a7606494fe6a7718d5b4aa2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Kleur subsampling<\/h2>\n<p>\nMet een afbeelding die wordt weergegeven als een combinatie van helderheid en chrominantie, kunnen we de hogere gevoeligheid van het menselijke gezichtsvermogen voor helderheid gebruiken dan voor chrominantie, door selectief informatie te verwijderen. Kleur subsampling is een methode van afbeelding codering waarbij minder resolutie voor chrominantie wordt gebruikt dan voor helderheid.<\/p>\n<p><img decoding=\"async\" alt=\"Hoe werkt een videocodec. Deel 1. Basisprincipes\" src=\"\/wp-content\/uploads\/2019\/12\/11b5b602ab1374896df296f787932ace.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Hoe ver is het toegestaan om de chrominantie-resolutie te verlagen?! Het blijkt dat er al enkele schema's zijn die beschrijven hoe resolutie en fusie te verwerken (Eindkleur = Y + Cb + Cr).<\/p>\n<p>Deze schema's staan bekend als <b>subsampling systemen<\/b> en worden uitgedrukt in een verhouding van 3: 1 \u2014 <b>a<\/b>:<b>x<\/b>:<b>y<\/b>, die het aantal monsters van helderheids- en chrominantiesignalen definieert.<\/p>\n<p><b>a<\/b> \u2014 referentie horizontale sampling (meestal gelijk aan 4)<br \/>\n<b>x<\/b> \u2014 het aantal chrominantiekleine monsters in de eerste rij pixels (horizontale resolutie ten opzichte van <b>a<\/b>)<br \/>\n<b>y<\/b> \u2014 het aantal wijzigingen in chrominantiesamples tussen de eerste en tweede rij pixels.<\/p>\n<blockquote><p>Een uitzondering is <b>4<\/b>:<b>1<\/b>:<b>0<\/b>, die ervoor zorgt dat er \u00e9\u00e9n chrominantie monster is in elke 4 op 4 helderheid resolutieblok.<\/p><\/blockquote>\n<p>Algemene schema's die worden gebruikt in moderne codecs:<\/p>\n<ul>\n<li><b>4<\/b>:<b>4<\/b>:<b>4<\/b> (geen subsampling)<\/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 een voorbeeld van fusie<\/h3>\n<p>\nDit is een samengevoegd afbeeldingsfragment met behulp van YCbCr 4:2:0. Let op dat we slechts 12 bits per pixel gebruiken.<\/p>\n<p><img decoding=\"async\" alt=\"Hoe werkt een videocodec. Deel 1. Basisprincipes\" src=\"\/wp-content\/uploads\/2019\/12\/67e288b0a46fca88452addaef736f4cd.png\" style=\"display:block;margin: 0 auto;\" \/><\/p><\/blockquote>\n<p>Zo ziet hetzelfde beeld eruit, gecodeerd met de belangrijkste soorten kleursubdifferentiatie. De bovenste rij is de uiteindelijke YCbCr, de onderste rij toont de chrominantie-resolutie. Heel behoorlijk resultaat, gezien de kleine kwaliteitsverliezen.<\/p>\n<p><img decoding=\"async\" alt=\"Hoe werkt een videocodec. Deel 1. Basisprincipes\" src=\"\/wp-content\/uploads\/2019\/12\/fb54b6fcdbbb63cb19d19b89df9f6d85.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVergeet niet dat we 278 GB schijfruimte berekenden voor het opslaan van een uur video in 720p met 30 frames per seconde? Als we YCbCr 4:2:0 gebruiken, zal deze grootte halveren - 139 GB. We zijn nog steeds ver van een acceptabel resultaat.<\/p>\n<p>Je kunt zelf de YCbCr-histogram genereren met FFmpeg. In deze afbeelding overheerst blauw boven rood, wat duidelijk zichtbaar is in de histogram.<\/p>\n<p><img decoding=\"async\" alt=\"Hoe werkt een videocodec. Deel 1. Basisprincipes\" src=\"\/wp-content\/uploads\/2019\/12\/6e74cb646cabc77079aea7eaee846fd1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<blockquote>\n<h4>Chrominantie, helderheid, kleurenschema - video-overzicht<\/h4>\n<p>\nDit geweldige video wordt aanbevolen om te bekijken. Hierin wordt uitgelegd wat helderheid is, en alle punten worden aan de orde gesteld. <i>\u0451<\/i> over helderheid en kleur.<\/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=\"Video afspelen\" 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>Soorten frames<\/h2>\n<p>\nLaten we verder gaan. We gaan proberen de tijdsredundantie te verminderen. Maar eerst laten we wat basisterminologie defini\u00ebren. Stel dat we een film hebben met 30 frames per seconde, hier zijn de eerste 4 frames:<\/p>\n<p><img decoding=\"async\" alt=\"Hoe werkt een videocodec. Deel 1. Basisprincipes\" src=\"\/wp-content\/uploads\/2019\/12\/103dc714d756d014e1d2c1bfb33751b1.png\" style=\"display:block;margin: 0 auto;\" \/> <img decoding=\"async\" alt=\"Hoe werkt een videocodec. Deel 1. Basisprincipes\" src=\"\/wp-content\/uploads\/2019\/12\/fdd7d89b884b2f77fea7c386c0d29fef.png\" style=\"display:block;margin: 0 auto;\" \/> <img decoding=\"async\" alt=\"Hoe werkt een videocodec. Deel 1. Basisprincipes\" src=\"\/wp-content\/uploads\/2019\/12\/61746b829025d5abcb7db072a54400c0.png\" style=\"display:block;margin: 0 auto;\" \/> <img decoding=\"async\" alt=\"Hoe werkt een videocodec. Deel 1. Basisprincipes\" src=\"\/wp-content\/uploads\/2019\/12\/c65ee526ec4539996f6bb94463d0cf2d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWe kunnen veel herhalingen in de frames zien: bijvoorbeeld de blauwe achtergrond, die van frame tot frame niet verandert. Om dit probleem op te lossen, kunnen we ze abstract classificeren als drie soorten frames.<\/p>\n<h3>I-frame (<b>I<\/b>ntro Frame)<\/h3>\n<p>\nI-frame (referentiekader, sleutelafbeelding, intern frame) is autonoom. Onafhankelijk van wat er vereist is om te visualiseren, is een I-frame in wezen een statische foto. Het eerste frame is meestal een I-frame, maar we zullen regelmatig I-frames tegenkomen, zelfs ver na de eerste frames.<\/p>\n<p><img decoding=\"async\" alt=\"Hoe werkt een videocodec. Deel 1. Basisprincipes\" src=\"\/wp-content\/uploads\/2019\/12\/44f2a7d6154f1a40fdb1174a443a9c3f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>P-frame (<b>P<\/b>redicted Frame)<\/h3>\n<p>\nP-frame (voorspellend frame) maakt gebruik van het feit dat het huidige beeld bijna altijd kan worden gereproduceerd met behulp van het vorige frame. In het tweede frame is de enige wijziging de bewegende bal. We kunnen frame 2 verkrijgen door frame 1 iets te wijzigen, alleen door het verschil tussen deze frames te gebruiken. Voor het opbouwen van frame 2 verwijzen we naar het voorgaande frame 1.<\/p>\n<p><img decoding=\"async\" alt=\"Hoe werkt een videocodec. Deel 1. Basisprincipes\" src=\"\/wp-content\/uploads\/2019\/12\/1245857fd8406a24da02d0c71beb7b4d.png\" style=\"display:block;margin: 0 auto;\" \/> \u2190 <img decoding=\"async\" alt=\"Hoe werkt een videocodec. Deel 1. Basisprincipes\" src=\"\/wp-content\/uploads\/2019\/12\/ab8e8f6020825830c4d03004528af1a4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>B-frame (<b>B<\/b>i-predictive Frame)<\/h3>\n<p>\nHoe zit het met links niet alleen naar het verleden, maar ook naar toekomstige frames voor nog betere compressie?! Dit is in feite een B-frame (bidirectioneel frame).<\/p>\n<p><img decoding=\"async\" alt=\"Hoe werkt een videocodec. Deel 1. Basisprincipes\" src=\"\/wp-content\/uploads\/2019\/12\/f28d4e02836e9b37f0f21937dd1ba660.png\" style=\"display:block;margin: 0 auto;\" \/> \u2190 <img decoding=\"async\" alt=\"Hoe werkt een videocodec. Deel 1. Basisprincipes\" src=\"\/wp-content\/uploads\/2019\/12\/7a6b3a329db155c94a91f58a99874bb9.png\" style=\"display:block;margin: 0 auto;\" \/> \u2192 <img decoding=\"async\" alt=\"Hoe werkt een videocodec. Deel 1. Basisprincipes\" src=\"\/wp-content\/uploads\/2019\/12\/09df4bc5a35df89575c7b51349be4340.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Tussentijdse output<\/h2>\n<p>\nDeze typen frames worden gebruikt om de beste compressie te waarborgen. We zullen bespreken hoe dit gebeurt in het volgende gedeelte. Laten we ondertussen opmerken dat het meest 'kostbare' in termen van geheugen het I-frame is, het P-frame is aanzienlijk goedkoper, en de meest voordelige optie voor video is het B-frame.<\/p>\n<p><img decoding=\"async\" alt=\"Hoe werkt een videocodec. Deel 1. Basisprincipes\" src=\"\/wp-content\/uploads\/2019\/12\/97b9177ffff302881deb1c86ce416166.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Tijdelijke redundantie (inter-frame voorspelling)<\/h2>\n<p>\nLaten we kijken naar de mogelijkheden die we hebben om herhalingen in de tijd te minimaliseren. Dit type redundantie kan worden opgelost met behulp van wederzijdse voorspelling.<\/p>\n<p>Laten we proberen zo min mogelijk bits te besteden aan de codering van de sequentie van frames 0 en 1.<\/p>\n<p><img decoding=\"async\" alt=\"Hoe werkt een videocodec. Deel 1. Basisprincipes\" src=\"\/wp-content\/uploads\/2019\/12\/f0dc2df33a5297622a77a4ca09b19af8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWe kunnen <b>aftrekken<\/b>, we trekken simpelweg frame 1 af van frame 0. We krijgen frame 1 door alleen het verschil tussen dat frame en het vorige frame te gebruiken, en coderen in feite alleen het resulterende restant.<\/p>\n<p><img decoding=\"async\" alt=\"Hoe werkt een videocodec. Deel 1. Basisprincipes\" src=\"\/wp-content\/uploads\/2019\/12\/c14981c3a3a0459a02620805c4a0f2db.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMaar wat als ik je vertel dat er een nog betere methode is die nog minder bits gebruikt?! Laten we eerst frame 0 verdelen in een duidelijke raster van blokken. En laat vervolgens proberen de blokken van frame 0 te matchen met frame 1. Met andere woorden, laten we de beweging tussen de frames beoordelen.<\/p>\n<blockquote><p> Van Wikipedia \u2014 <b>bewegingscompensatie met blokken<\/b><\/p>\n<p>Blokgewijze bewegingscompensatie verdeelt het huidige frame in niet-overlappende blokken en de bewegingscompensatievector geeft de oorsprong van de blokken aan (een veel voorkomende misvatting is dat <i>het vorige<\/i> frame wordt verdeeld in niet-overlappende blokken, en de bewegingscompensatievectoren aangeven waar deze blokken naartoe gaan. In werkelijkheid is het omgekeerd \u2014 niet het vorige frame wordt geanalyseerd, maar het volgende, en we bepalen niet waar de blokken naartoe bewegen, maar waar ze vandaan komen). Gewoonlijk overlappen de oorspronkelijke blokken elkaar in het oorspronkelijke frame. Sommige videocompressie-algoritmes assembleren het huidige frame uit delen van niet \u00e9\u00e9n, maar meerdere eerder verzonden frames.<\/p><\/blockquote>\n<p><img decoding=\"async\" alt=\"Hoe werkt een videocodec. Deel 1. Basisprincipes\" src=\"\/wp-content\/uploads\/2019\/12\/0c34e84b318be2d250bade240fad80ed.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTijdens de evaluatie zien we dat de bal is verplaatst van (<b>x<\/b>=0, <b>y<\/b>=25) naar (<b>x<\/b>=6, <b>y<\/b>=26), waarden <b>x<\/b> en <b>y<\/b> bepalen de bewegingsvector. Een andere stap die we kunnen nemen om bits te besparen, is om alleen het verschil in bewegingsvectoren te coderen tussen de laatste positie van het blok en de voorspelde, zodat de uiteindelijke bewegingsvector (x=6-0=6, y=26-25=1) zal zijn.<\/p>\n<p>In een echte situatie zou deze bal verdeeld zijn in <b>n<\/b> blokken, maar dat verandert de essentie niet.<\/p>\n<p>Objecten in het beeld bewegen in drie dimensies, dus wanneer de bal beweegt, kan deze visueel kleiner worden (of groter, als deze naar de kijker toe beweegt). Het is normaal dat er geen perfecte overeenstemming zal zijn tussen de blokken. Hier is een gecombineerde weergave van onze schatting en de echte afbeelding.<\/p>\n<p><img decoding=\"async\" alt=\"Hoe werkt een videocodec. Deel 1. Basisprincipes\" src=\"\/wp-content\/uploads\/2019\/12\/0fb4737e1076221e786fd6a78357422d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMaar we zien dat wanneer we de bewegingsschatting toepassen, de data voor codering aanzienlijk minder is dan wanneer we een eenvoudigere methode gebruiken van het berekenen van de delta tussen de frames.<\/p>\n<p><img decoding=\"async\" alt=\"Hoe werkt een videocodec. Deel 1. Basisprincipes\" src=\"\/wp-content\/uploads\/2019\/12\/319507ad7197b7693efff11dcd7e4df4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Hoe de echte bewegingscompensatie eruit zal zien<\/h2>\n<p>\nDeze methode wordt onmiddellijk op alle blokken toegepast. Vaak zal onze hypothetische bewegende bal in meerdere blokken worden verdeeld.<\/p>\n<p><img decoding=\"async\" alt=\"Hoe werkt een videocodec. Deel 1. Basisprincipes\" src=\"\/wp-content\/uploads\/2019\/12\/978b5612dbd164d2865ccdec4474fdb4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJe kunt deze concepten zelf uitproberen door gebruik te maken van <noindex><a rel=\"nofollow\" href=\"https:\/\/jupyter.org\/\">Jupyter<\/a><\/noindex>.<\/p>\n<p>Om de bewegingsvectoren te zien, kun je een video maken met externe voorspelling met behulp van <noindex><a rel=\"nofollow\" href=\"https:\/\/www.ffmpeg.org\/\">ffmpeg<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"Hoe werkt een videocodec. Deel 1. Basisprincipes\" src=\"\/wp-content\/uploads\/2019\/12\/056d6dfd2c18baaabc70655edfe3d609.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJe kunt ook gebruikmaken van <noindex><a rel=\"nofollow\" href=\"https:\/\/software.intel.com\/en-us\/video-pro-analyzer\">Intel Video Pro Analyzer<\/a><\/noindex> (het is betaald, maar er is een gratis proefversie die alleen beperkt is tot de eerste tien frames).<\/p>\n<p><img decoding=\"async\" alt=\"Hoe werkt een videocodec. Deel 1. Basisprincipes\" src=\"\/wp-content\/uploads\/2019\/12\/5e28ccc6e6101b8d613f94d326a685f2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Ruimtelijke redundantie (interne voorspelling)<\/h2>\n<p>\nAls we elk frame in de video analyseren, ontdekken we veel onderling verbonden gebieden.<\/p>\n<p><img decoding=\"async\" alt=\"Hoe werkt een videocodec. Deel 1. Basisprincipes\" src=\"\/wp-content\/uploads\/2019\/12\/24bff6d64704cf0c8e1010832ea8f6ea.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLaten we dit voorbeeld bekijken. Sc\u00e8ne bestaat voornamelijk uit blauwe en witte kleuren.<\/p>\n<p><img decoding=\"async\" alt=\"Hoe werkt een videocodec. Deel 1. Basisprincipes\" src=\"\/wp-content\/uploads\/2019\/12\/12edf221c61e064674ad363db9f3342c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDit is een I-frame. We kunnen de vorige frames voor voorspelling niet gebruiken, maar we kunnen het wel comprimeren. We coderen de selectie van het rode blok. Als we naar de buren kijken, merken we dat er enkele kleurtrends rondom zijn.<\/p>\n<p><img decoding=\"async\" alt=\"Hoe werkt een videocodec. Deel 1. Basisprincipes\" src=\"\/wp-content\/uploads\/2019\/12\/b67b3fba3d1792db81d0f1cb52c7c29b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWe veronderstellen dat de kleuren in het frame verticaal verspreid zijn. Dit betekent dat de kleur van onbekende pixels de waarden van zijn buren zal bevatten.<\/p>\n<p><img decoding=\"async\" alt=\"Hoe werkt een videocodec. Deel 1. Basisprincipes\" src=\"\/wp-content\/uploads\/2019\/12\/6fe8f6ed7ebc66940fca27b8cd2c5915.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nZo'n voorspelling kan ook onjuist blijken te zijn. Daarom moet deze methode (interne voorspelling) worden toegepast, en vervolgens moeten de werkelijke waarden nogmaals worden afgetrokken. Dit zal ons een restblok geven, wat zal leiden tot een veel compacter matrix in vergelijking met het origineel.<\/p>\n<p><img decoding=\"async\" alt=\"Hoe werkt een videocodec. Deel 1. Basisprincipes\" src=\"\/wp-content\/uploads\/2019\/12\/52fd77c96aa8445af12fca468c72c844.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAls je wilt oefenen met interne voorspellingen, kun je een video maken met macroblokken en hun voorspellingen met behulp van ffmpeg. Om de betekenis van elke kleur van het blok te begrijpen, moet je de documentatie van ffmpeg bekijken.<\/p>\n<p><img decoding=\"async\" alt=\"Hoe werkt een videocodec. Deel 1. Basisprincipes\" src=\"\/wp-content\/uploads\/2019\/12\/0399473c538a550f9317fd59c347a565.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJe kunt ook Intel Video Pro Analyzer gebruiken (zoals ik eerder al noemde, is er in de gratis proefversie een limiet op de eerste 10 frames, maar dat is in het begin voldoende voor jou).<\/p>\n<p><img decoding=\"async\" alt=\"Hoe werkt een videocodec. Deel 1. Basisprincipes\" src=\"\/wp-content\/uploads\/2019\/12\/abcdf1eb4b7dbdcf2a7a64154f3052ba.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Tweede deel:<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/480430\/\"> Principes van videocodecs<\/a><\/noindex><\/h3>\n<p>Bron: <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.3 - 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\/nl\/blog\/news\/kak-rabotaet-videokodek-chast-1-osnovy\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"nl_NL\" \/>\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\/nl\/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\udd47Hoe een video-codec werkt. Deel 1. Basisprincipes | ProHoster","description":"De tweede deel: De principes van de werking van de video-codec. Elke rasterafbeelding kan worden weergegeven als.","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/news\/kak-rabotaet-videokodek-chast-1-osnovy","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nl_NL","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\/nl\/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\/nl\/wp-json\/wp\/v2\/posts\/54312","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=54312"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/54312\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=54312"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=54312"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=54312"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}