FFmpeg滤镜:制作图片视频流

iPhone相册有个“为你推荐”功能,它会挑选一些照片形成一个主题,点击后可以像视频一样播放。那么,怎样才能把多张照片转成一个视频文件呢?

使用FFmpeg可以这么来做:

ffmpeg -f image2 -framerate 0.5 -i D:\MTest\IMG%02d.jpg -s 720x480 -r 15 D:\MTest\outimgs.mp4

首先,你要把源图片放在同一个文件夹里,并且通过文件名来控制各张图片在视频中出现的先后次序。文件名必须统一格式,形如IMG%02d.jpg。具体而言,就是:IMG01.jpg,IMG02.jpg,……IMG99.jpg。数字小的先于数字大的。文件名的前半部分不重要,保持相同即可,关键是后半部分的数字必须采用相同格式,并且是连续的。

上面这条FFmpeg命令行的意思是:将D:\MTest文件夹下面的所有IMGxx.jpg文件,制作成一个视频文件outimgs.mp4,每张图片显示2秒钟(折算成帧率为0.5fps,表示为-framerate 0.5),图片缩放为统一的尺寸720x480,并且目标视频文件的帧率为15fps。

问题来了:怎样在图片切换的时候加入转场效果呢?

有个“笨办法”,大致思路是:先将单张图片生成一个临时的视频文件,然后在视频的头尾分别加上淡入、淡出效果;等所有图片都这样生成对应的视频文件之后,再将各段视频文件依次连接,合并成一个大文件。下面我们来看一下具体步骤。

先对第一张图片这么处理:

ffmpeg -f image2 -framerate 0.33 -i D:\MTest\IMG01.jpg  -s 720x480 -r 15 -y D:\MTest\tmp.mp4

ffmpeg -i D:\MTest\tmp.mp4 -vf fade=t=in:st=0:d=1,fade=t=out:st=2:d=1 D:\MTest\outimg1.mp4

意思是:先将IMG01.jpg生成一个3秒长度的视频文件tmp.mp4,然后对这个视频文件加fade滤镜处理,即在0~1秒这一段加入淡入效果(t=in),在2~3秒这一段加上淡出效果(t=out),最终生成视频文件outimg1.mp4。

假设我们总共有三张图片。其他两张图片的处理方法类似,如下:

ffmpeg -f image2 -framerate 0.33 -i D:\MTest\IMG02.jpg  -s 720x480 -r 15 -y D:\MTest\tmp.mp4

ffmpeg -i D:\MTest\tmp.mp4 -vf fade=t=in:st=0:d=1,fade=t=out:st=2:d=1 D:\MTest\outimg2.mp4

ffmpeg -f image2 -framerate 0.33 -i D:\MTest\IMG03.jpg  -s 720x480 -r 15 -y D:\MTest\tmp.mp4

ffmpeg -i D:\MTest\tmp.mp4 -vf fade=t=in:st=0:d=1,fade=t=out:st=2:d=1 D:\MTest\outimg3.mp4

最后,将outimg1.mp4、outimg2.mp4和outimg3.mp4合并成一个视频文件即可,命令行如下:

ffmpeg -i D:\MTest\outimg1.mp4 -i D:\MTest\outimg2.mp4 -i D:\MTest\outimg3.mp4 -filter_complex "[0:0][1:0][2:0]concat=n=3:v=1:a=0" D:\MTest\outimg_all.mp4

这里使用了concat滤镜,前面的参数指定了三个视频文件的视频流作为输入,后面的参数:n表示总共有3段视频参与连接,v表示输出的视频流数量,a表示输出的音频流数量。

大功告成。赶紧播放一下outimg_all.mp4看看效果吧!

猜你喜欢

转载自blog.csdn.net/happydeer/article/details/88726151
今日推荐