Principio de codificación de compresión de formato AVC/H264

1. Diagrama de flujo del marco H.264/AVC

1.1 Diagrama de trama H.264/AVC

inserte la descripción de la imagen aquí
La función de H.264 se divide en dos capas
VCL (VideoCoding Layer, capa de codificación de video): responsable de la representación eficiente del contenido de video, que incluye:
predicción entre cuadros e intracuadros (estimación),
transformación (transformación) y transformación inversa,
cuantificación (Quantization) ) y cuantificación inversa,
filtro de bucle (Filtro de bucle),
codificación de entropía (Codificación de entropía).

NAL (NetworkAbstraction Layer, Network Abstraction Layer): Encargado de empaquetar y transmitir los datos de manera adecuada requeridos por la red.
Formato de encapsulación de red
RTP: Cabecera RTP de 12 bytes + NALU, transmisión UDP general
RTMP: Cabecera RTMP + NALU, transmisión TCP general. El cliente RTMP transmite al servidor, y RTMP es la forma de transmisión en vivo.
RTSP: encabezado RTSP + NALU, transmisión UDP general. RTSP envía comandos de control e imágenes de video al mismo tiempo.

1.2 Diagrama de flujo H.264/AVC

inserte la descripción de la imagen aquí
Lo anterior es el diagrama de flujo de codificación de H.264AVC, y el codificador H264 adopta un método de codificación híbrido de transformación y predicción. Como se muestra en la figura anterior, el marco de entrada o campo Fn es procesado por el codificador en unidades de macrobloques.

En primer lugar, se procesa de acuerdo con el método de codificación predictiva intratrama o intertrama. Si se utiliza la codificación predictiva entre cuadros, el valor predicho PRED (indicado por P en la figura) se obtiene después de la compensación de movimiento (MC) de la imagen de referencia codificada previamente en el segmento actual, donde la imagen de referencia está representada por F'n -1. Para mejorar la precisión de la predicción y, por lo tanto, mejorar la relación de compresión, la imagen de referencia real se puede seleccionar de los fotogramas codificados, decodificados, reconstruidos y filtrados pasados ​​o futuros (refiriéndose al orden de visualización). El proceso de predicción intra es muy similar a JPEG. Después de dividir una imagen en macrobloques, se pueden realizar 9 modos de predicción para cada macrobloque. Encuentre un modelo de predicción que se acerque más a la imagen original.

Luego, el valor residual se obtiene restando la imagen original y la imagen intrapredicha. Después de restar el valor de predicción PRED del bloque actual, se genera un bloque residual Dn. Después de la transformación y cuantificación del bloque, se genera un conjunto de coeficientes de transformación cuantificados X, y luego la codificación de entropía y alguna información adicional requerida para la decodificación (como modo de predicción Parámetros de cuantificación, vectores de movimiento, etc.) juntos forman un flujo de código comprimido, que se utiliza para la transmisión y el almacenamiento a través de NAL (capa de adaptación de red).

Este es el codificador de H264. A continuación, echemos un vistazo al decodificador.
inserte la descripción de la imagen aquíComo se puede ver en la figura anterior, el NAL del codificador genera un flujo de bits comprimido H.264 comprimido. Se obtiene un conjunto de coeficientes de transformación cuantificados X a través de la decodificación de entropía, y luego se obtiene el residuo Dn' a través de la cuantificación inversa y la transformación inversa. Usando la información de encabezado decodificada del flujo de bits, el decodificador genera un valor PRED predicho, que es el mismo que el PRED original en el codificador. Cuando al Dn' residual se suma el PRED generado por el decodificador, se genera uFu', y tras filtrar se obtiene finalmente el Fn' filtrado, siendo este Fn' la imagen de salida mejor decodificada.

2. Principio de codificación H264

A continuación, describimos brevemente el proceso de codificación de datos de compresión H264. Los cuadros de video (calculados a 30 cuadros por segundo) recopilados por la cámara se envían al búfer del codificador H264. El codificador primero divide los macrobloques para cada imagen.

2.1 Dividir macrobloques

Un macrobloque es la unidad de procesamiento básica de un estándar de codificación y, por lo general, también tiene un tamaño de 16x16 píxeles. Un macrobloque de 16X16 se puede dividir en subbloques más pequeños. El tamaño del subbloque puede ser 8X16, 16X8, 8X8, 4X8, 8X4, 4X4

H264 usa un área de 16X16 como macrobloque por defecto, y también se puede dividir en macrobloques de 8X8.
Después de dividir el macrobloque, calcule el valor de píxel del macrobloque.
inserte la descripción de la imagen aquí
Por analogía, se calcula el valor de píxel de cada macrobloque en una imagen y todos los macrobloques se procesan de la siguiente manera.
inserte la descripción de la imagen aquí

2.2 Dividir sub-bloques

H264 utiliza macrobloques de 16X16 para imágenes relativamente planas. Sin embargo, para una mayor tasa de compresión, el macrobloque 16X16 se puede dividir en subbloques más pequeños.

El tamaño del subbloque puede ser 8X16, 16X8, 8X8, 4X8, 8X4, 4X4, muy flexible.
inserte la descripción de la imagen aquí
En la figura anterior, la mayor parte del macrobloque 16X16 en el marco rojo tiene un fondo azul, y parte de la imagen de las tres águilas está dibujada en el macrobloque. Para procesar mejor parte de las imágenes de las tres águilas, H264 divide el macrobloque 16X16 en múltiples subbloques.
inserte la descripción de la imagen aquí
De esta forma, después de la compresión intratrama, se pueden obtener datos más eficientes.
La siguiente figura es el resultado de comprimir el macrobloque anterior usando MPEG-2 y H264 respectivamente. La mitad izquierda es el resultado comprimido de la división de subbloques MPEG-2, y la mitad derecha es el resultado comprimido de la división de subbloques H264. Se puede ver que el método de división de H264 tiene más ventajas: después de los macrobloques de cada Las imágenes están divididas
inserte la descripción de la imagen aquí
, puede agrupar todas las imágenes en el caché del codificador H264.

2.3 Agrupación de fotogramas

Existen principalmente dos tipos de redundancia de datos para datos de video, uno es la redundancia de datos en el tiempo y el otro es la redundancia de datos en el espacio. Entre ellos, el de redundancia de datos en el tiempo es el mayor. A continuación, hablemos del problema de redundancia del tiempo de datos de video.

¿Por qué se dice que la redundancia en el tiempo es máxima? Asumiendo que la cámara captura 30 cuadros por segundo, los datos de estos 30 cuadros están correlacionados en la mayoría de los casos. También puede haber más de 30 marcos de datos, tal vez docenas de marcos o cientos de marcos de datos que estén estrechamente relacionados.

Para estos cuadros estrechamente relacionados, de hecho, solo necesitamos guardar los datos de un cuadro, y otros cuadros se pueden predecir de acuerdo con ciertas reglas a través de este cuadro, por lo que los datos de video tienen la mayor redundancia en el tiempo.

Para comprimir datos prediciendo cuadros relacionados, es necesario agrupar cuadros de video. Entonces, ¿cómo determinar que algunos marcos están estrechamente relacionados y pueden clasificarse como un grupo?

Echemos un vistazo a un ejemplo. A continuación se muestra un conjunto de fotogramas de vídeo capturados de una bola de billar en movimiento. La bola de billar rueda desde la esquina superior derecha hasta la esquina inferior izquierda. inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
A través del escaneo de macrobloques y la búsqueda de macrobloques, se puede encontrar que la correlación entre estos dos cuadros es muy alta. Se encuentra además que el grado de correlación de este grupo de tramas es muy alto. Por lo tanto, los cuadros anteriores se pueden dividir en un grupo, es decir, la secuencia (GOP) en H264. Su algoritmo es: en varias imágenes adyacentes, generalmente solo hay puntos con diferencias dentro del 10% de los píxeles, el cambio de diferencia de brillo no es más del 2% y el cambio de diferencia de croma es solo dentro del 1%. dichos gráficos se pueden agrupar en grupos.

En dicho grupo de cuadros, después de la codificación, solo conservamos los datos completos del primer cuadro, y los demás cuadros se calculan con referencia al cuadro anterior. A la primera trama la llamamos trama IDR/I, las demás tramas se denominan tramas P/B y el grupo de tramas de datos codificados se denomina GOP.

Entonces, si la escena no cambia todo el tiempo, la cantidad de cuadros I en una secuencia de cuadros de video será pequeña. Si el cambio de escena es muy complicado, aparecerán fotogramas I cuando el cambio de escena sea grande todo el tiempo.

2.4 Inter predicción y compensación de movimiento

Después de agrupar los fotogramas en el codificador H264, es necesario calcular el vector de movimiento de los objetos en el grupo de fotogramas. También tome el cuadro de video de billar en movimiento de arriba como ejemplo, veamos cómo calcula el vector de movimiento.

El codificador H264 primero obtiene dos cuadros de datos de video del encabezado del búfer en secuencia y luego realiza un escaneo de macrobloques. Cuando se encuentra un objeto en una de las imágenes, se realiza una búsqueda en las inmediaciones (en la ventana de búsqueda) de la otra imagen. Si el objeto se encuentra en otra imagen en este momento, se puede calcular el vector de movimiento del objeto. inserte la descripción de la imagen aquí
La dirección y la distancia del mapa de la mesa se pueden calcular por la diferencia en la posición de la bola de billar en la imagen de arriba. H264 registra la distancia y la dirección del movimiento de la bola en cada cuadro por turno, y se convierte en lo siguiente: inserte la descripción de la imagen aquí
después de calcular el vector de movimiento, se resta la misma parte (es decir, la parte verde) para obtener los datos de compensación. Al final, solo necesitamos comprimir y guardar los datos de compensación, y la imagen original se puede restaurar al decodificar más tarde. Los datos comprimidos y compensados ​​solo necesitan registrar una pequeña cantidad de datos. Como se muestra a continuación: inserte la descripción de la imagen aquí
Nos referimos al vector de movimiento y la compensación como tecnología de compresión entre cuadros, que resuelve la redundancia de datos de los cuadros de video en el tiempo. En este paso obtenemos el marco P/B.

Además de la compresión entre cuadros, también se requiere compresión de datos dentro de cuadros, y la compresión de datos dentro de cuadros resuelve la redundancia de datos en el espacio. A continuación, introduzcamos la tecnología de compresión intra-frame.

2.5 Intrapredicción

El ojo humano tiene cierto grado de reconocimiento de imágenes y es muy sensible al brillo de baja frecuencia, pero no muy sensible al brillo de alta frecuencia. Por lo tanto, según algunas investigaciones, los datos que no son sensibles al ojo humano en una imagen pueden eliminarse. De esta forma, se propone la técnica de intrapredicción.

La compresión intracuadro de H264 es muy similar a la de JPEG. Después de dividir una imagen en macrobloques, se pueden realizar 9 modos de predicción para cada macrobloque. Encuentre un modelo de predicción que se acerque más a la imagen original.

La comparación entre la imagen intrapredicha y la imagen original es la siguiente: inserte la descripción de la imagen aquí
Luego, el valor residual se obtiene restando la imagen original de la imagen intrapredicha
inserte la descripción de la imagen aquí

Luego guarde la información del modo de predicción que obtuvimos antes, para que podamos restaurar la imagen original al decodificar. El efecto es el siguiente:
inserte la descripción de la imagen aquí
después de la compresión intra-frame e inter-frame, aunque los datos se reducen considerablemente, todavía hay espacio para la optimización. Este paso es principalmente para comprimir el cuadro I.

2.6 Conversión DCT de datos residuales

La transformada de coseno discreta entera se puede realizar en los datos residuales para eliminar la correlación de los datos y comprimir aún más los datos.

Como se muestra en la siguiente figura, el lado izquierdo es el macrobloque de los datos originales y el lado derecho es el macrobloque de los datos residuales calculados. inserte la descripción de la imagen aquí
Después de digitalizar el macrobloque de datos residuales, se muestra en la siguiente figura: inserte la descripción de la imagen aquí
DCT transforma el macrobloque de datos residuales.
inserte la descripción de la imagen aquí
Después de eliminar los datos asociados, podemos ver que los datos se comprimen aún más. Una vez que se realiza la DCT, no es suficiente y se requiere CABAC para una compresión sin pérdidas.

2.7 Compresión CABAC

La compresión intratrama anterior es una técnica de compresión con pérdidas. Es decir, después de comprimir la imagen, no se puede restaurar por completo. CABAC es una tecnología de compresión sin pérdidas.

La tecnología de compresión sin pérdidas con la que todo el mundo está más familiarizado puede ser la codificación Huffman, que proporciona un código corto a las palabras de alta frecuencia y un código largo a las palabras de baja frecuencia para lograr el objetivo de la compresión de datos.

VLC utilizado en MPEG-2 es este tipo de algoritmo, tomamos AZ como ejemplo, A pertenece a datos de alta frecuencia, Z pertenece a datos de baja frecuencia. Vea cómo lo hace: inserte la descripción de la imagen aquí
CABAC también proporciona códigos cortos para datos de alta frecuencia y códigos largos para datos de baja frecuencia. Al mismo tiempo, también se comprimirá según la dependencia del contexto, lo cual es mucho más eficiente que VLC. El efecto es el siguiente:
inserte la descripción de la imagen aquí
ahora reemplace AZ con un cuadro de video, se convierte en lo siguiente:
inserte la descripción de la imagen aquí
de la imagen de arriba, es obvio que el esquema de compresión sin pérdidas que usa CACBA es mucho más eficiente que VLC.

El principio de codificación de AVC/H264 ha terminado y luego continúa mejorando los principios del proceso de codificación de HEVC y VVC.

Describa brevemente el proceso de codificación de video de HEVC y VVC

Introducción a los formatos de codificación de compresión de video HEVC y VVC (H264 y H266)

Supongo que te gusta

Origin blog.csdn.net/qq_39969848/article/details/129064183
Recomendado
Clasificación