¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos

La segunda parte: Cómo funciona el códec de vídeo

Cualquier ráster imagen se puede representar en la forma matriz bidimensional. Cuando se trata de colores, la idea se puede desarrollar mirando una imagen como matriz tridimensional, en el que se utilizan dimensiones adicionales para almacenar datos para cada uno de los colores.

Si consideramos el color final como una combinación 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 último para el azul.
¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos
Llamaremos a cada punto de esta matriz píxel (elemento de imagen). Cada píxel contiene información sobre la intensidad (normalmente como un valor numérico) de cada color. Por ejemplo, píxel rojo significa que contiene 0 verde, 0 azul y máximo rojo. Píxel rosa Se puede formar utilizando una combinación de tres colores. Usando un rango numérico de 0 a 255, un píxel rosa se define como Rojo = 255, Verde = 192 и Azul = 203.

¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos

Este artículo fue publicado con el apoyo de EDISON.

estamos desarrollando Aplicaciones para videovigilancia, streaming de vídeo., y también estamos comprometidos Grabación de vídeo en el quirófano..

Formas alternativas de codificar una imagen en color

Existen muchos otros modelos para representar los colores que componen una imagen. Por ejemplo, puede utilizar una paleta indexada, que requiere sólo un byte para representar cada píxel, en lugar de los tres necesarios cuando se utiliza el modelo RGB. En dicho modelo, es posible utilizar una matriz 2D en lugar de una matriz 3D para representar cada color. Esto ahorra memoria, pero ofrece una gama de colores más pequeña.

¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos

RGB

Por ejemplo, mire esta imagen a continuación. La primera cara está completamente pintada. Los otros son los planos rojo, verde y azul (las intensidades de los colores correspondientes se muestran en escala de grises).

¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos

Vemos que las tonalidades de rojo en el original estarán en los mismos lugares donde se observan las partes más brillantes de la segunda cara. Mientras que la contribución del azul se puede ver principalmente sólo en los ojos de Mario (último rostro) y elementos de su vestimenta. Observe dónde los tres planos de color contribuyen menos (las partes más oscuras de las imágenes): el bigote de Mario.

Para almacenar la intensidad de cada color, se requiere una cierta cantidad de bits; esta cantidad se llama profundidad de bits. Digamos que se gastan 8 bits (basado en un valor de 0 a 255) por plano de color. Entonces tenemos una profundidad de color de 24 bits (8 bits * 3 planos R/G/B).

Otra propiedad de una imagen es разрешение, que es el número de píxeles en una dimensión. A menudo denotado como ancho × alto, como en la imagen de ejemplo de 4 por 4 a continuación.
¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos

Otra propiedad con la que nos ocupamos cuando trabajamos con imágenes/vídeos es relación de aspecto, que describe la relación proporcional normal entre el ancho y el alto de una imagen o píxel.

Cuando dicen que una determinada película o imagen tiene un tamaño de 16 por 9, normalmente quieren decir relación de aspecto de la pantalla (PERO - de Relación de aspecto de pantalla). Sin embargo, a veces puede haber diferentes formas de píxeles individuales; en este caso estamos hablando de proporción de píxeles (PAR - de Relación de aspecto de píxeles).

¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos

¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos

Nota para la anfitriona: DVD partido DAR 4 a 3

Aunque la resolución real del DVD es 704x480, aún mantiene una relación de aspecto de 4:3 porque el PAR es 10:11 (704x10 / 480x11).

Y finalmente podemos determinar видео como una secuencia de n marcos para el periodo tiempo, que puede considerarse una dimensión adicional. A n entonces es la velocidad de fotogramas o el número de fotogramas por segundo (FPS - de Cuadros por segundo).

¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos

El número de bits por segundo necesarios para mostrar un vídeo es su Velocidad de transmisión - tasa de bits.

tasa de bits = ancho * alto * profundidad de bits * fotogramas por segundo

Por ejemplo, un vídeo de 30 fps, 24 bps, 480x240 requeriría 82,944,000 bps o 82,944 Mbps (30x480x240x24), pero eso si no se utiliza ningún método de compresión.

Si la velocidad de transferencia casi constante, entonces se llama velocidad de transmisión constante (CBR - de velocidad de bits constante). Pero también puede variar, en este caso se llama velocidad de baudios variable (VBR - de velocidad de bits variable).

Este gráfico muestra una VBR limitada, donde no se desperdician demasiados bits en el caso de un cuadro completamente oscuro.

¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos

Inicialmente, los ingenieros desarrollaron un método para duplicar la velocidad de fotogramas percibida de una pantalla de vídeo sin utilizar ancho de banda adicional. Este método se conoce como vídeo entrelazado; Básicamente, envía la mitad de la pantalla en el primer "cuadro" y la otra mitad en el siguiente "cuadro".

Actualmente, las escenas se renderizan principalmente usando tecnologías de escaneo progresivas. Es un método de visualización, almacenamiento o transmisión de imágenes en movimiento en el que todas las líneas de cada cuadro se dibujan de forma secuencial.

¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos

¡Bien! Ahora somos conscientes de cómo se representa digitalmente una imagen, cómo se ordenan sus colores, cuántos bits por segundo destinamos a mostrar vídeo, si la tasa de bits es constante (CBR) o variable (VBR). Conocemos una resolución determinada utilizando una velocidad de fotogramas determinada, estamos familiarizados con muchos otros términos, como vídeo entrelazado, PAR y algunos otros.

Eliminación de redundancia

Se sabe que el vídeo sin compresión no se puede utilizar normalmente. Un vídeo de una hora con una resolución de 720p y 30 fotogramas por segundo ocuparía 278 GB. Llegamos a este valor multiplicando 1280 x 720 x 24 x 30 x 3600 (ancho, alto, bits por píxel, FPS y tiempo en segundos).

el uso de algoritmos de compresión sin pérdidas, como DEFLATE (usado en PKZIP, Gzip y PNG), no reducirá lo suficiente el ancho de banda requerido. Tenemos que buscar otras formas de comprimir vídeo.

Para hacer esto, puede utilizar las funciones de nuestra visión. Somos mejores para distinguir el brillo que el color. Un vídeo es una serie de imágenes secuenciales que se repiten en el tiempo. Hay pequeñas diferencias entre fotogramas adyacentes de la misma escena. Además, cada cuadro contiene muchas áreas que utilizan el mismo color (o similar).

El color, el brillo y nuestros ojos.

Nuestros ojos son más sensibles al brillo que al color. Puedes comprobarlo tú mismo mirando esta imagen.

¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos

Si no ves que en la mitad izquierda de la imagen los colores de los cuadrados A и B son en realidad iguales, entonces eso es normal. Nuestro cerebro nos obliga a prestar más atención a la luz y la sombra que al color. En el lado derecho, entre los cuadrados designados, hay un puente del mismo color, por lo que nosotros (es decir, nuestro cerebro) determinamos fácilmente que, de hecho, son del mismo color.

Veamos (de forma simplificada) cómo funcionan nuestros ojos. El ojo es un órgano complejo que consta de muchas partes. Sin embargo, lo que más nos interesan son los conos y los bastones. El ojo contiene alrededor de 120 millones de bastones y 6 millones de conos.

Consideremos la percepción del color y el brillo como funciones separadas de determinadas partes del ojo (de hecho, todo es algo más complicado, pero lo simplificaremos). Los bastones son los principales responsables del brillo, mientras que los conos son responsables del color. Los conos se dividen en tres tipos, según el pigmento que contienen: conos S (azules), conos M (verdes) y conos L (rojos).

Dado que tenemos muchos más bastones (brillo) que conos (color), podemos concluir que somos más capaces de distinguir transiciones entre oscuridad y luz que los colores.

¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos

Funciones de sensibilidad al contraste

Los investigadores de la psicología experimental y de muchos otros campos han desarrollado muchas teorías sobre la visión humana. Y uno de ellos se llama funciones de sensibilidad al contraste. Están relacionados con la iluminación espacial y temporal. En resumen, se trata de cuántos cambios se requieren antes de que un observador los note. Tenga en cuenta el plural de la palabra "función". Esto se debe a que podemos medir las funciones de sensibilidad al contraste no sólo para imágenes en blanco y negro, sino también para imágenes en color. Los resultados de estos experimentos muestran que en la mayoría de los casos nuestros ojos son más sensibles al brillo que al color.

Como sabemos que somos más sensibles al brillo de la imagen, podemos intentar aprovechar este hecho.

Modelo de color

Descubrimos un poco cómo trabajar con imágenes en color usando el esquema RGB. Hay otros modelos también. Existe un modelo que separa la luminancia del croma y se conoce como YCbCr. Por cierto, hay otros modelos que hacen una división similar, pero consideraremos solo este.

En este modelo de color Y es una representación del brillo y también utiliza dos canales de color: Cb (azul intenso) y Cr (rojo intenso). YCbCr se puede derivar de RGB y también es posible la conversión inversa. Usando este modelo podremos crear imágenes a todo color como vemos a continuación:

¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos

Convertir entre YCbCr y RGB

Alguien objetará: ¿cómo es posible conseguir todos los colores si no se utiliza el verde?

Para responder a esta pregunta, conviertamos RGB a YCbCr. Utilicemos los coeficientes adoptados en la norma. BT.601, que fue recomendado por la unidad UIT-R. Esta división establece los estándares para el vídeo digital. Por ejemplo: ¿qué es 4K? ¿Cuál debería ser la velocidad de fotogramas, la resolución y el modelo de color?

Primero calculemos el brillo. Usemos las constantes propuestas por la UIT y reemplacemos los valores RGB.

Y = 0.299R + 0.587G + 0.114B

Una vez que tengamos el brillo, separaremos los colores azul y rojo:

Cb = 0.564(B - Y)

Cr = 0.713(R - Y)

Y también podemos volver a convertir e incluso volvernos ecológicos usando YCbCr:

R = Y + 1.402Cr

B = Y + 1.772Cb

G = Y - 0.344Cb - 0.714Cr

Normalmente, las pantallas (monitores, televisores, pantallas, etc.) utilizan únicamente el modelo RGB. Pero este modelo se puede organizar de diferentes maneras:

¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos

submuestreo de color

Con una imagen representada como una combinación de luminancia y crominancia, podemos explotar la mayor sensibilidad del sistema visual humano a la luminancia que a la crominancia eliminando información selectivamente. El submuestreo de croma es un método para codificar imágenes que utiliza menos resolución para el croma que para la luminancia.

¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos

¿Cuánto está permitido reducir la resolución del color? Resulta que ya existen algunos diagramas que describen cómo manejar la resolución y la fusión (Color resultante = Y + Cb + Cr).

Estos esquemas se conocen como sistemas de reducción de resolución y se expresan como una proporción triple - a:x:y, que determina el número de muestras de señales de luminancia y diferencia de color.

a — estándar de muestreo horizontal (generalmente igual a 4)
x — número de muestras de croma en la primera fila de píxeles (resolución horizontal relativa a a)
y — el número de cambios en las muestras de croma entre la primera y la segunda fila de píxeles.

La excepción es 4:1:0, proporcionando una muestra de croma en cada bloque de resolución de luminancia de 4 por 4.

Esquemas comunes utilizados en códecs modernos:

  • 4:4:4 (sin reducción de resolución)
  • 4:2:2
  • 4:1:1
  • 4:2:0
  • 4:1:0
  • 3:1:1

YCbCr 4:2:0 - ejemplo de fusión

Aquí hay una imagen fusionada usando YCbCr 4:2:0. Tenga en cuenta que solo gastamos 12 bits por píxel.

¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos

Así es como se ve la misma imagen, codificada con los principales tipos de submuestreo de color. La primera fila es el YCbCr final, la fila inferior muestra la resolución cromática. Resultados muy decentes, considerando la ligera pérdida de calidad.

¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos

¿Recuerdas cuando contamos 278 GB de espacio de almacenamiento para almacenar un archivo de vídeo de una hora con una resolución de 720p y 30 fotogramas por segundo? Si utilizamos YCbCr 4:2:0, este tamaño se reducirá a la mitad: 139 GB. Hasta el momento, todavía está lejos de ser un resultado aceptable.

Puede obtener el histograma YCbCr usted mismo usando FFmpeg. En esta imagen, el azul domina sobre el rojo, lo que es claramente visible en el propio histograma.

¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos

Color, brillo, gama de colores - revisión de video

Recomendamos ver este increíble video. Explica qué es el brillo y en general todos los puntos son punteados. ё sobre brillo y color.

Tipos de marco

Vamonos. Intentemos eliminar la redundancia de tiempo. Pero primero, definamos alguna terminología básica. Digamos que tenemos una película con 30 fotogramas por segundo, aquí están sus primeros 4 fotogramas:

¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos ¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos ¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos ¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos

Podemos ver mucha repetición en los fotogramas: por ejemplo, un fondo azul que no cambia de fotograma a fotograma. Para solucionar este problema, podemos clasificarlos de forma abstracta en tres tipos de marcos.

marco I (Imarco de entrada)

El marco I (marco de referencia, marco clave, marco interior) es autónomo. Independientemente de lo que quieras visualizar, un I-frame es esencialmente una fotografía estática. El primer fotograma suele ser un fotograma I, pero observaremos regularmente fotogramas I incluso entre los fotogramas que no sean los primeros.

¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos

Marco P (Pmarco redactado)

El fotograma P (cuadro predictivo) aprovecha el hecho de que casi siempre la imagen actual se puede reproducir utilizando el fotograma anterior. Por ejemplo, en el segundo cuadro el único cambio es que la pelota avanza. Podemos obtener el fotograma 2 simplemente modificando ligeramente el fotograma 1, utilizando únicamente la diferencia entre estos fotogramas. Para construir el cuadro 2, nos referimos al cuadro anterior 1.

¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos

marco B (Bmarco i-predictivo)

¿Qué pasa con los enlaces no sólo a fotogramas pasados, sino también a fotogramas futuros para proporcionar una compresión aún mejor? Se trata básicamente de un marco B (marco bidireccional).

¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos

Retiro intermedio

Estos tipos de cuadros se utilizan para proporcionar la mejor compresión posible. Veremos cómo sucede esto en la siguiente sección. Por ahora, observemos que el más "caro" en términos de memoria consumida es el I-frame, el P-frame es notablemente más barato, pero la opción más rentable para video es el B-frame.

¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos

Redundancia temporal (predicción entre cuadros)

Veamos qué opciones tenemos para minimizar la repetición en el tiempo. Podemos resolver este tipo de redundancia utilizando métodos de predicción cruzada.

Intentaremos gastar la menor cantidad de bits posible para codificar una secuencia de cuadros 0 y 1.

¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos

podemos producir resta, simplemente restamos el cuadro 1 del cuadro 0. Obtenemos el cuadro 1, solo usamos la diferencia entre este y el cuadro anterior; de hecho, solo codificamos el resto resultante.

¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos

Pero, ¿qué pasaría si te dijera que existe un método aún mejor que utiliza incluso menos bits? Primero, dividamos el cuadro 0 en una cuadrícula clara que consta de bloques. Y luego intentaremos hacer coincidir los bloques del cuadro 0 con el cuadro 1. En otras palabras, estimaremos el movimiento entre cuadros.

De Wikipedia - compensación de movimiento de bloque

La compensación de movimiento de bloques divide el cuadro actual en bloques que no se superponen y el vector de compensación de movimiento informa el origen de los bloques (un error común es que el anterior el cuadro se divide en bloques que no se superponen y los vectores de compensación de movimiento indican a dónde van esos bloques. Pero, de hecho, es al revés: no se analiza el fotograma anterior, sino el siguiente; no está claro hacia dónde se mueven los bloques, sino de dónde vienen). Normalmente, los bloques fuente se superponen en el marco fuente. Algunos algoritmos de compresión de vídeo ensamblan el fotograma actual a partir de partes de no uno, sino varios fotogramas transmitidos previamente.

¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos

Durante el proceso de evaluación, vemos que la pelota se ha movido de (x= 0, y=25) por (x= 6, y=26), valores x и y determinar el vector de movimiento. Otro paso que podemos hacer para preservar los bits es codificar solo la diferencia de vectores de movimiento entre la posición del último bloque y la predicha, por lo que el vector de movimiento final será (x=6-0=6, y=26-25=1 ).

En una situación real, esta bola se dividiría en n bloquea, pero esto no cambia la esencia del asunto.

Los objetos en el marco se mueven en tres dimensiones, por lo que cuando la bola se mueve, puede volverse visualmente más pequeña (o más grande si se mueve hacia el espectador). Es normal que no haya una combinación perfecta entre bloques. Aquí hay una vista combinada de nuestra estimación y la imagen real.

¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos

Pero vemos que cuando usamos la estimación de movimiento, hay notablemente menos datos para codificar que cuando usamos un método más simple para calcular el delta entre fotogramas.

¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos

Cómo sería la compensación de movimiento real

Esta técnica se aplica a todos los bloques a la vez. A menudo, nuestra bola en movimiento condicional se dividirá en varios bloques a la vez.

¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos

Puedes familiarizarte con estos conceptos usando Jupyter.

Para ver vectores de movimiento, puede crear un video de predicción externo usando ffmpeg.

¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos

También puedes usar Analizador de vídeo Intel Pro (Es pago, pero hay una prueba gratuita que está limitada únicamente a los primeros diez fotogramas).

¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos

Redundancia espacial (previsión interna)

Si analizamos cada fotograma de un vídeo, encontraremos muchas áreas interconectadas.

¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos

Repasemos este ejemplo. Esta escena se compone principalmente de colores azul y blanco.

¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos

Este es un marco I. No podemos tomar fotogramas anteriores para la predicción, pero podemos comprimirlos. Codifiquemos la selección del bloque rojo. Si miramos a sus vecinos, notamos que hay algunas tendencias de color a su alrededor.

¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos

Suponemos que los colores se distribuyen verticalmente en el marco. Lo que significa que el color de los píxeles desconocidos contendrá los valores de sus vecinos.

¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos

Tal pronóstico puede resultar incorrecto. Es por esta razón que es necesario aplicar este método (pronóstico interno) y luego restar los valores reales. Esto nos dará un bloque residual, lo que dará como resultado una matriz mucho más comprimida en comparación con la original.

¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos

Si quieres practicar con predicciones internas, puedes crear un vídeo de macrobloques y sus predicciones usando ffmpeg. Para comprender el significado de cada color de bloque, deberá leer la documentación de ffmpeg.

¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos

O puede usar Intel Video Pro Analyzer (como mencioné anteriormente, la versión de prueba gratuita está limitada a los primeros 10 fotogramas, pero esto será suficiente al principio).

¿Cómo funciona un códec de vídeo? Parte 1: Conceptos básicos

La segunda parte: Cómo funciona el códec de vídeo

Fuente: habr.com

Añadir un comentario