将多个 JPEG 合并为一个视频

将多个 JPEG 合并为一个视频

我以 1 秒为间隔从网络采集图像。我想找到一种方法来创建这些图像的视频。由于相机是静止的,并且图片可能长时间不会改变,所以我希望能够丢弃本质上重复的图像,以便缩短生成的视频。

答案1

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

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

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

答案2

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

-metric type

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

要制作视频,您也可以使用avconvfromlibav包执行此操作。它唯一可能的缺点是它要求所有文件按顺序命名,没有任何间隙,并且必须从 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

相关内容