将多个JPEG合并为一个video

我正在以1秒的间隔从网络中捕获图像。 我想找到一种方法来创建这些图像的video。 由于相机是静止的,并且可能会有很长一段时间不会改变图像,我希望能够丢弃基本上重复的图像,以便能够缩短我生成的video。

这将获取目录中的所有.jpeg文件并创建AVIvideo。

mencoder "mf://*.jpeg" -mf fps=20 -o out.avi -ovc lavc -lavcopts vcodec=msmpeg4v2:vbitrate=640 

检测“重复”图像会增加一些复杂性。 findimagedupes程序可能是一个选项。

为了分析静止图像之间的相似性,您可以使用imagemagick包中的compare命令。 您可能需要一个-metric参数。 我个人并没有玩很多,但你可以在这里阅读:

 -metric type Output to STDERR a measure of the differences between images according to the type given metric. 

要制作video,您还可以使用libav包中的avconv执行此libav 。 唯一可能的缺点是它要求所有文件按顺序命名,没有任何间隙,并且必须从1开始。在运行命令之前,您需要一个脚本来准备目录。

顺序链接 (脚本!不是!我写的)

 #!/usr/bin/python """ Create symlinks from a set of paths returned by glob for FFmpeg to read. Thanks to: http://programmer-art.org/articles/tutorials/ffmpeg-time-lapse """ import os import glob import sys files = sorted(glob.glob("/home/txoof/temp/779OLYMP/*.JPG")) outdir = "/home/txoof/temp/output/" if not os.path.exists(outdir): os.makedirs(outdir) for i, f in enumerate(files): os.symlink(f, os.path.join(outdir, "%06d.jpg" % (i + 1))) 

您需要手动编辑此脚本中的目录,只需设置文件所在的目录以及链接所在的目录(可以是临时目录,然后将被删除)。

完成后,您将拥有一个以000001.jpg开头的文件目录,您可以运行以下命令:

 avconv -i /home/txoof/temp/output/%06d.jpg -c:v copy -an video.avi