
Tengo un video en el que quiero difuminar una parte de cada cuadro (cara). Tengo las coordenadas del cuadro delimitador de la cara y estas podrían cambiar con cada fotograma.
Después de revisar la documentación, entendí que la forma de hacerlo es aplicar una cadena de filtros.
- Filtro de recorte para recortar la pieza.
- Desenfocar el vídeo recortado
- Superponga el vídeo recortado y borroso en la ubicación original
ffmpeg -i input_video.mp4 -filter_complex "[0]crop=200:200:60:30[cropped];[cropped]avgblur=10[croppedblurred];[0][croppedblurred]overlay=60:30" output_video.mp4
Esto funciona bien para las coordenadas del cuadro delimitador que no cambian a lo largo del vídeo. ¿Cómo puedo hacer esto para las ubicaciones de los cuadros delimitadores que podrían cambiar con cada cuadro?
Respuesta1
Si conoce las marcas de tiempo, puede usar trim
el filtro para configurar la cadena de filtros necesarios para una duración específica en el video de entrada. El siguiente ejemplo establece tres cadenas diferentes de filtros cada 10 segundos. Todo lo que necesitas recordar es usar nombres diferentes [ ]
para cada paso de -filter_complex
.
ffmpeg -i input.mp4 -filter_complex ^
^"[0:v]trim=start=0:end=10[a]; ^
[0:v]trim=start=10:end=20,setpts=PTS-STARTPTS[b]; ^
[0:v]trim=start=20,setpts=PTS-STARTPTS[c]; ^
[a] here insert your chain of filters for this part of video [aa]; ^
[b] here insert your chain of filters for this part of video [bb]; ^
[c] here insert your chain of filters for this part of video [cc]; ^
[aa][bb]concat[aaa]; ^
[aaa][cc]concat[video]^" ^
-map [video]:v -map 0:a -c:v libx264 -crf 18 -c:a copy output.mp4
Respuesta2
No creo que sea práctico solucionarlo "manualmente" (sin programar).
En teoría podemos utilizarEvaluación de expresionespara configurar las coordenadas x
y y
según el número de fotograma o el tiempo del fotograma.
Construcción de patrón sintético (para demostración):
ffmpeg -y -f lavfi -r 10 -i testsrc=size=192x108:rate=1:duration=300 -vf setpts=N/10/TB -vcodec libx264 -pix_fmt yuv444p -crf 17 input_video.mp4
Ejemplo de colocación del área borrosa según el número de fotograma:
ffmpeg -y -i input_video.mp4 -filter_complex "[0]avgblur=10,crop=50:50:'if(lte(n,100), n+10, if(lte(n,200), 210-n, 10))':'if(gte(n,100), 5+(n-100)/5, 5)'[blurredcropped];[0][blurredcropped]overlay='if(lte(n,100), n+10, if(lte(n,200), 210-n, 10))':'if(gte(n,100), 5+(n-100)/5, 5)':format=yuv444" -vcodec libx264 -pix_fmt yuv444p -crf 17 output_video.mp4