{"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\/es\/blog\/news\/kak-rabotaet-videokodek-chast-1-osnovy","title":{"rendered":"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h3>Parte dos:<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/480430\/\"> Principios de funcionamiento del c\u00f3dec de video<\/a><\/noindex><\/h3>\n<p>Cualquier imagen rasterizada <b>se puede representar como<\/b> una matriz bidimensional <b>. Cuando se habla de colores, se puede desarrollar la idea considerando la imagen como una<\/b>matriz tridimensional <b>, donde dimensiones adicionales se utilizan para almacenar datos sobre cada uno de los colores.<\/b>Si consideramos el color final como una combinaci\u00f3n de los llamados colores primarios (rojo, verde y azul), en nuestra matriz tridimensional definimos tres planos: el primero para el rojo, el segundo para el verde y el \u00faltimo para el azul.<\/p>\n<p>Llamaremos a cada punto en esta matriz un p\u00edxel (elemento de la imagen). Cada p\u00edxel contiene informaci\u00f3n sobre la intensidad (generalmente en forma de valor num\u00e9rico) de cada color. Por ejemplo,<br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/481418\/\"><img decoding=\"async\" alt=\"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/ce37dd683a4c3ed434dae1d488646716.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\nun p\u00edxel rojo <b>significa que contiene 0 de color verde, 0 de color azul y el m\u00e1ximo de rojo.<\/b> Un p\u00edxel de color rosa <b>puede ser formado mediante una combinaci\u00f3n de los tres colores. Usando un rango num\u00e9rico de 0 a 255, un p\u00edxel rosa se define como<\/b> Rojo = 255 <b>Verde = 192<\/b>, <b>Azul = 203<\/b> y <b>El art\u00edculo fue publicado con el apoyo de la empresa 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 - desarrollo web\"><img decoding=\"async\" alt=\"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/e5063b9a32248767cb0702e7aa2e7f9e.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br clear=\"right\"><br \/>\nDesarrollamos<\/p>\n<p>aplicaciones para videovigilancia, video en streaming <noindex><a rel=\"nofollow\" href=\"https:\/\/www.edsd.ru\/ru\/portfolio\/tehnologiya\/video\">grabaci\u00f3n de video en la sala de operaciones<\/a><\/noindex>, as\u00ed como <noindex><a rel=\"nofollow\" href=\"https:\/\/www.edsd.ru\/videozapis-v-bolnichnoj-operacionnoj-s-vozmozhnostyu-obsuzhdeniya-na-forume\">M\u00e9todos alternativos de codificaci\u00f3n de im\u00e1genes a color<\/a><\/noindex>.<\/p><\/blockquote>\n<h3>Para representar los colores que componen una imagen, hay muchos otros modelos disponibles. Por ejemplo, se puede utilizar una paleta indexada, donde solo se requiere un byte para representar cada p\u00edxel, en lugar de los tres necesarios al usar el modelo RGB. En tal modelo se puede usar una matriz 2D en lugar de una matriz 3D para representar cada color. Esto ahorra memoria, pero ofrece una gama de colores m\u00e1s limitada.<\/h3>\n<p>\nRGB<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/573a39c53527b4ec0403f019becf2d22.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Por ejemplo, observe esta imagen a continuaci\u00f3n. La primera cara est\u00e1 completamente coloreada. Las otras son los planos rojo, verde y azul (la intensidad de los colores correspondientes se muestra en escala de grises).<\/h2>\n<p>Podemos ver que los matices de rojo en el original estar\u00e1n en los mismos lugares donde se observan las partes m\u00e1s brillantes de la segunda cara. Mientras que la contribuci\u00f3n del color azul se puede ver principalmente solo en los ojos de Mario (la \u00faltima cara) y en elementos de su vestimenta. Tenga en cuenta d\u00f3nde las tres capas de color contribuyen menos (las partes m\u00e1s oscuras de las im\u00e1genes): esto es en los bigotes de Mario.<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/cf1f802d4381e062005490f5f9f26911.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nObservamos que los matices de rojo en el original estar\u00e1n en los mismos lugares donde se observan las partes m\u00e1s brillantes del segundo personaje. Mientras que la contribuci\u00f3n del color azul se puede ver principalmente solo en los ojos de Mario (el \u00faltimo personaje) y en los elementos de su vestimenta. Presta atenci\u00f3n a d\u00f3nde las tres superficies de color aportan menos (las partes m\u00e1s oscuras de las im\u00e1genes): esto est\u00e1 en los bigotes de Mario.<\/p>\n<p>Para almacenar la intensidad de cada color se requiere una cierta cantidad de bits, esta cantidad se llama <b>profundidad de bits<\/b>. Supongamos que se utilizan 8 bits (basado en un valor entre 0 y 255) para un solo plano de color. Entonces tenemos una profundidad de color de 24 bits (8 bits * 3 planos R\/G\/B).<\/p>\n<p>Otra propiedad de la imagen es <b>la resoluci\u00f3n<\/b>, que representa la cantidad de p\u00edxeles en una dimensi\u00f3n. A menudo se indica como <b>ancho \u00d7 alto<\/b>, como se muestra a continuaci\u00f3n en la imagen de ejemplo 4 por 4.<br \/>\n<img decoding=\"async\" alt=\"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/51a4d948e6d44e4058e346fdbaf9d6c2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOtra propiedad que tratamos al trabajar con im\u00e1genes\/video es <b>la relaci\u00f3n de aspecto<\/b>, que describe la relaci\u00f3n proporcional t\u00edpica entre el ancho y la altura de la imagen o del p\u00edxel.<\/p>\n<p>Cuando se dice que una pel\u00edcula o imagen tiene un tama\u00f1o de 16 por 9, generalmente se refiere a <b>la relaci\u00f3n de aspecto de la pantalla<\/b> (<b>DAR<\/b> \u2014 de <i>Display Aspect Ratio<\/i>). Sin embargo, a veces pueden haber diferentes formas para p\u00edxeles individuales; en este caso se habla de <b>la relaci\u00f3n de p\u00edxeles<\/b> (<b>PAR<\/b> \u2014 de <i>Pixel Aspect Ratio<\/i>).<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/1158c6e98247a1a1084440969f9400c6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/a610f0f77bdb245c05799d3de4147302.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<blockquote><p>Consejo para la ama de casa: <b>DVD<\/b> corresponde a <b>DAR 4 por 3<\/b><\/p>\n<p>Aunque la resoluci\u00f3n real de un DVD es de 704\u00d7480, mantiene la relaci\u00f3n de aspecto 4:3, ya que el PAR es 10:11 (704\u00d710 \/ 480\u00d711).<\/p><\/blockquote>\n<p>\nY, por \u00faltimo, podemos definir <b>videos<\/b> como una secuencia de <b>n<\/b> fotogramas en un periodo <b>de tiempo<\/b>, que puede considerarse como una dimensi\u00f3n adicional. Entonces, eso es la frecuencia de fotogramas o el n\u00famero de fotogramas por segundo ( <b>n<\/b> FPS<b>Frames per Second<\/b> \u2014 de <i>La cantidad de bits por segundo necesaria para mostrar video es su<\/i>).<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/f940932bbd66aa361c7966f8b44ed431.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\ntasa de transmisi\u00f3n <b>bitrate<\/b> \u2014 <b>bitrate = ancho * altura * profundidad de bits * fotogramas por segundo<\/b>.<\/p>\n<blockquote><p>Por ejemplo, para un video a 30 fotogramas por segundo, 24 bits por p\u00edxel, con una resoluci\u00f3n de 480\u00d7240 se requerir\u00e1n 82,944,000 bits por segundo o 82,944 Mbps (30x480x240x24) \u2014 pero esto es sin aplicar ning\u00fan m\u00e9todo de compresi\u00f3n.<\/p><\/blockquote>\n<p>\nPor ejemplo, para un video a 30 cuadros por segundo, con 24 bits por p\u00edxel y una resoluci\u00f3n de 480\u00d7240, se requerir\u00e1n 82,944,000 bits por segundo o 82,944 Mbps (30x480x240x24) \u2014 pero esto es si no se utiliza ninguno de los m\u00e9todos de compresi\u00f3n.<\/p>\n<p>es casi constante <i>, se llama<\/i>tasa de transmisi\u00f3n constante <b>CBR<\/b> (<b>constant bit rate<\/b> \u2014 de <i>). Pero tambi\u00e9n puede variar, en ese caso se llama<\/i>tasa de transmisi\u00f3n variable <b>VBR<\/b> (<b>variable bit rate<\/b> \u2014 de <i>Este gr\u00e1fico muestra un VBR limitado, cuando se utilizan no demasiados bits en el caso de un fotograma completamente negro.<\/i>).<\/p>\n<p>Inicialmente, los ingenieros desarrollaron un m\u00e9todo para duplicar la frecuencia de fotogramas percibida en la pantalla de video sin utilizar ancho de banda adicional. Este m\u00e9todo es conocido como<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/f307dde8da9ef1e017646ebcad0c4062.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nvideo entrelazado <b>video entrelazado<\/b>Principalmente, env\u00eda la mitad de la pantalla en el primer \"cuadro\", y la otra mitad en el siguiente \"cuadro\".<\/p>\n<p>Actualmente, la visualizaci\u00f3n de escenas se realiza principalmente utilizando <b>tecnolog\u00eda de escaneo progresivo.<\/b>Es un m\u00e9todo de visualizaci\u00f3n, almacenamiento o transmisi\u00f3n de im\u00e1genes en movimiento, en el que todas las l\u00edneas de cada cuadro se dibujan secuencialmente.<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/434afd828d803ec1e4c87a3827c07dde.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00a1Bien! Ahora sabemos c\u00f3mo se representa una imagen en forma digital, c\u00f3mo se organizan sus colores, cu\u00e1ntos bits por segundo gastamos para mostrar video, ya sea con una tasa de bits constante (CBR) o variable (VBR). Conocemos la resoluci\u00f3n establecida utilizando una frecuencia de cuadros determinada, y hemos aprendido muchos otros t\u00e9rminos, como video entrelazado, PAR y otros.<\/p>\n<h2>Eliminaci\u00f3n de redundancias.<\/h2>\n<p>\nEs conocido que el video sin compresi\u00f3n no es utilizables. Un video de una hora con resoluci\u00f3n 720p y 30 cuadros por segundo ocupar\u00eda 278 GB. Este valor se obtiene multiplicando 1280 x 720 x 24 x 30 x 3600 (anchura, altura, bits por p\u00edxel, FPS y tiempo en segundos).<\/p>\n<p>Uso <b>algoritmos de compresi\u00f3n sin p\u00e9rdida<\/b>, como DEFLATE (utilizado en PKZIP, Gzip y PNG), no proporciona una reducci\u00f3n suficiente en el ancho de banda requerido. Por lo tanto, hay que buscar otras formas de comprimir video.<\/p>\n<p>Para esto, se pueden utilizar las caracter\u00edsticas de nuestra visi\u00f3n. Nosotros diferenciamos mejor la luminosidad que los colores. El video es un conjunto de im\u00e1genes secuenciales que se repiten con el tiempo. Las diferencias entre cuadros adyacentes de una misma escena son peque\u00f1as. Adem\u00e1s, cada cuadro contiene muchas \u00e1reas que utilizan el mismo (o similar) color.<\/p>\n<h2>Color, luminosidad y nuestros ojos.<\/h2>\n<p>\nNuestros ojos son m\u00e1s sensibles a la luminosidad que al color. Puedes comprobarlo t\u00fa mismo mirando esta imagen.<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/bf50b7dfd54ebbdb66556bbf5e304090.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Si no ves que en la mitad izquierda de la imagen los colores de los cuadros <b>A<\/b> y <b>B<\/b> son en realidad id\u00e9nticos, est\u00e1 bien. Nuestro cerebro nos hace prestar m\u00e1s atenci\u00f3n a la luz y sombra, que al color. A la derecha, entre los cuadros marcados hay un puente del mismo color, por lo que nosotros (es decir, nuestro cerebro) determinamos f\u00e1cilmente que, en realidad, ah\u00ed hay un mismo color.<\/p>\n<blockquote><p>Veamos (simplificadamente) c\u00f3mo funcionan nuestros ojos. El ojo es un \u00f3rgano complejo, compuesto por muchas partes. Sin embargo, lo que m\u00e1s nos interesa son los conos y los bastones. El ojo contiene alrededor de 120 millones de bastones y 6 millones de conos.<\/p>\n<p>Consideremos la percepci\u00f3n del color y el brillo como funciones separadas de ciertas partes del ojo (en realidad, es algo m\u00e1s complejo, pero lo simplificaremos). Las c\u00e9lulas de los bastones, en su mayor parte, son responsables del brillo, mientras que las c\u00e9lulas de los conos se encargan del color. Los conos se dividen en tres tipos, seg\u00fan el pigmento que contienen: conos S (color azul), conos M (color verde) y conos L (color rojo).<\/p>\n<p>Dado que tenemos muchas m\u00e1s c\u00e9lulas de los bastones (brillo) que de los conos (color), se puede concluir que somos m\u00e1s capaces de distinguir transiciones entre la oscuridad y la luz que entre colores.<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/d344365d45e43b36635ce29baa1132b4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Funciones de sensibilidad al contraste<\/h2>\n<p>\nInvestigadores de la psicolog\u00eda experimental y de muchos otros campos han desarrollado numerosas teor\u00edas sobre la visi\u00f3n humana. Y una de ellas se llama <b>funciones de sensibilidad al contraste<\/b>. Est\u00e1n relacionadas con la iluminaci\u00f3n espacial y temporal. En resumen, se trata de cu\u00e1ntos cambios son necesarios para que el observador los note. Nota que la palabra 'funci\u00f3n' est\u00e1 en plural. Esto se debe a que podemos medir las funciones de sensibilidad al contraste no solo hacia im\u00e1genes en blanco y negro, sino tambi\u00e9n hacia im\u00e1genes en color. Los resultados de estos experimentos muestran que, en la mayor\u00eda de los casos, nuestros ojos son m\u00e1s sensibles al brillo que al color.<\/p><\/blockquote>\n<p>Dado que sabemos que somos m\u00e1s sensibles al brillo de la imagen, se puede intentar utilizar este hecho.<\/p>\n<h2>Modelo de color<\/h2>\n<p>\nHemos aprendido un poco sobre c\u00f3mo trabajar con im\u00e1genes en color, utilizando el esquema RGB. Existen otros modelos. Hay un modelo que separa el brillo de la cromaticidad y se conoce como <b>YCbCr<\/b>. Por cierto, hay otros modelos que hacen una separaci\u00f3n similar, pero solo consideraremos este.<\/p>\n<p>En este modelo de color <b>Y<\/b> \u2014 representa el brillo, y se utilizan dos canales de color: <b>Cb<\/b> (azul saturado) y <b>Cr<\/b> (rojo intenso). YCbCr se puede obtener de RGB, as\u00ed como tambi\u00e9n es posible la conversi\u00f3n inversa. Usando este modelo, podemos crear im\u00e1genes a todo color, como se ve a continuaci\u00f3n:<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/e7458471caf7ef071bb0362e96b44f11.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Conversi\u00f3n entre YCbCr y RGB<\/h2>\n<p>\nAlguien objetar\u00e1: \u00bfc\u00f3mo es posible obtener todos los colores si no se utiliza el verde?<\/p>\n<p>Para responder a esta pregunta, convertiremos RGB a YCbCr. Usaremos los coeficientes establecidos en la norma <b>BT.601<\/b>, que fue recomendada por la divisi\u00f3n <b>ITU-R<\/b>. Esta divisi\u00f3n define los est\u00e1ndares para video digital. Por ejemplo: \u00bfqu\u00e9 es 4K? \u00bfCu\u00e1les deber\u00edan ser la tasa de fotogramas, la resoluci\u00f3n, el modelo de color?<\/p>\n<p>Primero, calcularemos el brillo. Usaremos las constantes propuestas por la UIT y sustituiremos los valores de 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>Despu\u00e9s de obtener el brillo, separaremos el color azul y rojo:<\/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>Y tambi\u00e9n podemos convertirlo de nuevo e incluso obtener verde usando 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>Por lo general, las pantallas (monitores, televisores, pantallas, etc.) utilizan solo el modelo RGB. Pero este modelo puede organizarse de diferentes maneras:<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/8736e59d3a7606494fe6a7718d5b4aa2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Submuestreo de color<\/h2>\n<p>\nCon la imagen representada como una combinaci\u00f3n de brillo y cromaticidad, podemos aprovechar la mayor sensibilidad del sistema visual humano al brillo que a la cromaticidad si eliminamos selectivamente informaci\u00f3n. La submuestreo de color es un m\u00e9todo de codificaci\u00f3n de im\u00e1genes que utiliza menor resoluci\u00f3n para la cromaticidad que para el brillo.<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/11b5b602ab1374896df296f787932ace.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\u00bfCu\u00e1nto se puede reducir la resoluci\u00f3n de cromaticidad? \u00a1Resulta que ya existen algunos esquemas que describen c\u00f3mo manejar la resoluci\u00f3n y la fusi\u00f3n (Color final = Y + Cb + Cr).<\/p>\n<p>Estos esquemas son conocidos como <b>sistemas de submuestreo<\/b> y se expresan en forma de una relaci\u00f3n de 3 a 1 \u2014 <b>a<\/b>:<b>x<\/b>:<b>y<\/b>, que determina el n\u00famero de muestras de se\u00f1al de luminancia y de diferencia de color.<\/p>\n<p><b>a<\/b> \u2014 est\u00e1ndar de muestreo horizontal (generalmente igual a 4)<br \/>\n<b>x<\/b> \u2014 n\u00famero de muestras de cromaticidad en la primera fila de p\u00edxeles (resoluci\u00f3n horizontal en relaci\u00f3n a <b>a<\/b>)<br \/>\n<b>y<\/b> \u2014 n\u00famero de cambios en las muestras de cromaticidad entre la primera y segunda fila de p\u00edxeles.<\/p>\n<blockquote><p>La excepci\u00f3n es <b>4<\/b>:<b>1<\/b>:<b>0<\/b>, que proporciona una muestra de cromaticidad en cada bloque de resoluci\u00f3n de luminancia 4 por 4.<\/p><\/blockquote>\n<p>Los esquemas comunes utilizados en los c\u00f3decs modernos:<\/p>\n<ul>\n<li><b>4<\/b>:<b>4<\/b>:<b>4<\/b> (sin submuestreo)<\/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 un ejemplo de fusi\u00f3n<\/h3>\n<p>\nEste es un fragmento de imagen combinado utilizando YCbCr 4:2:0. Tenga en cuenta que solo usamos 12 bits por p\u00edxel.<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/67e288b0a46fca88452addaef736f4cd.png\" style=\"display:block;margin: 0 auto;\" \/><\/p><\/blockquote>\n<p>As\u00ed es como se ve la misma imagen codificada en los principales tipos de subsampled de color. La primera fila es el YCbCr final, la fila inferior muestra la resoluci\u00f3n del color. Resultados bastante decentes, considerando las peque\u00f1as p\u00e9rdidas de calidad.<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/fb54b6fcdbbb63cb19d19b89df9f6d85.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00bfRecuerdas que contabilizamos 278 GB de espacio en disco para almacenar un archivo de video de una hora de duraci\u00f3n con una resoluci\u00f3n de 720p y 30 cuadros por segundo? Si utilizamos YCbCr 4:2:0, entonces este tama\u00f1o se reducir\u00e1 a la mitad: 139 GB. A\u00fan estamos lejos de un resultado aceptable.<\/p>\n<p>Puedes obtener un histograma YCbCr por ti mismo utilizando FFmpeg. En esta imagen, el azul predomina sobre el rojo, lo cual es evidente en el propio histograma.<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/6e74cb646cabc77079aea7eaee846fd1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<blockquote>\n<h4>Colorimetr\u00eda, brillo, gama de colores \u2014 video rese\u00f1a<\/h4>\n<p>\nTe recomiendo ver este incre\u00edble video. Aqu\u00ed se explica qu\u00e9 es el brillo y se aclaran todos los puntos sobre <i>el brillo y el color.<\/i> Tipos de cuadros<\/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=\"Reproducir 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>Sigamos adelante. Intentaremos eliminar la redundancia temporal. Pero primero, definamos cierta terminolog\u00eda b\u00e1sica. Supongamos que tenemos una pel\u00edcula con 30 cuadros por segundo, aqu\u00ed est\u00e1n sus primeros 4 cuadros:<\/h2>\n<p>\nPodemos ver muchas repeticiones en los cuadros: por ejemplo, un fondo azul que no cambia de cuadro a cuadro. Para abordar este problema, podemos clasificar abstractamente los cuadros en tres tipos.<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/103dc714d756d014e1d2c1bfb33751b1.png\" style=\"display:block;margin: 0 auto;\" \/> <img decoding=\"async\" alt=\"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/fdd7d89b884b2f77fea7c386c0d29fef.png\" style=\"display:block;margin: 0 auto;\" \/> <img decoding=\"async\" alt=\"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/61746b829025d5abcb7db072a54400c0.png\" style=\"display:block;margin: 0 auto;\" \/> <img decoding=\"async\" alt=\"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/c65ee526ec4539996f6bb94463d0cf2d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCuadro I (<\/p>\n<h3>ntro Frame)<b>I<\/b>El cuadro I (cuadro clave, cuadro de referencia, cuadro interno) es aut\u00f3nomo. Independientemente de lo que se necesite visualizar, un cuadro I es, en esencia, una fotograf\u00eda est\u00e1tica. El primer cuadro suele ser un cuadro I, sin embargo, vamos a observar regularmente cuadros I incluso entre los que no son los primeros.<\/h3>\n<p>\nCuadro P (<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/44f2a7d6154f1a40fdb1174a443a9c3f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>redicted Frame)<b>P<\/b>El cuadro P (cuadro predecido) aprovecha el hecho de que casi siempre la imagen actual puede ser reproducida utilizando el cuadro anterior. Por ejemplo, en el segundo cuadro, el \u00fanico cambio es el bal\u00f3n que se mueve hacia adelante. Podemos obtener el cuadro 2 simplemente modificando un poco el cuadro 1, utilizando solo la diferencia entre estos cuadros. Para construir el cuadro 2, nos referimos al cuadro anterior, el cuadro 1.<\/h3>\n<p>\n\u2190<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/1245857fd8406a24da02d0c71beb7b4d.png\" style=\"display:block;margin: 0 auto;\" \/> Cuadro B ( <img decoding=\"async\" alt=\"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/ab8e8f6020825830c4d03004528af1a4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>i-predictive Frame)<b>B<\/b>i-predictive Frame<\/h3>\n<p>\n\u00bfY qu\u00e9 pasa con los enlaces no solo a los cuadros pasados, sino tambi\u00e9n a los futuros, para asegurar una compresi\u00f3n a\u00fan mejor? Eso es, en esencia, el cuadro B (cuadro bidireccional).<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/f28d4e02836e9b37f0f21937dd1ba660.png\" style=\"display:block;margin: 0 auto;\" \/> Cuadro B ( <img decoding=\"async\" alt=\"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/7a6b3a329db155c94a91f58a99874bb9.png\" style=\"display:block;margin: 0 auto;\" \/> \u2192 <img decoding=\"async\" alt=\"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/09df4bc5a35df89575c7b51349be4340.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Salida intermedia<\/h2>\n<p>\nEstos tipos de cuadros se utilizan para garantizar la mejor compresi\u00f3n. Veremos c\u00f3mo sucede esto en la siguiente secci\u00f3n. Por ahora, se\u00f1alemos que el tipo que consume m\u00e1s memoria es el cuadro I, el cuadro P es significativamente m\u00e1s barato y el m\u00e1s rentable para el video es el cuadro B.<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/97b9177ffff302881deb1c86ce416166.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Redundancia temporal (pron\u00f3stico entre cuadros)<\/h2>\n<p>\nVeamos qu\u00e9 posibilidades tenemos para minimizar las repeticiones en el tiempo. Este tipo de redundancia se resolver\u00e1 mediante m\u00e9todos de pron\u00f3stico mutuo.<\/p>\n<p>Intentaremos gastar la menor cantidad posible de bits para codificar la secuencia de cuadros 0 y 1.<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/f0dc2df33a5297622a77a4ca09b19af8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPodemos realizar <b>sustracci\u00f3n<\/b>, simplemente restamos el cuadro 1 del cuadro 0. Obtenemos el cuadro 1, usando solo la diferencia entre \u00e9l y el cuadro anterior, pero en realidad codificamos solo el residuo resultante.<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/c14981c3a3a0459a02620805c4a0f2db.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00bfPero qu\u00e9 pasa si te digo que existe un m\u00e9todo a\u00fan mejor que utiliza a\u00fan menos bits? Primero, dividamos el cuadro 0 en una rejilla clara compuesta de bloques. Luego intentemos emparejar bloques del cuadro 0 con el cuadro 1. En otras palabras, evaluemos el movimiento entre los cuadros.<\/p>\n<blockquote><p> De Wikipedia \u2014 <b>compensaci\u00f3n de movimiento por bloques<\/b><\/p>\n<p>La compensaci\u00f3n de movimiento por bloques divide el cuadro actual en bloques no superpuestos y el vector de compensaci\u00f3n de movimiento se\u00f1ala el origen de los bloques (un error com\u00fan es pensar que <i>el cuadro anterior<\/i> se divide en bloques no superpuestos y los vectores de compensaci\u00f3n de movimiento indican a d\u00f3nde se mueven esos bloques. En realidad, es al rev\u00e9s: no se analiza el cuadro anterior, sino el siguiente, y se determina de d\u00f3nde aparecieron los bloques, no a d\u00f3nde se trasladan). Normalmente, los bloques originales se superponen en el cuadro original. Algunos algoritmos de compresi\u00f3n de video ensamblan el cuadro actual a partir de partes de varios cuadros previamente transmitidos.<\/p><\/blockquote>\n<p><img decoding=\"async\" alt=\"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/0c34e84b318be2d250bade240fad80ed.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEn el proceso de evaluaci\u00f3n, observamos que la esfera se ha movido de (<b>x<\/b>=0, <b>y<\/b>=25) a (<b>x<\/b>=6, <b>y<\/b>=26), valores <b>x<\/b> y <b>y<\/b> definen la direcci\u00f3n del movimiento. Otro paso que podemos dar para conservar bits es codificar solo la diferencia entre los vectores de movimiento entre la \u00faltima posici\u00f3n del bloque y la proyectada, por lo que el vector final de movimiento ser\u00e1 (x=6-0=6, y=26-25=1).<\/p>\n<p>En una situaci\u00f3n real, esta bola se dividir\u00eda en <b>n<\/b> bloques, pero esto no cambia el sentido del asunto.<\/p>\n<p>Los objetos en el marco se mueven en tres dimensiones, por lo que al mover la bola puede parecer visualmente m\u00e1s peque\u00f1a (o m\u00e1s grande si se mueve hacia el espectador). Es normal que no haya una coincidencia perfecta entre los bloques. Aqu\u00ed est\u00e1 la vista combinada de nuestra estimaci\u00f3n y la imagen real.<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/0fb4737e1076221e786fd6a78357422d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPero vemos que cuando aplicamos la estimaci\u00f3n de movimiento, los datos para codificar son notablemente menores que al usar un m\u00e9todo m\u00e1s simple que calcula la delta entre cuadros.<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/319507ad7197b7693efff11dcd7e4df4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>\u00bfC\u00f3mo se ver\u00eda la compensaci\u00f3n de movimiento real?<\/h2>\n<p>\nEsta t\u00e9cnica se aplica a todos los bloques a la vez. A menudo, nuestra bola en movimiento condicional se dividir\u00e1 en varios bloques al mismo tiempo.<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/978b5612dbd164d2865ccdec4474fdb4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPuedes tocar estas ideas t\u00fa mismo, usando <noindex><a rel=\"nofollow\" href=\"https:\/\/jupyter.org\/\">Jupyter<\/a><\/noindex>.<\/p>\n<p>Para ver los vectores de movimiento, se puede crear un video con una predicci\u00f3n externa usando <noindex><a rel=\"nofollow\" href=\"https:\/\/www.ffmpeg.org\/\">ffmpeg<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/056d6dfd2c18baaabc70655edfe3d609.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTambi\u00e9n se puede utilizar <noindex><a rel=\"nofollow\" href=\"https:\/\/software.intel.com\/en-us\/video-pro-analyzer\">Intel Video Pro Analyzer<\/a><\/noindex> (es de pago, pero hay una versi\u00f3n de prueba gratuita que est\u00e1 limitada solo a los primeros diez cuadros).<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/5e28ccc6e6101b8d613f94d326a685f2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Redundancia espacial (predicci\u00f3n interna)<\/h2>\n<p>\nSi analizamos cada cuadro en el video, encontraremos muchas \u00e1reas interrelacionadas.<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/24bff6d64704cf0c8e1010832ea8f6ea.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVeamos este ejemplo. Esta escena consiste principalmente en colores azul y blanco.<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/12edf221c61e064674ad363db9f3342c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEste es el cuadro I. No podemos usar los cuadros anteriores para la predicci\u00f3n, pero podemos comprimirlo. Codificaremos la selecci\u00f3n del bloque rojo. Si miramos a sus vecinos, notamos que alrededor de \u00e9l hay algunas tendencias de color.<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/b67b3fba3d1792db81d0f1cb52c7c29b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSuponemos que los colores en el cuadro se distribuyen verticalmente. Lo que significa que el color de los p\u00edxeles desconocidos contendr\u00e1 valores de sus vecinos.<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/6fe8f6ed7ebc66940fca27b8cd2c5915.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTal predicci\u00f3n puede ser incorrecta. Por esta raz\u00f3n, es necesario aplicar este m\u00e9todo (predicci\u00f3n interna) y luego restar los valores reales. Esto nos dar\u00e1 un bloque residual, lo que llevar\u00e1 a una matriz mucho m\u00e1s comprimida en comparaci\u00f3n con el original.<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/52fd77c96aa8445af12fca468c72c844.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSi quieres practicar con predicciones internas, puedes crear un video con los macrobloques y sus predicciones utilizando ffmpeg. Para entender el significado de cada color de bloque, ser\u00e1 necesario revisar la documentaci\u00f3n de ffmpeg.<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/0399473c538a550f9317fd59c347a565.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nO tambi\u00e9n puedes utilizar Intel Video Pro Analyzer (como mencion\u00e9 anteriormente, la versi\u00f3n de prueba gratuita tiene un l\u00edmite en los primeros 10 fotogramas, pero esto ser\u00e1 suficiente al principio).<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/abcdf1eb4b7dbdcf2a7a64154f3052ba.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Parte dos:<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/480430\/\"> Principios de funcionamiento del c\u00f3dec de video<\/a><\/noindex><\/h3>\n<p>Fuente: <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.2 - 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\/es\/blog\/news\/kak-rabotaet-videokodek-chast-1-osnovy\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\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\/es\/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\udd47C\u00f3mo funciona un c\u00f3dec de video. Parte 1. Fundamentos | ProHoster","description":"Segunda parte: Principios de funcionamiento de un c\u00f3dec de video Cualquier imagen rasterizada se puede representar en forma de.","canonical_url":"https:\/\/prohoster.info\/es\/blog\/news\/kak-rabotaet-videokodek-chast-1-osnovy","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","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\/es\/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\/es\/wp-json\/wp\/v2\/posts\/54312","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=54312"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/54312\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=54312"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=54312"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=54312"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}