La función del filtro es principalmente procesar los datos de audio y video originales para lograr varios efectos. Como superponer marcas de agua, voltear y hacer zoom en videos, etc.
La siguiente figura muestra el proceso de transcodificación normal, el filtro está en medio de la decodificación y la codificación, y la línea punteada indica que es opcional.
Use el comando para ver los filtros compatibles con ffmpeg
ffmpeg -filtros
Ver parámetros detallados de un filtro
ffmpeg -h filtro=almohadilla
La figura anterior muestra la función y los parámetros requeridos del filtro de almohadilla.
Los filtros en ffmpeg se pueden dividir en:
- filtro de fuente solo salida
- filtro de audio filtro de audio
- filtro de video filtro de video
- filtro multimedia filtro complejo
- filtro de fregadero solo entrada
Aquí se deben mencionar dos filtros especiales: buffer y buffersink .
(1) Búfer: el búfer de filtro representa la fuente en el gráfico de filtro y los datos originales se ingresan en este nodo de filtro. Al llamar a la función proporcionada por el filtro (como av_buffersrc_add_frame), el marco que se filtrará se puede transmitir al proceso de filtrado. Al crear la instancia de filtro, debe proporcionar algunos parámetros necesarios sobre el formato del cuadro de entrada (como: base de tiempo, ancho y alto de la imagen, formato de píxel de la imagen, etc.).
(2) buffersink: un filtro especial, el filtro buffersink representa el nodo de salida en el gráfico de filtro, y los datos procesados se emiten desde este nodo de filtro. Al llamar a la función proporcionada por el filtro (como av_buffersink_get_frame), se puede proporcionar el marco después de ser filtrado por el proceso de filtrado.
A excepción de los filtros fuente y sumidero, todos los demás filtros tienen al menos una entrada y al menos una salida.
También se puede dividir simplemente en filtros simples y filtros complejos.
Filtro simple: solo una entrada y salida, use -vf (filtro de video), -af (filtro de audio) en la línea de comando
Filtro complejo: con múltiples entradas y salidas, use -lavfi o -filter_complex en la línea de comando
En la siguiente figura, se proporciona un ejemplo oficial de filtergrpah:
En este gráfico de filtros, podemos ver que usando 4 filtros
1. Use el filtro dividido para copiar el flujo de entrada en dos salidas de flujo, una llamada principal y otra tmp
2. Use el filtro de recorte para recortar el flujo de tmp
3. Use vflip para voltear verticalmente la transmisión tmp
4. Use la superposición para superponer la transmisión tmp en la transmisión principal
Se puede expresar usando la línea de comando de la siguiente manera
ffmpeg -i INPUT -vf 'split [principal][tmp]; [tmp] crop=iw:ih/2:0:0,vflip [voltear]; [principal][voltear] superposición=0:H/2' SALIDA
Los filtros de la misma ruta están separados por comas (',') y los filtros de diferentes rutas están separados por punto y coma (';').
Sintaxis de filtro
Sintaxis de filtro
filter_name=param_name1=param_value1:param_name2=param_value2
filter_name: es el nombre del filtro, debe tener, sus parámetros son opcionales, separados por ":" o "+", puede tener nombres de parámetros o no;
Por ejemplo:
ffmpeg -i video.avi -filter_complex 'extractplanes=y+u+v[y][u][v]' -map '[y]' y.avi -map '[u]' u.avi -map '[ v]' v.avi
Este filtro que extrae los componentes Y, U y V del video tiene tres salidas, que son [y][u][v]. Después de la extracción, guarde diferentes salidas en diferentes archivos.
Un filtro sin entrada de audio y video se llama filtro de fuente
Un filtro sin salida de audio y video se llama filtro sumidero
Sintaxis de la cadena de filtros
filtro1,filtro2,....
Es una combinación de múltiples filtros, separados por comas, y cada filtro es la entrada y la salida del filtro anterior;
ffmpeg -i audio.aac -filter_complex "aresample=async=16000,adelay=316397,volume=1.0" -acodec libfdk_aac -y salida.mp4
Aquí se utilizan tres filtros, respectivamente, muestra, retraso, volumen, para formar una cadena de filtros;
Gramática de filtergraph
filtrocadena1;filtrocadena2;...
Es una combinación de varias cadenas de filtros, separadas por un punto y coma ";",
ffmpeg -i INPUT -filter_complex "dividir [principal][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [principal][flip] overlay=0:H/2" SALIDA
Aquí se utilizan tres cadenas de filtros, a saber:
split [main][tmp]; // solo tiene un filtro, es decir split, tiene una entrada por defecto, es decir, el marco decodificado de INPUT;
Hay dos salidas, identificadas por [main], [tmp];
[tmp] crop=iw:ih/2:0:0, vflip [flip] // Consta de dos filtros, crop y vflip, uno de entrada [tmp], uno de salida [flip];
[main][flip] overlay=0:H/2 // Consiste en un filtro, a saber, overlay, con dos entradas, a saber, [main][flip], una salida predeterminada;
filtros comunes
- scale: escalado del video/imagen
- superposición: superposición de video/imagen
- recorte: recorte de video/imagen
- recortar: interceptar videoclips
- rotar: rotar el video en cualquier ángulo
- película: cargue videos e imágenes de terceros
- yadif: desentrelazado
- almohadilla: video de relleno
- dibujar texto: agregar texto