Cómo desenfocar condicionalmente un video usando FFMPG

Cómo desenfocar condicionalmente un video usando FFMPG

Quiero desenfocar condicionalmente un video. Como para un video de 30 segundos, desde 2 a 10 segundos se desenfoca un área diferente a la de 12 a 20 segundos.

Pero hasta ahora solo puedo desenfocarlo una vez. El siguiente es el comando que intenté para lograr el objetivo. UsandoExpresiones aritémicas

ffmpeg -y -i with_out_sound.mp4 filter_complex [0:v]boxblur=10:enable='between(t,2,10)'[bg],[0:v]crop=206:169:3 2:121[fg],[bg][fg]overlay=32:121:enable='between(t,2,10)'[tmp];[0:v]boxblur=10: enable='between(t,12,20)'[bg],[0:v]crop=206:169:42:100[fg],[bg][fg]overlay=42:100 :enable='between(t,12,20)'[tmp2];[tmp][tmp2]concat[tmp3] -map [tmp3] with_out_sou ndd.mp4

pero el comando anterior primero desenfoca (2-10) video completo y luego concat completa video nuevamente con desenfoque (12-20), así obtengo un video de 60 segundos en lugar de 30 segundos.

ffmpeg -y -i with_out_sound.mp4 -filter_complex [0:v]boxblur=10:enable='between(t,2,10)'[bg];[bg]crop=206:169:32:121[fg];[bg][fg]overlay=32:121:enable='between(t,2,10)'[tmp],[tmp]b oxblur=10:enable='between(t,12,20)'[tbg],[tmp]crop=206:169:42:100[tfg],[tbg][tfg]overlay=42:100:enable='between(t,12,20)'[tmp2] -map "[tmp2]" with_out_soundd.mp4

Pero en este caso empiezo a recibir el error El especificador de flujo 'tmp' en la descripción del gráfico de filtro no coincide con ningún flujo.

Estoy usando la última versión de ffmpeg en Windows.

Respuesta1

Usar

ffmpeg -y -i with_out_sound.mp4 -filter_complex \
"[0:v]boxblur=10:enable='if(between(t,2,10)+between(t,12,20),1,0)'[bg];
 [0:v]crop=206:169:32:121[fg1];[0:v]crop=206:169:42:100[fg2];
 [bg][fg1]overlay=32:121:enable='between(t,2,10)'[tmp];
 [tmp][fg2]overlay=42:100:enable='between(t,12,20)'[tmp2]"
-map [tmp2] with_blur.mp4

Puedeagregarmúltiples condiciones para hacer el desenfoque en una ejecución de filtro y luego usar dos superposiciones. Se evita el concat. Si desea utilizar concat, debe recortar las dos secuencias, pero esto es más fácil.

El condicional utilizado es el if(x,y,z)que evalúa xy devuelve ysi es verdadero, en caso contrario z.

información relacionada