Red de conocimiento informático - Aprendizaje de programación - Conocimientos básicos de ffmpeg

Conocimientos básicos de ffmpeg

ffmpeg es una biblioteca c para procesamiento de audio y video. Durante la transmisión de audio y video en red, debido a la gran cantidad de datos, se requiere compresión

El propósito de la compresión es. eliminar información redundante y redundancia La información se divide en:

1. Redundancia espacial: existe una fuerte correlación entre píxeles adyacentes de la imagen

2. Redundancia temporal: entre imágenes adyacentes. de la secuencia de vídeo Contenido similar

3. Redundancia de codificación: aparecen diferentes valores de píxeles con diferentes probabilidades

?4 Redundancia visual: el sistema visual humano es insensible a ciertos detalles<. /p>

? 5. Redundancia de conocimiento: las estructuras regulares se pueden obtener a partir de conocimientos previos y de fondo

● Compresión sin pérdidas (Winzip)

¿La imagen se descomprime por completo antes? compresión y después de la descompresión Consistente

? Relación de compresión baja

● Compresión con pérdida (H.264)

¿La imagen es inconsistente antes de la compresión y después de la descompresión? p>

? Alta relación de compresión

? Aprovechando las características del sistema visual humano (la frecuencia de animación y los detalles de la imagen visibles para el ojo humano son limitados)

Audio y la compresión de video en realidad es codificar audio y video,

Formato de codificación de video

Formato de codificación de audio

Formato de encapsulación

Protocolo de transmisión de medios.

YUV, sí Un método de codificación de colores. A menudo se utiliza en varios componentes de procesamiento de video. YUV tiene en cuenta la percepción humana al codificar fotografías o vídeos, lo que permite reducir el ancho de banda cromático.

YUV es un tipo de espacio de color compilado de color verdadero (espacio de color). Y'UV, YUV, YCbCr, YPbPr y otros nombres propios se pueden llamar YUV y se superponen entre sí. "Y" representa brillo (Luminancia, Luma), "U" y "V" son **[croma]

Hay dos categorías principales de formatos YUV: (formato plano), plano y (formato empaquetado). lleno.

1.planar: almacena Y primero, luego U, luego V

2.packed: almacenamiento cruzado yuv

También hay YUV420sp y YUV420p que usamos a menudo. hablar de.

YUV420sp: Un modo de dos planos, es decir, Y y UV se dividen en dos planos, y U y V están dispuestos de forma escalonada.

YUV420p: Primero almacena U, luego almacena V. Los rayos UV son continuos.

El tamaño de los datos de YUV420 es: brillo (fila × columna) + V (fila × columna/4) U (fila × columna/4), es decir: W H 3/2,

Los codificadores comunes aceptan datos planos I420 (YUV420P)

Los datos 4*4 I420 están organizados de la siguiente manera:

y1 y2 y3 y4

y5 y6 y7 y8

y9 y10 y11 y12

y13 y14 y15 y16

u1 u2 u3 u4

v1 v2 v3 v4

El vídeo capturado por la cámara de Android es NV21 (YUV420sP), que también está en formato YUV pero es un cruce entre U y V.

y1 y2 y3 y4

y5 y6 y7 y8

y9 y10 y11 y12

y13 y14 y15 y16

u1 v1 u2 v2

u3 v3 u4 v4

Al recopilar datos de la cámara, los datos UV deben convertirse a la secuencia anterior.

Cuadro I: cuadro de codificación intracuadro. El cuadro I suele ser el primer cuadro de cada GOP (una tecnología de compresión de video utilizada por MPEG). Se comprime moderadamente y se utiliza como referencia para puntos de acceso aleatorio. pueden considerarse imágenes. Los fotogramas pueden verse como el producto de la compresión de una imagen.

Cuadro P: cuadro de codificación predictiva directa, una imagen codificada que comprime la cantidad de datos transmitidos incorporando menos información redundante en tiempo que el cuadro codificado anterior en la secuencia de imágenes, también llamado cuadro de predicción

Cuadro B: Cuadro codificado por interpolación predictiva bidireccional, que tiene en cuenta la información de redundancia temporal entre el cuadro codificado antes de la secuencia de imágenes de origen y el cuadro codificado después de la secuencia de imágenes de origen para comprimir la imagen codificada que transmite la cantidad de datos. También llamado cuadro de predicción bidireccional;

Cuadro I: se puede descomprimir en una sola imagen completa a través del algoritmo de descompresión de video.

Cuadro P: debe consultar el cuadro I o el cuadro B anterior para generar una imagen completa.

Cuadro B: Es necesario hacer referencia al cuadro I o P anterior y al siguiente cuadro P para generar una imagen completa.

PTS: Sello de tiempo de presentación. PTS se utiliza principalmente para medir cuándo se muestra el fotograma de vídeo decodificado.

DTS: Decode Time Stamp. DTS identifica principalmente cuándo los datos del cuadro leídos en la memoria comienzan a enviarse al decodificador para su decodificación.

En ausencia de fotogramas B, el orden de DTS y PTS debe ser el mismo.

DTS se utiliza principalmente para la decodificación de vídeo y se utiliza en la etapa de decodificación. PTS se utiliza principalmente para la sincronización y salida de vídeo. Se utiliza durante la visualización.

Como se muestra arriba: la decodificación del cuadro I no depende de ningún otro cuadro. La decodificación del cuadro p depende del cuadro I o del cuadro P anterior. La decodificación del cuadro B depende del anterior. El fotograma I o P más reciente y el fotograma P más reciente después de él

libavformat

? decodificación La información requerida se utiliza para generar estructuras de contexto de decodificación y leer cuadros de audio y video y otras funciones; el protocolo de análisis de formato de audio y video proporciona una fuente de flujo de código de audio o video independiente para que libavcodec analice el flujo de código.

libavcodec

? Se utiliza para varios tipos de codificación y decodificación de sonido/imagen; esta biblioteca es el núcleo de la codificación y decodificación de audio y video y realiza las funciones de la mayoría de los decodificadores del mercado. La biblioteca libavcodec está incluida o utilizada por otros decodificadores importantes como ffdshow, Mplayer, etc.

libavfilter

?filtro (FileIO, FPS, DrawText) desarrollo de filtros de audio y vídeo, como marcas de agua, reproducción a doble velocidad, etc.

libavutil

? Una biblioteca que contiene algunas funciones de utilidad pública, incluidas operaciones aritméticas de caracteres;

libswresample

? formatos.

libswscale

? (conversión de formato de video original) utilizado para escalado de escenas de video y conversión de mapeo de color o conversión de formato de imagen, como rgb565, rgb888, etc., y yuv420. , etc. Convertir.

Proceso de decodificación de audio y vídeo:

Proceso de decodificación ffmpeg: