Audio y vídeo 2: Principio de división de macrobloques H264
En el artículo anterior "Audio y video 1, naturaleza de audio y video e instalación de ffmpeg", presentamos el formato de archivo de video, el formato de empaquetado de video, el formato de codificación de audio y video y el uso de ffmpeg para verificar. que el audio y el video se componen principalmente de composición de audio y video.
Este capítulo trata principalmente sobre la comprensión de algunos conceptos básicos de audio y vídeo.
El primer estándar de codificación que adopta el esquema de "codificación híbrida de estructura de bloques": H261, el creador del audio y el vídeo.
Veamos primero un ejemplo: si una imagen degradada se guarda en píxeles y en una estructura de bloques, compare los dos métodos:
En este ejemplo, la imagen no está dañada Debajo del Premisa de alta calidad, el efecto de compresión de la imagen es muy bueno.
Definitivamente no es una coincidencia que la imagen de un determinado cuadro en el audio y el video sea un degradado, pero los científicos usan esta característica y la aplican al algoritmo de codificación en el campo del audio. siguiente imagen como ejemplo:
El científico analizó el nivel microscópico de la imagen después de ampliarla muchas veces. En algunas partes de la imagen, se puede utilizar el procesamiento de gradiente para lograr el propósito de comprimir los datos. algunos lugares donde los píxeles son muy diferentes, según su original Se procesan los datos. Esto logra un efecto en el que la calidad de la imagen es indistinguible para el ojo humano. El ojo humano no es tan sensible a la resolución microscópica, por lo que después de este procesamiento, el ojo humano es básicamente incapaz de detectarla. Incluso en el nivel micro, no todos los bloques pequeños son gradientes absolutos, pero eso no afecta el efecto. Por supuesto, este algoritmo de codificación tiene pérdidas y vale la pena adoptarlo después de sopesar los pros y los contras.
Después de comprender la codificación híbrida de la estructura de bloques, en realidad es muy sencillo comprender los principios básicos de H264. Describamos brevemente el proceso de compresión de datos de H264. Los fotogramas de vídeo recopilados por la cámara (calculados a 30 fotogramas por segundo) se envían al búfer del codificador H264. El codificador primero divide cada imagen en macrobloques.
Tome la siguiente imagen como ejemplo:
H264 utiliza un área de tamaño 16X16 como macrobloque de forma predeterminada y también se puede dividir en un tamaño de 8X8.
Después de dividir el macrobloque, calcule el valor de píxel del macrobloque.
Por analogía, calcule el valor de píxel de cada macrobloque en una imagen. Una vez procesados todos los macrobloques, se verá como se muestra a continuación.
H264 utiliza un tamaño de macrobloque de 16X16 para imágenes más planas. Pero para una tasa de compresión más alta, el macrobloque de 16X16 también se puede dividir en subbloques más pequeños. ¿El tamaño del subbloque puede ser 8X16? ¿16X8? ¿8X8? ¿8X4?
En la imagen de arriba, la mayor parte del macrobloque de 16X16 en el marco rojo tiene un fondo azul, y parte de la imagen de las tres águilas está dibujada dentro del macrobloque para procesar mejor las tres. águilas Para algunas imágenes del águila, H264 divide múltiples subbloques dentro del macrobloque de 16X16.
De esta forma se pueden obtener datos más eficientes mediante la compresión intra-frame. La siguiente imagen es el resultado de comprimir el macrobloque anterior usando mpeg-2 y H264 respectivamente. La mitad izquierda es el resultado de la división y compresión de subbloques MPEG-2, y la mitad derecha es el resultado de la división y compresión de subbloques H264. Se puede ver que el método de división H264 tiene más ventajas.
Una vez divididos los macrobloques, se pueden agrupar todas las imágenes en la caché del codificador H264.
De la Sección 6.3 del "Documento de ayuda oficial chino sobre codificación de vídeo H.264" Segmentación espacial de imágenes y tiras
Cómo segmentar una imagen en tiras y macrobloques. La imagen está dividida en tiras. Un segmento consta de una secuencia de macrobloques o, cuando se utiliza decodificación adaptativa de cuadro/campo de macrobloques, una secuencia de pares de macrobloques.
Cada macrobloque contiene un array luma de 16×16 y, cuando el formato de vídeo no es monocromático, dos arrays croma correspondientes. Si no se utiliza la decodificación de cuadro/campo adaptativa de macrobloques, cada macrobloque representa una región rectangular espacial en la imagen. Por ejemplo, como se muestra en la Figura 6-7, una imagen se divide en dos franjas.
Sección 6.4 Proceso de escaneo inverso y proceso de derivación de datos adyacentes
Especifica el proceso de escaneo inverso, como el mapeo de valores de índice a posiciones y el proceso de derivación de datos adyacentes. .
6.4.1 Proceso de escaneo inverso de macrobloques
Lo que necesitamos saber aquí es que el algoritmo de codificación escaneará cada macrobloque de cada cuadro. Después del cálculo, se obtiene el resultado de división óptimo.
6.4.2 Proceso de escaneo de segmentación de macrobloques inversa y segmentación de submacrobloques
Si las fluctuaciones de datos de un macrobloque de 16x16 son relativamente grandes, continuaremos dividiendo los macrobloques hasta que Se divide en 4x4.