我想有条件地模糊视频,比如 30 秒的视频,2-10 秒的模糊区域与 12-20 秒的不同。
但到目前为止我只能模糊一次,以下是我尝试实现目标的命令。使用算术表达式
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
但是上述命令首先模糊(2-10)整个视频,然后再用模糊(12-20)连接整个视频,所以我得到了 60 秒的视频而不是 30 秒。
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
但在这种情况下,我开始收到错误,过滤器图描述中的流说明符“tmp”与任何流都不匹配。
我在 Windows 上使用 ffmpeg 最新版本。
答案1
使用
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
你可以添加多个条件在一次过滤器执行中执行模糊,然后使用两个叠加。避免了连接。如果您想使用连接,您应该修剪两个流,但这更容易。
所使用的条件是,如果为真则if(x,y,z)
评估x
并返回,否则则返回。y
z