{"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\/da\/blog\/news\/kak-rabotaet-videokodek-chast-1-osnovy","title":{"rendered":"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h3>Anden del:<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/480430\/\"> Principperne for videokodek<\/a><\/noindex><\/h3>\n<p>Enhver raster <b>billede<\/b> kan repr\u00e6senteres som <b>en todimensionel matrix<\/b>. N\u00e5r det kommer til farver, kan ideen uddybes ved at betragte billedet som <b>en tridimensionel matrix<\/b>, hvor de ekstra dimensioner bruges til at gemme data for hver af farverne.<\/p>\n<p>Hvis vi betragter den endelige farve som en kombination af de s\u00e5kaldte prim\u00e6re farver (r\u00f8d, gr\u00f8n og bl\u00e5), definerer vi tre planer i vores tridimensionelle matrix: det f\u00f8rste for r\u00f8d farve, det andet for gr\u00f8n og det sidste for bl\u00e5.<br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/481418\/\"><img decoding=\"async\" alt=\"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende\" src=\"\/wp-content\/uploads\/2019\/12\/ce37dd683a4c3ed434dae1d488646716.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\nVi vil kalde hvert punkt i denne matrix en pixel (billedelement). Hver pixel indeholder information om intensiteten (normalt i form af et numerisk v\u00e6rdien) af hver farve. For eksempel, <b>en r\u00f8d pixel<\/b> betyder, at den har 0 gr\u00f8n farve, 0 bl\u00e5 og maksimal r\u00f8d. <b>En pink pixel<\/b> kan dannes ved hj\u00e6lp af en kombination af de tre farver. Ved at bruge et numerisk interval fra 0 til 255 defineres den pink pixel som <b>R\u00f8d = 255<\/b>, <b>Gr\u00f8n = 192<\/b> og <b>Bl\u00e5 = 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 - webudvikling\"><img decoding=\"async\" alt=\"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende\" src=\"\/wp-content\/uploads\/2019\/12\/e5063b9a32248767cb0702e7aa2e7f9e.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br clear=\"right\"><br \/>\nArtiklen er offentliggjort med st\u00f8tte fra EDISON.<\/p>\n<p>Vi udvikler <noindex><a rel=\"nofollow\" href=\"https:\/\/www.edsd.ru\/ru\/portfolio\/tehnologiya\/video\">applikationer til videooverv\u00e5gning, livestreaming,<\/a><\/noindex>, samt arbejder med <noindex><a rel=\"nofollow\" href=\"https:\/\/www.edsd.ru\/videozapis-v-bolnichnoj-operacionnoj-s-vozmozhnostyu-obsuzhdeniya-na-forume\">videooptagelse i operationsstuen<\/a><\/noindex>.<\/p><\/blockquote>\n<h3>Alternative metoder til kodning af farvebilleder<\/h3>\n<p>\nTil repr\u00e6sentation af de farver, som billedet best\u00e5r af, findes der mange andre modeller. For eksempel kan der anvendes en indekseret palette, hvor der kun kr\u00e6ves \u00e9n byte for at repr\u00e6sentere hver pixel, i stedet for de tre, der er n\u00f8dvendige ved brug af RGB-modellen. I en s\u00e5dan model kan man bruge en 2D-matrix i stedet for en 3D-matrix til at repr\u00e6sentere hver farve. Dette sparer hukommelse, men giver en mindre farveskala.<\/p>\n<p><img decoding=\"async\" alt=\"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende\" src=\"\/wp-content\/uploads\/2019\/12\/573a39c53527b4ec0403f019becf2d22.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>RGB<\/h2>\n<p>For eksempel, se p\u00e5 dette billede nedenfor. Det f\u00f8rste ansigt er helt farvet. De andre \u2014 er de r\u00f8de, gr\u00f8nne og bl\u00e5 planer (intensiteten af de respektive farver er vist i gr\u00e5toner).<\/p>\n<p><img decoding=\"async\" alt=\"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende\" src=\"\/wp-content\/uploads\/2019\/12\/cf1f802d4381e062005490f5f9f26911.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVi ser, at nuancerne af r\u00f8dt i originalen vil v\u00e6re p\u00e5 de samme steder, hvor de lyseste dele af det andet ansigt observeres. Mens bidraget fra den bl\u00e5 farve prim\u00e6rt kun kan ses i \u00f8jnene p\u00e5 Mario (det sidste ansigt) og i elementerne af hans t\u00f8j. Bem\u00e6rk, hvor alle tre farveplaner bidrager mindst (de m\u00f8rkeste dele af billederne) \u2014 det er i Marios oversk\u00e6g.<\/p>\n<p>For storage of the intensity of each color, a certain number of bits is required \u2014 this value is called <b>bit depth<\/b>. Suppose 8 bits (ranging from 0 to 255) is spent on one color plane. Then we have a color depth of 24 bits (8 bits * 3 planes R\/G\/B).<\/p>\n<p>Another property of an image is <b>resolution<\/b>, which represents the number of pixels in one dimension. It is often designated as <b>width \u00d7 height<\/b>, as shown below in the image example 4 by 4.<br \/>\n<img decoding=\"async\" alt=\"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende\" src=\"\/wp-content\/uploads\/2019\/12\/51a4d948e6d44e4058e346fdbaf9d6c2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nYet another property we deal with when working with images\/videos is <b>aspect ratio<\/b>, describing the usual proportional relationship between the width and height of an image or pixel.<\/p>\n<p>When it is said that a certain movie or picture has a size of 16 by 9, it usually refers to <b>screen aspect ratio<\/b> (<b>DAR<\/b> \u2014 fra <i>Display Aspect Ratio<\/i>). However, there can sometimes be different forms of individual pixels \u2014 in this case, it refers to <b>pixel aspect ratio<\/b> (<b>PAR<\/b> \u2014 fra <i>Pixel Aspect Ratio<\/i>).<\/p>\n<p><img decoding=\"async\" alt=\"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende\" src=\"\/wp-content\/uploads\/2019\/12\/1158c6e98247a1a1084440969f9400c6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende\" src=\"\/wp-content\/uploads\/2019\/12\/a610f0f77bdb245c05799d3de4147302.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<blockquote><p>For the housekeeper's note: <b>DVD<\/b> svarer til <b>DAR 4 by 3<\/b><\/p>\n<p>Selvom den reelle opl\u00f8sning for DVD'er er 704\u00d7480, bevarer den stadig et billede-forhold p\u00e5 4:3, da PAR er 10:11 (704\u00d710 \/ 480\u00d711).<\/p><\/blockquote>\n<p>\nAnd finally, we can define <b>en video<\/b> as a sequence of <b>n<\/b> frames over a period <b>tid<\/b>, which can be considered an additional dimension. And <b>n<\/b> then \u2014 this is frame rate or the number of frames per second (<b>FPS<\/b> \u2014 fra <i>Frames per Second<\/i>).<\/p>\n<p><img decoding=\"async\" alt=\"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende\" src=\"\/wp-content\/uploads\/2019\/12\/f940932bbd66aa361c7966f8b44ed431.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nThe number of bits per second needed to show video is its <b>bitrate<\/b> \u2014 <b>bitrate = width * height * bit depth * frames per second<\/b>.<\/p>\n<blockquote><p>For example, for a video with 30 frames per second, 24 bits per pixel, resolution of 480\u00d7240, it will require 82,944,000 bits per second or 82,944 Mbps (30x480x240x24) \u2014 but this is if no compression methods are used.<\/p><\/blockquote>\n<p>\nFor eksempel kr\u00e6ver video med 30 billeder i sekunder, 24 bit pr. pixel og en opl\u00f8sning p\u00e5 480\u00d7240 82.944.000 bit pr. sekund eller 82.944 Mbit\/s (30x480x240x24) \u2014 men det er uden at bruge nogen kompressionsmetoder.<\/p>\n<p>is almost constant <i>, it is called<\/i>constant bit rate <b>CBR<\/b> (<b>constant bit rate<\/b> \u2014 fra <i>). But it can also vary, in which case it is called<\/i>variable bit rate <b>VBR<\/b> (<b>variable bit rate<\/b> \u2014 fra <i>This graph demonstrates limited VBR, where not too many bits are used in the case of a completely dark frame.<\/i>).<\/p>\n<p>Initially, engineers developed a method to double the perceived frame rate of the video display without using additional bandwidth. This method is known as<\/p>\n<p><img decoding=\"async\" alt=\"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende\" src=\"\/wp-content\/uploads\/2019\/12\/f307dde8da9ef1e017646ebcad0c4062.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\ninterlaced video <b>tv\u00e6rg\u00e5ende video<\/b>; det meste sender det halvdelen af sk\u00e6rmen i det f\u00f8rste \"billede\", og den anden halvdel i det n\u00e6ste \"billede\".<\/p>\n<p>I \u00f8jeblikket sker visualiseringen af scener hovedsageligt ved hj\u00e6lp af <b>progressiv scanning teknologi<\/b>. Det er en metode til at vise, gemme eller transmittere bev\u00e6gelsesbilleder, hvor alle linjer i hvert billede tegnes sekventielt.<\/p>\n<p><img decoding=\"async\" alt=\"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende\" src=\"\/wp-content\/uploads\/2019\/12\/434afd828d803ec1e4c87a3827c07dde.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u00e5, nu er vi klar over, hvordan et billede pr\u00e6senteres digitalt, hvordan dets farver er sammensat, hvor mange bit per sekund vi bruger til at vise videoen, hvis transmissionen er konstant (CBR) eller variabel (VBR). Vi kender den specificerede opl\u00f8sning med en bestemt billedfrekvens og har f\u00e5et kendskab til mange andre termer som interlaced video, PAR og nogle andre.<\/p>\n<h2>Fjernelse af redundans<\/h2>\n<p>\nDet er kendt, at ukomprimeret video ikke kan anvendes. En times video med en opl\u00f8sning p\u00e5 720p og 30 billeder per sekund ville kr\u00e6ve 278 GB. Vi kommer til denne v\u00e6rdi ved at multiplicere 1280 x 720 x 24 x 30 x 3600 (bredde, h\u00f8jde, bit per pixel, FPS og tid i sekunder).<\/p>\n<p>Brugen af <b>tabsfrie komprimeringsalgoritmer<\/b>, s\u00e5som DEFLATE (som bruges i PKZIP, Gzip og PNG), vil ikke give tilstr\u00e6kkelig reduktion af den n\u00f8dvendige b\u00e5ndbredde. Vi m\u00e5 finde andre m\u00e5der at komprimere video p\u00e5.<\/p>\n<p>Til dette kan vi udnytte karakteristika ved vores syn. Vi skelner bedre mellem lysstyrke end farver. Video er en samling af sekventielle billeder, der gentages over tid. Mellem to n\u00e6rliggende billeder i en scene er forskellene sm\u00e5. Derudover indeholder hvert billede mange omr\u00e5der, der bruger samme (eller lignende) farve.<\/p>\n<h2>Farve, lysstyrke og vores \u00f8jne<\/h2>\n<p>\nVores \u00f8jne er mere f\u00f8lsomme over for lysstyrke end for farve. Du kan selv bevidne dette ved at se p\u00e5 dette billede.<\/p>\n<p><img decoding=\"async\" alt=\"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende\" src=\"\/wp-content\/uploads\/2019\/12\/bf50b7dfd54ebbdb66556bbf5e304090.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Hvis du ikke kan se, at farverne p\u00e5 kvadraterne i den venstre halvdel af billedet <b>A<\/b> og <b>B<\/b> faktisk er ens, s\u00e5 er det helt normalt. Vores hjerne f\u00e5r os til at fokusere mere p\u00e5 lys og skygge end p\u00e5 farve. P\u00e5 den h\u00f8jre side er der en forbindelse af samme farve mellem de markerede kvadrater \u2014 derfor identificerer vi (alts\u00e5 vores hjerne) nemt, at farven faktisk er den samme.<\/p>\n<blockquote><p>Lad os se (forenklet) p\u00e5, hvordan vores \u00f8jne fungerer. \u00d8jet er et komplekst organ, der best\u00e5r af mange dele. Men vi er mest interesseret i tapper og stave. \u00d8jet indeholder cirka 120 millioner stave og 6 millioner tapper.<\/p>\n<p>Lad os betragte farve- og lysopfattelse som separate funktioner af bestemte dele af \u00f8jet (i virkeligheden er det lidt mere kompliceret, men vi forenkler). Stavecellerne er prim\u00e6rt ansvarlige for lysstyrken, mens tappene er ansvarlige for farven. Tappe inddeles i tre typer, afh\u00e6ngigt af det indeholdte pigment: S-tappe (bl\u00e5 farve), M-tappe (gr\u00f8n farve) og L-tappe (r\u00f8d farve).<\/p>\n<p>Da vi har langt flere stave (lys) end tapper (farve), kan vi konkludere, at vi er mere i stand til at skelne mellem overgange mellem m\u00f8rke og lys end mellem farver.<\/p>\n<p><img decoding=\"async\" alt=\"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende\" src=\"\/wp-content\/uploads\/2019\/12\/d344365d45e43b36635ce29baa1132b4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Funktionerne af kontrastf\u00f8lsomhed<\/h2>\n<p>\nForskere inden for eksperimentel psykologi og mange andre omr\u00e5der har udviklet mange teorier om menneskets syn. En af dem kaldes <b>funktionerne af kontrastf\u00f8lsomhed<\/b>. De relaterer sig til rumligt og tempor\u00e6rt lys. Kort sagt handler det om, hvor mange \u00e6ndringer der skal til, f\u00f8r observat\u00f8ren bem\u00e6rker dem. V\u00e6r opm\u00e6rksom p\u00e5 flertalsformen af \"funktion\". Dette skyldes, at vi kan m\u00e5le kontrastf\u00f8lsomhedsfunktioner ikke kun for sort-hvide billeder, men ogs\u00e5 for farvede. Resultaterne af disse eksperimenter viser, at vores \u00f8jne i de fleste tilf\u00e6lde er mere f\u00f8lsomme over for lysstyrke end til farve.<\/p><\/blockquote>\n<p>Da det er kendt, at vi er mere f\u00f8lsomme over for lysstyrken i billedet, kan vi fors\u00f8ge at udnytte dette faktum.<\/p>\n<h2>Farvemodel<\/h2>\n<p>\nVi har f\u00e5et en id\u00e9 om, hvordan man arbejder med farvebilleder ved hj\u00e6lp af RGB-scheme. Der er ogs\u00e5 andre modeller. Der findes en model, der adskiller lysstyrke fra farve, og den kaldes <b>YCbCr<\/b>. I \u00f8vrigt er der ogs\u00e5 andre modeller, der g\u00f8r en lignende opdeling, men vi vil kun se p\u00e5 denne.<\/p>\n<p>I denne farvemodel <b>Y<\/b> repr\u00e6senterer lysstyrken, og der bruges to farvekanaler: <b>Cb<\/b> (m\u00e6ttet bl\u00e5) og <b>Cr<\/b> (dyb r\u00f8d). YCbCr kan f\u00e5s fra RGB, ligesom det er muligt med den omvendte transformation. Ved at bruge denne model kan vi skabe billeder i fuld farve, som vi ser nedenfor:<\/p>\n<p><img decoding=\"async\" alt=\"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende\" src=\"\/wp-content\/uploads\/2019\/12\/e7458471caf7ef071bb0362e96b44f11.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Transformation mellem YCbCr og RGB<\/h2>\n<p>\nNogen vil m\u00e5ske indvende: hvordan er det muligt at f\u00e5 alle farver, hvis gr\u00f8n ikke bruges?<\/p>\n<p>For at besvare dette sp\u00f8rgsm\u00e5l omformer vi RGB til YCbCr. Vi bruger koefficienterne, der er fastlagt i standarden <b>BT.601<\/b>, som anbefales af divisionen <b>ITU-R<\/b>. Denne division definerer standarder for digital video. For eksempel: hvad er 4K? Hvilken billedfrekvens, opl\u00f8sning, farvemodel skal der v\u00e6re?<\/p>\n<p>F\u00f8rst beregner vi lysstyrken. Vi bruger de konstanter, som ITU foresl\u00e5r, og erstatter RGB-v\u00e6rdierne.<\/p>\n<p><b>Y<\/b> = 0.299<b>R<\/b> + 0.587<b>G<\/b> + 0.114<b>B<\/b> <\/p>\n<p>N\u00e5r vi har f\u00e5et lysstyrken, separerer vi den bl\u00e5 og r\u00f8de farve:<\/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>Og vi kan ogs\u00e5 konvertere tilbage og endda f\u00e5 gr\u00f8n ved hj\u00e6lp af 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>Generelt bruger sk\u00e6rme (monitorer, fjernsyn, sk\u00e6rme osv.) kun RGB-modellen. Men denne model kan struktureres p\u00e5 forskellige m\u00e5der:<\/p>\n<p><img decoding=\"async\" alt=\"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende\" src=\"\/wp-content\/uploads\/2019\/12\/8736e59d3a7606494fe6a7718d5b4aa2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Farvesubpr\u00f8ve<\/h2>\n<p>\nMed billedet pr\u00e6senteret som en kombination af lysstyrke og krominans kan vi udnytte den menneskelige syns h\u00f8jere f\u00f8lsomhed over for lysstyrke end farve, hvis vi selektivt fjerner information. Farvesubdiscretisering er en metode til billedkodning, som anvender en lavere opl\u00f8sning for krominansen end for lysstyrken.<\/p>\n<p><img decoding=\"async\" alt=\"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende\" src=\"\/wp-content\/uploads\/2019\/12\/11b5b602ab1374896df296f787932ace.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Hvor meget kan vi tillade at reducere farveskalaen?! Det viser sig, at der allerede findes nogle skemaer, der beskriver, hvordan man h\u00e5ndterer opl\u00f8sning og fusion (Slutfarve = Y + Cb + Cr).<\/p>\n<p>Disse skemaer er kendt som <b>subdiscretiseringssystemer<\/b> og udtrykkes som et 3:1-forhold \u2014 <b>en<\/b>:<b>x<\/b>:<b>y<\/b>, som bestemmer antallet af pr\u00f8ver af lysstyrke- og farveforskelle.<\/p>\n<p><b>en<\/b> \u2014 reference horisontal sampling (normalt lig med 4)<br \/>\n<b>x<\/b> \u2014 antallet af pr\u00f8ver af krominans i den f\u00f8rste r\u00e6kke af pixels (horisontal opl\u00f8sning i forhold til <b>en<\/b>)<br \/>\n<b>y<\/b> \u2014 antallet af \u00e6ndringer i pr\u00f8ver af krominans mellem den f\u00f8rste og anden r\u00e6kke af pixels.<\/p>\n<blockquote><p>Undtagelsen er <b>4<\/b>:<b>1<\/b>:<b>0<\/b>, som sikrer \u00e9n pr\u00f8ve af krominans i hver blok af lysstyrkeopl\u00f8sning 4 med 4.<\/p><\/blockquote>\n<p>De almindelige skemaer, der anvendes i moderne codecs:<\/p>\n<ul>\n<li><b>4<\/b>:<b>4<\/b>:<b>4<\/b> (uden subdiscretisering)<\/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 et eksempel p\u00e5 fusion<\/h3>\n<p>\nDette er et sammensat billede ved hj\u00e6lp af YCbCr 4:2:0. Bem\u00e6rk, at vi kun bruger 12 bit per pixel.<\/p>\n<p><img decoding=\"async\" alt=\"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende\" src=\"\/wp-content\/uploads\/2019\/12\/67e288b0a46fca88452addaef736f4cd.png\" style=\"display:block;margin: 0 auto;\" \/><\/p><\/blockquote>\n<p>Her er det samme billede, kodet med de vigtigste typer farvesubsampling. Den \u00f8verste r\u00e6kke viser det endelige YCbCr, den nederste r\u00e6kke viser farvel\u00f8shed. Meget anst\u00e6ndige resultater, taget de sm\u00e5 kvalitets tab i betragtning.<\/p>\n<p><img decoding=\"async\" alt=\"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende\" src=\"\/wp-content\/uploads\/2019\/12\/fb54b6fcdbbb63cb19d19b89df9f6d85.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHusk, vi beregnede 278 GB diskplads til at gemme en times video med en opl\u00f8sning p\u00e5 720p og 30 billeder per sekund? Ved at bruge YCbCr 4:2:0 vil dette st\u00f8rrelse halveres til 139 GB. Indtil videre er vi stadig langt fra et acceptabelt resultat.<\/p>\n<p>Du kan selv f\u00e5 histogrammet YCbCr ved hj\u00e6lp af FFmpeg. I dette billede dominerer bl\u00e5t over r\u00f8dt, hvilket tydeligt kan ses i det faktiske histogram.<\/p>\n<p><img decoding=\"async\" alt=\"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende\" src=\"\/wp-content\/uploads\/2019\/12\/6e74cb646cabc77079aea7eaee846fd1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<blockquote>\n<h4>Farvelighed, lysstyrke, farveskala - videoreview<\/h4>\n<p>\nDette fantastiske video anbefales til visning. Her forklares, hvad lysstyrke er, og i det hele taget s\u00e6ttes der punktum ved <i>\u00f8<\/i> om lysstyrke og farve.<\/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=\"Afspil video\" 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>Typer af rammer<\/h2>\n<p>\nLad os forts\u00e6tte. Lad os pr\u00f8ve at eliminere tidsm\u00e6ssig redundans. Men f\u00f8rst lad os definere et grundl\u00e6ggende terminologi. Lad os antage, at vi har en film med 30 billeder per sekund, her er de f\u00f8rste 4 billeder:<\/p>\n<p><img decoding=\"async\" alt=\"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende\" src=\"\/wp-content\/uploads\/2019\/12\/103dc714d756d014e1d2c1bfb33751b1.png\" style=\"display:block;margin: 0 auto;\" \/> <img decoding=\"async\" alt=\"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende\" src=\"\/wp-content\/uploads\/2019\/12\/fdd7d89b884b2f77fea7c386c0d29fef.png\" style=\"display:block;margin: 0 auto;\" \/> <img decoding=\"async\" alt=\"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende\" src=\"\/wp-content\/uploads\/2019\/12\/61746b829025d5abcb7db072a54400c0.png\" style=\"display:block;margin: 0 auto;\" \/> <img decoding=\"async\" alt=\"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende\" src=\"\/wp-content\/uploads\/2019\/12\/c65ee526ec4539996f6bb94463d0cf2d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVi kan se mange gentagelser i billederne: For eksempel den bl\u00e5 baggrund, der ikke \u00e6ndrer sig fra billede til billede. For at l\u00f8se dette problem kan vi abstrakt klassificere dem som tre typer billeder.<\/p>\n<h3>I-billede (<b>I<\/b>ntro Frame)<\/h3>\n<p>\nI-billede (referencebillede, n\u00f8glebillede, internt billede) er selvst\u00e6ndigt. Uanset hvad der skal visualiseres, er I-billedet i bund og grund et statisk billede. Det f\u00f8rste billede er normalt et I-billede, men vi vil ogs\u00e5 j\u00e6vnligt se I-billeder blandt langt fra de f\u00f8rste billeder.<\/p>\n<p><img decoding=\"async\" alt=\"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende\" src=\"\/wp-content\/uploads\/2019\/12\/44f2a7d6154f1a40fdb1174a443a9c3f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>P-billede (<b>P<\/b>redicted Frame)<\/h3>\n<p>\nP-billede (forudsigeligt billede) bruger fordelene ved, at det n\u00e6sten altid nuv\u00e6rende billede kan genskabes ved hj\u00e6lp af det tidligere billede. For eksempel er den eneste \u00e6ndring i det andet billede bolden, der bev\u00e6ger sig fremad. Vi kan f\u00e5 billede 2 ved blot at \u00e6ndre lidt p\u00e5 billede 1, kun ved at bruge forskellen mellem disse billeder. For at konstruere billede 2 henviser vi til det forudg\u00e5ende billede 1.<\/p>\n<p><img decoding=\"async\" alt=\"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende\" src=\"\/wp-content\/uploads\/2019\/12\/1245857fd8406a24da02d0c71beb7b4d.png\" style=\"display:block;margin: 0 auto;\" \/> \u2190 <img decoding=\"async\" alt=\"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende\" src=\"\/wp-content\/uploads\/2019\/12\/ab8e8f6020825830c4d03004528af1a4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>B-billede (<b>B<\/b>i-predictive Frame)<\/h3>\n<p>\nHvad med links ikke kun til fortiden, men ogs\u00e5 til fremtidige rammer for at opn\u00e5 endnu bedre kompression?! Det er i h\u00f8j grad B-rammen (to-vejs ramme).<\/p>\n<p><img decoding=\"async\" alt=\"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende\" src=\"\/wp-content\/uploads\/2019\/12\/f28d4e02836e9b37f0f21937dd1ba660.png\" style=\"display:block;margin: 0 auto;\" \/> \u2190 <img decoding=\"async\" alt=\"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende\" src=\"\/wp-content\/uploads\/2019\/12\/7a6b3a329db155c94a91f58a99874bb9.png\" style=\"display:block;margin: 0 auto;\" \/> \u2192 <img decoding=\"async\" alt=\"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende\" src=\"\/wp-content\/uploads\/2019\/12\/09df4bc5a35df89575c7b51349be4340.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Mellemliggende output<\/h2>\n<p>\nDisse typer rammer bruges til at sikre den mest optimale kompression. Vi vil unders\u00f8ge, hvordan dette sker i n\u00e6ste afsnit. Men f\u00f8rst bem\u00e6rkes det, at den mest \"omkostningstunge\" i forhold til det beslagte hukommelse er I-rammen, P-rammen er m\u00e6rkbart billigere, mens den mest rentable mulighed for video er B-rammen.<\/p>\n<p><img decoding=\"async\" alt=\"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende\" src=\"\/wp-content\/uploads\/2019\/12\/97b9177ffff302881deb1c86ce416166.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Tidsm\u00e6ssig redundans (inter-ramme forudsigelse)<\/h2>\n<p>\nLad os se p\u00e5 hvilke muligheder vi har for at minimere tilbagevendende data over tid. Denne type redundans h\u00e5ndteres gennem metoder til gensidig forudsigelse.<\/p>\n<p>Vi vil fors\u00f8ge at bruge s\u00e5 f\u00e5 bits som muligt til kodning af sekvenserne af rammer 0 og 1.<\/p>\n<p><img decoding=\"async\" alt=\"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende\" src=\"\/wp-content\/uploads\/2019\/12\/f0dc2df33a5297622a77a4ca09b19af8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVi kan udf\u00f8re <b>subtraktion<\/b>, vi tr\u00e6kker simpelthen ramme 1 fra ramme 0. Vi f\u00e5r ramme 1, kun ved at bruge forskellen mellem den og den foreg\u00e5ende ramme, og koder reelt kun det resulterende overskud.<\/p>\n<p><img decoding=\"async\" alt=\"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende\" src=\"\/wp-content\/uploads\/2019\/12\/c14981c3a3a0459a02620805c4a0f2db.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMen hvad hvis jeg fortalte dig, at der er en endnu bedre metode, der bruger endnu f\u00e6rre bits?! F\u00f8rst lad os opdele ramme 0 i et klart gitter best\u00e5ende af blokke. Derefter vil vi fors\u00f8ge at matche blokkene fra ramme 0 med ramme 1. Med andre ord vil vi vurdere bev\u00e6gelsen mellem rammerne.<\/p>\n<blockquote><p> Fra Wikipedia \u2014 <b>blokbaseret bev\u00e6gelseskompensation<\/b><\/p>\n<p>Blokbaseret bev\u00e6gelseskompensation opdeler den aktuelle ramme i ikke-overlappende blokke, og bev\u00e6gelsesvektoren angiver oprindelsen af blokkene (en almindelig misforst\u00e5else er, at <i>den foreg\u00e5ende<\/i> ramme opdeles i ikke-overlappende blokke, og bev\u00e6gelsesvektorerne angiver, hvor disse blokke bev\u00e6ger sig hen. I realiteten er det omvendt \u2014 det er ikke den foreg\u00e5ende ramme, men den efterf\u00f8lgende, der analyseres, hvor det afklares, ikke hvor blokkene bev\u00e6ger sig hen, men hvor de kom fra). Normalt overlapper de oprindelige blokke i den oprindelige ramme. Nogle video kompressionsalgoritmer samler den aktuelle ramme fra dele af ikke blot \u00e9n, men flere tidligere transmitterede rammer.<\/p><\/blockquote>\n<p><img decoding=\"async\" alt=\"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende\" src=\"\/wp-content\/uploads\/2019\/12\/0c34e84b318be2d250bade240fad80ed.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nUnder vurderingen ser vi, at bolden har flyttet sig fra (<b>x<\/b>=0, <b>y<\/b>=25) til (<b>x<\/b>=6, <b>y<\/b>=26), v\u00e6rdier <b>x<\/b> og <b>y<\/b> definerer retningen for bev\u00e6gelsen. Endnu et skridt, vi kan tage for at bevare bits, er at kode forskellen i bev\u00e6gelsesvektorer mellem den seneste position af blokken og den forventede, s\u00e5 den endelige bev\u00e6gelsesvektor vil v\u00e6re (x=6-0=6, y=26-25=1).<\/p>\n<p>I en virkelig situation ville denne bold v\u00e6re delt op i <b>n<\/b> blokke, men det \u00e6ndrer ikke essensen af sagen.<\/p>\n<p>Objekterne i billedet bev\u00e6ger sig i tre dimensioner, s\u00e5 n\u00e5r bolden bev\u00e6ger sig, kan den se mindre ud (eller st\u00f8rre, hvis den bev\u00e6ger sig mod beskueren). Det er normalt, at der ikke vil v\u00e6re en perfekt overensstemmelse mellem blokkene. Her er et overordnet syn p\u00e5 vores vurdering og det faktiske billede.<\/p>\n<p><img decoding=\"async\" alt=\"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende\" src=\"\/wp-content\/uploads\/2019\/12\/0fb4737e1076221e786fd6a78357422d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMen vi ser, at n\u00e5r vi anvender bev\u00e6gelsesvurderingen, er dataene til kodning m\u00e6rkbart f\u00e6rre end ved brug af en enklere metode til beregning af delta mellem rammer.<\/p>\n<p><img decoding=\"async\" alt=\"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende\" src=\"\/wp-content\/uploads\/2019\/12\/319507ad7197b7693efff11dcd7e4df4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Hvordan vil den faktiske bev\u00e6gelseskompensation se ud<\/h2>\n<p>\nDenne metode anvendes straks p\u00e5 alle blokke. Oftest vil vores hypotetiske bev\u00e6gende bold v\u00e6re delt op i flere blokke p\u00e5 \u00e9n gang.<\/p>\n<p><img decoding=\"async\" alt=\"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende\" src=\"\/wp-content\/uploads\/2019\/12\/978b5612dbd164d2865ccdec4474fdb4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDu kan selv udforske disse koncepter ved at bruge <noindex><a rel=\"nofollow\" href=\"https:\/\/jupyter.org\/\">Jupyter<\/a><\/noindex>.<\/p>\n<p>For at se bev\u00e6gelsesvektorer kan du oprette en video med ekstern forudsigelse ved hj\u00e6lp af <noindex><a rel=\"nofollow\" href=\"https:\/\/www.ffmpeg.org\/\">ffmpeg<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende\" src=\"\/wp-content\/uploads\/2019\/12\/056d6dfd2c18baaabc70655edfe3d609.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDer er ogs\u00e5 mulighed for at bruge <noindex><a rel=\"nofollow\" href=\"https:\/\/software.intel.com\/en-us\/video-pro-analyzer\">Intel Video Pro Analyzer<\/a><\/noindex> (det er betalingsbaseret, men der er en gratis pr\u00f8veversion, der kun er begr\u00e6nset til de f\u00f8rste ti billeder).<\/p>\n<p><img decoding=\"async\" alt=\"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende\" src=\"\/wp-content\/uploads\/2019\/12\/5e28ccc6e6101b8d613f94d326a685f2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Rumlig redundans (intern forudsigelse)<\/h2>\n<p>\nHvis vi analyserer hver ramme i videoen, vil vi opdage mange sammenh\u00e6ngende omr\u00e5der.<\/p>\n<p><img decoding=\"async\" alt=\"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende\" src=\"\/wp-content\/uploads\/2019\/12\/24bff6d64704cf0c8e1010832ea8f6ea.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLad os tage dette eksempel. Denne scene best\u00e5r for det meste af bl\u00e5 og hvide farver.<\/p>\n<p><img decoding=\"async\" alt=\"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende\" src=\"\/wp-content\/uploads\/2019\/12\/12edf221c61e064674ad363db9f3342c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDette er I-rammen. Tidligere rammer kan vi ikke bruge til forudsigelse, men vi kan komprimere den. Vi koder udvalget af den r\u00f8de blok. Hvis vi ser p\u00e5 dens naboer, bem\u00e6rker vi, at der er nogle farvetendenser omkring den.<\/p>\n<p><img decoding=\"async\" alt=\"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende\" src=\"\/wp-content\/uploads\/2019\/12\/b67b3fba3d1792db81d0f1cb52c7c29b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVi antager, at farverne i rammen spreder sig vertikalt. Hvilket betyder, at farven p\u00e5 de ukendte pixels vil indeholde v\u00e6rdier fra dens naboer.<\/p>\n<p><img decoding=\"async\" alt=\"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende\" src=\"\/wp-content\/uploads\/2019\/12\/6fe8f6ed7ebc66940fca27b8cd2c5915.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nS\u00e5dan en forudsigelse kan vise sig at v\u00e6re fejlagtig. Nettop af den grund er det n\u00f8dvendigt at anvende denne metode (intern forudsigelse), og derefter tr\u00e6kke de faktiske v\u00e6rdier fra. Dette vil give os en restblok, som vil resultere i en meget mere komprimeret matrix sammenlignet med originalen.<\/p>\n<p><img decoding=\"async\" alt=\"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende\" src=\"\/wp-content\/uploads\/2019\/12\/52fd77c96aa8445af12fca468c72c844.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHvis du \u00f8nsker at \u00f8ve dig med interne forudsigelser, kan du oprette en video med makrobalkerne og deres forudsigelser ved hj\u00e6lp af ffmpeg. For at forst\u00e5 betydningen af hver blokkens farve, bliver du n\u00f8dt til at l\u00e6se ffmpeg-dokumentationen.<\/p>\n<p><img decoding=\"async\" alt=\"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende\" src=\"\/wp-content\/uploads\/2019\/12\/0399473c538a550f9317fd59c347a565.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEller du kan bruge Intel Video Pro Analyzer (som jeg allerede har n\u00e6vnt ovenfor, i den gratis pr\u00f8veversion er der en begr\u00e6nsning p\u00e5 de f\u00f8rste 10 billeder, men det vil v\u00e6re tilstr\u00e6kkeligt i starten).<\/p>\n<p><img decoding=\"async\" alt=\"Hvordan en videokoder fungerer. Del 1. Grundl\u00e6ggende\" src=\"\/wp-content\/uploads\/2019\/12\/abcdf1eb4b7dbdcf2a7a64154f3052ba.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Anden del:<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/480430\/\"> Principperne for videokodek<\/a><\/noindex><\/h3>\n<p>Kilde: <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\/da\/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=\"da_DK\" \/>\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\/da\/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\udd47S\u00e5dan fungerer videokodeken. Del 1. Grundl\u00e6ggende | ProHoster","description":"Anden del: Principperne for videokodeken Enhver rastergrafik kan repr\u00e6senteres som.","canonical_url":"https:\/\/prohoster.info\/da\/blog\/news\/kak-rabotaet-videokodek-chast-1-osnovy","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/54312","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=54312"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/54312\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=54312"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=54312"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=54312"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}