Estoy tratando de desenfocar una parte de un video usando FFmpeg (específicamente para desenfocar una cara).
He estado tratando de usar una combinación de edición de línea de tiempo y varios filtros de desenfoque, pero no puedo encontrar una manera de desenfocar solo una sección del video.
Es posible aplicar un desenfoque temporal y espacial a un segmento / sección, suponiendo que el área que desea desenfocar sea una ubicación estática.
Imagen original de cachorro de laboratorio negro.
Usando una imagen de máscara
Imagen de máscara PNG en escala de grises y la imagen borrosa resultante.
Puede crear una imagen de máscara de escala de grises para indicar el área que se va a desenfocar. Para facilitar su uso, debe ser del mismo tamaño que la imagen o el video que desea desenfocar.
El área blanca es donde se producirá el desenfoque, pero esto se puede revertir fácilmente con el filtro de negación, por ejemplo:[1:v]negate[mask];[0:v][mask]alphamerge,boxblur=10[alf]...
Puede usar el filtro geq para generar una máscara como un gradiente.
Nota: Los números de desplazamiento xey en superposición ( 60y 30en este ejemplo) deben coincidir con los desplazamientos de recorte.
Lo que hace este ejemplo:
Recorte la copia para que tenga el tamaño del área que se va a desenfocar. En este ejemplo: un cuadro de 200x200 píxeles que está a 60 píxeles a la derecha ( xeje) y 30 píxeles hacia abajo ( yeje) desde la esquina superior izquierda.
Desenfoque el área recortada.
Superponga el área borrosa usando los mismos parámetros xy ydel filtro de recorte .
Múltiples desenfoques sobre áreas específicas (sin máscara)
Áreas borrosas en la parte superior izquierda, cerca del centro e inferior.
Muchas gracias por su respuesta. Todo eso tiene mucho sentido. Como nota al margen, ¡también hizo que el filtro dividido tuviera sentido finalmente! Además, ¿podría ser posible mediante expresiones aritméticas mover dinámicamente el cuadro borroso alrededor de la imagen? ¿IE con el propósito de desenfocar la cara de alguien mientras se mueve de manera no lineal?
occvtech
¡Gracias de nuevo! Voy a echarle un vistazo. Sé que un editor no lineal sería 1000 veces más fácil aquí, pero espero procesar por lotes múltiples archivos y no quiero esperar el proceso de importación / fotograma clave / exportación. ¡Gracias de nuevo!
occvtech
1
¿FFMPEG ofrece otras formas además de cajas, como círculos?
Dom
@LordNeckbeard Estoy usando cmd y quiero usar el Ejemplo 1, pero cuando ejecuto el código obtengo este errorUnrecognized option 'filter_complex[0:v]crop=200:200:60:30,boxblur=10[fg];[0:v][fg]overlay=60:30[v]-map [v] -map 0:a -c:v libx264 -c:a copy -movflags +faststart output.mp4'. Error splitting the argument list: Option not found
Jim
1
@ Jim, noté que a mi comando de ejemplo le faltaba una cita. Tu comando debería verse así:ffmpeg -i input.mp4 -filter_complex "[0:v]crop=200:200:60:30,boxblur=10[fg]; [0:v][fg]overlay=60:30[v]" -map "[v]" -map 0:a -c:v libx264 -c:a copy -movflags +faststart output.mp4
llogan
0
Para el caso en que a uno no le gusta el borde afilado del desenfoque, hice un script que superpone diferentes etapas de desenfoque para que el borde no sea nítido y se vea así:
Puede cambiar los parámetros en las últimas y penúltimas líneas, los dos últimos parámetros entre las marcas de cuatación son la ruta de su video y el video de salida (suponiendo que se coloquen en el directorio de trabajo). En la penúltima línea:
los primeros dos números indican el tamaño del área inicial a la que se aplicará el desenfoque máximo,
los segundos dos indican las coordenadas x e y de los mismos,
los terceros dos indican los tiempos en segundos cuando se debe aplicar el desenfoque,
"25" en este ejemplo indica que habrá 25 cuadros aplicados uno encima del otro)
el siguiente "1" indica que los cuadros más grandes con menos desenfoque deberían ser solo un píxel más anchos que sus predecesores
el segundo "1" indica que el desenfoque debería aumentar en uno hasta un máximo de 25 (desde arriba)
"30" indica el margen que se tiene en cuenta para aplicar el desenfoque, por lo que aumentar esto hace que el desenfoque respete más su entorno. El aumento de este valor también resuelve el error enviado por mensaje de texto comoInvalid chroma radius value 21, must be >= 0 and <= 20
Al ejecutarlo, se debe obtener una salida como la siguiente (se escribe en un archivo que se puede ejecutar e imprimir en la salida que se puede copiar y ejecutar):
Unrecognized option 'filter_complex[0:v]crop=200:200:60:30,boxblur=10[fg];[0:v][fg]overlay=60:30[v]-map [v] -map 0:a -c:v libx264 -c:a copy -movflags +faststart output.mp4'. Error splitting the argument list: Option not found
ffmpeg -i input.mp4 -filter_complex "[0:v]crop=200:200:60:30,boxblur=10[fg]; [0:v][fg]overlay=60:30[v]" -map "[v]" -map 0:a -c:v libx264 -c:a copy -movflags +faststart output.mp4
Para el caso en que a uno no le gusta el borde afilado del desenfoque, hice un script que superpone diferentes etapas de desenfoque para que el borde no sea nítido y se vea así:
En lugar de esto:
Es un script de python:
Puede cambiar los parámetros en las últimas y penúltimas líneas, los dos últimos parámetros entre las marcas de cuatación son la ruta de su video y el video de salida (suponiendo que se coloquen en el directorio de trabajo). En la penúltima línea:
Invalid chroma radius value 21, must be >= 0 and <= 20
Al ejecutarlo, se debe obtener una salida como la siguiente (se escribe en un archivo que se puede ejecutar e imprimir en la salida que se puede copiar y ejecutar):
fuente