我懂了这一页关于如何用数字方式处理图像。但我有一个图像目录,例如如下所示:
ADAM SANDLER.jpg
JOHN DOE.jpg
SAM SMITH.jpg
我想根据该目录中按字母顺序排列的所有图像创建视频幻灯片。
有什么办法可以做到这一点?
编辑
最后,我尝试制作一个垂直视频发布到 Instagram。这些照片是肖像,所以它需要是一个“垂直”视频。FFMPEG 似乎在这方面遇到了问题,至少在 Quicktime 中播放视频似乎不起作用。它需要是一个 15 秒的视频,并且有 25 张图片。
这是我正在运行的命令,当我在 Quicktime 中打开它时,它只是显示黑色。当我在 VLC 中打开它时,它正在播放,但只显示前几帧。
ffmpeg -r 1 -i img%03d.jpg -c:v libx264 -pix_fmt yuv420p out.mp4
答案1
您可以使用 concat 解复用器。
首先,准备一个文本文件,其中包含按所需顺序排列的所有图像列表。在 Windows 中,您可以从命令提示符在文件夹中运行此命令:
dir *.jpg /b /on > list.txt
现在在每行前面加上file '
并在后面加上'
,这样每行看起来就像
file 'ADAM SANDLER.jpg'
由于 fps 过滤器中存在错误,您可能需要复制最后一行。
现在,如果所有图像都是相同大小,请运行
ffmpeg -f concat -r 1/2 -i list.txt -crf 20 -vf fps=8,format=yuv420p video.mp4
如果不是,并假设1920x1080
输出视频大小,运行
ffmpeg -f concat -r 1/2 -i list.txt -vf "scale=iw*min(1920/iw\,1080/ih):ih*min(1920/iw\,1080/ih), pad=1920:1080:(1920-iw*min(1920/iw\,1080/ih))/2:(1080-ih*min(1920/iw\,1080/ih))/2,fps=8,format=yuv420p" -crf 20 video.mp4
是-r 1/2
输入帧率,决定每幅图像的持续时间,在本例中为 2 秒。我将输出帧率设置为,8
因为有些播放器可能无法播放输出。CRF 控制质量。较低的值会产生更好的结果,但文件会更大。
对于编辑的Q:
使用
ffmpeg -framerate 25/15 -i img%03d.jpg -c:v libx264 -vf "scale=iw*min(1080/iw\,1080/ih):ih*min(1080/iw\,1080/ih), pad=1080:1080:(1080-iw*min(1080/iw\,1080/ih))/2:(1080-ih*min(1080/iw\,1080/ih))/2,fps=30000/1001,format=yuv420p" out.mp4
答案2
您可以使用 ImageMagick 实用程序中的“转换”命令创建动画 gif:
convert -delay 500 -loop 0 *.jpg myimage.gif
这将连接 jpg 文件,以永久循环的方式每隔半秒显示一个文件。