FFmpeg滤镜:制作图片视频流(续2)

前几日登录CSDN,发现有100多条私信。哎哟喂,确实很久没来这里了…其中有一条是这样的:

点开链接看了新娘,哦,不,看了示例视频,其实就是一个Zoom-out效果。既然有人诚心诚意地发问,那我就大发慈悲地在前文的基础上再写个续篇吧。简单回答这位网友的疑问:使用一个zoompan滤镜就行了。关于zoompan的各个参数说明,可以参考FFmpeg的官方说明:FFmpeg Filters Documentation

 结合官网给出的示例,我们把前文第一步的命令行改写成:

ffmpeg -f image2 -framerate 0.33333 -i D:\MTest\bmw.jpg -vf "zoompan=z='min(zoom+0.01,1.5)':d=90:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)'" -s 720x480 -r 15 -y D:\MTest\Vid1-zoomin.mp4

解释一下:拿单张图片bwm.jpg作为输入源,后面接一个zoompan滤镜,参数z指定了缩放比例,是一个表达式min(zoom+0.01,1.5),这里的zoom代表上一次计算得到的参数z值,默认是1,也就是说,参数z会分别取值为1.01、1.02、1.03… 经过90次计算后z的值会超过1.5,而因为min()函数的作用,z的取值实际不会超过1.5,即源图片最多放大1.5倍。参数d表示时长,单位是帧,即zoompan滤镜在接收一帧图像输入后,会持续输出90帧(输出帧率通过fps参数指定,默认是25),整个缩放效果也在这90帧里体现。

再来看x、y两个参数。官网没有说得很明白它们代表什么意思,我的理解是在源图片上进行裁减的起始点坐标,裁剪出来的内容再按zoom指定的比例进行缩放。iw和ih分别代表源图像的宽度和高度。因为zoom的值一直在变,所以坐标(x, y)也是动态的,大致过程示意如下:

 最终生成的MP4视频文件保存为Vid1-zoomin.mp4。快播放这个视频看看效果吧!

遗憾的是,上面这条指令实现的是Zoom-in效果,而网友要的是Zoom-out。那也简单啊,把上面的过程反过来,修改z参数即可,如下:

ffmpeg -f image2 -framerate 0.33333 -i D:\MTest\bmw.jpg -vf "zoompan=z='max(1.5-0.01*on,1)':d=90:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)'" -s 720x480 -r 15 -y D:\MTest\Vid1-zoomout.mp4

新引入一个on参数,代表的是输出帧的计数,于是参数z的取值会是1.49、1.48、1.47…… 一直递减到1。生成的Vid1-zoomout.mp4播放效果如下:

 完美收工!(‾◡◝)

猜你喜欢

转载自blog.csdn.net/happydeer/article/details/122385254