使用基于EXIF日期增量的图像持续时间创建图像幻灯片(JPG)

时间:2015-03-22 08:32:56

标签: image slideshow exif

我想创建照片幻灯片,其中每张照片的显示持续时间以某种方式基于它与其后续版本之间的EXIF日期差异。 这些照片是(不规则拍摄的)一个特定场景(比如正在建造的建筑物)的图像,我想创建某种按时间顺序排列的线性幻灯片。当更多可见的东西发生时,我拍了更多的照片,当没有真正发生的事情时,我拍的更少,我想在幻灯片中补偿这一点。

我不关心结果是否是远程控制图像查看器的GIF动画,电影文件或bash脚本。如果需要一个应用程序,它可以是商业的(但应该是负担得起的) - 虽然我当然更喜欢基于OSS的解决方案。只有最终结果必须是可移植的(Linux,OS X,Windows)并且基于开放数据格式。

我当然可以编写一个脚本,它占用所有照片的最小时间增量并在必要时复制其他照片,并在结果列表中创建一个固定时间间隔的幻灯片,但我想知道是否有需要较少量的解决方案工作

奖励积分奖励

  • 可配置的伸展因子(每天秒数等)
  • 对数时间缩放(因此在很短的时间间隔内拍摄的照片不会在1/100秒内保持可见状态)
  • 执行此操作的iPhoto / Apple Photos导出插件。 ; - )

1 个答案:

答案 0 :(得分:1)

这是让你开始的事情,因为我今天下午感到无聊。基本上,它会浏览当前目录中的所有JPG照片并提取每个照片的拍摄时间。然后将时间转换为纪元秒,并输出所有照片的名称及其相关时间并按顺序排序:

#!/bin/bash

# Accept JPG and/or jpg as file extension
shopt -s nocaseglob

# Go through all photos
for f in *.jpg; do

   # Use jhead to get date and convert that to epoch seconds for easy sorting
   epoch=$(jhead "$f" | awk '/^Date/{s=$3 " " $4;gsub(/:/," ",s);print mktime(s)}')

   # Output result
   echo $epoch:$f
done | sort -n

<强>输出

1395388852:P3210013.JPG
1395388894:P3210014.JPG
1395388908:P3210015.JPG
1395388917:P3210016.JPG
1395388941:P3210017.JPG
1395499771:P3220018.JPG

如果您想制作动画GIF,可以使用ImageMagick(我使用homebrew在OSX上安装),如下所示:

convert -delay 400 P5280158.JPG -delay 200 P5280159.JPG -loop 0 anim.gif

这将使动画GIF持有第一张照片4秒,第二张照片持续2秒,无限循环(-loop 0),如下所示:

enter image description here