
Quero desfocar o vídeo condicionalmente, como para um vídeo de 30 segundos, de 2 a 10 segundos desfocar uma área diferente de 12 a 20 segundos.
Mas só consegui desfocar 1 vez até agora. A seguir está o comando que tentei atingir o objetivo. UsandoExpressões Aritméticas
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
mas o comando acima primeiro desfoca o vídeo completo (2-10) e depois concatena o vídeo completo novamente com desfoque (12-20), para obter um vídeo de 60 segundos em vez 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
Mas, neste caso, começo a receber o erro O especificador de fluxo 'tmp' na descrição do filtro não corresponde a nenhum fluxo.
Estou usando a versão mais recente do ffmpeg no Windows.
Responder1
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
Você podeadicionarvárias condições para fazer o desfoque em uma execução de filtro e, em seguida, usar duas sobreposições. A concat é evitada. Se quiser usar o concat, você deve cortar os dois fluxos, mas isso é mais fácil.
A condicional usada é a if(x,y,z)
que avalia x
e retorna y
if true, else z
.