我正在运行以下ffmpeg命令,该命令将单个图像转换为10秒慢速变焦到照片中心。
正如你所看到的,我目前有boxblur
看起来像我想要的,但它被应用到整个10秒剪辑。我想模糊前3秒,然后动画模糊的半径从它的当前值boxblur=10:9
到boxblur=0:0
从3.0 - 4.0秒(24帧在24p)。
ffmpeg -loop 1 -framerate 24 -i image.jpg -vf "boxblur=10:9,zoompan=z='min(zoom+0.0005,1.12)':x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)':d=240:s=hd1080:fps=24" -c:v libx264 -pix_fmt yuv420p -t 10 -s hd1080 -crf 20 video.mp4
关于如何实现这一点有什么帮助吗?
使用
ffmpeg -loop 1 -framerate 24 -i image.jpg -filter_complex "[0:v]zoompan=z='min(zoom+0.0005,1.12)':x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)':d=240:s=hd1080:fps=24,split[base][blur];[blur]trim=duration=4,boxblur=10:9,format=yuva420p,fade=out:st=3:d=1:alpha=1[blurred];[base][blurred]overlay" -c:v libx264 -pix_fmt yuv420p -t 10 -crf 20 video.mp4
boxblur选项不支持基于时间的动画,所以要做到这一点的方法是执行zoompan,然后拆分结果。在其中一个子流中,前4秒应用boxblur。修剪是不必要的,但会加快执行多少。然后该流的像素格式添加了一个alpha通道,这是完全不透明的。从3到4秒,淡出仅应用于alpha通道。然后将结果叠加到另一个子流上。当一个带有alpha的流覆盖在另一个流上时,alpha值决定了顶层的不透明度。由于alpha从3秒逐渐淡出到4秒,顶层"交叉淡出"到基础层。这实际上减少了boxblur为0。