如何按拍摄日期/时间排序导出 Shotwell 照片?

如何按拍摄日期/时间排序导出 Shotwell 照片?

我用几位朋友相机拍摄的照片制作了一张相册。假设所有文件的 EXIF 曝光日期和时间都是正确的。但是文件名不一致(例如,我的相机从 IMG0001 开始,但我朋友的手机相机从 pic1234.jpg 开始,我自己的手机从 pic5678.jpg 开始)。

有没有办法使用 Shotwell 将每个人的文件导出到一个普通目录中,并重写文件名,以便图片按时间顺序排列?然后,当我在另一台计算机上使用另一个图像查看器(或使用 Shotwell 本身的文件浏览模式)幻灯片放映这些文件时,它们将按正确的时间顺序显示。

例子。 如果我有这六个文件……

  1. 我的照相机:IMG_0001.JPG- EXIF 曝光日期2012/12/25 12:05:00
  2. 我的照相机:IMG_0002.JPG- EXIF 曝光日期2012/12/25 12:11:00
  3. 我自己的电话:图片5678.jpg- EXIF 曝光日期2012/12/25 12:09:00
  4. 我自己的电话:图片5679.jpg- EXIF 曝光日期2012/12/25 12:15:00
  5. 朋友电话:图片1234.jpg- EXIF 曝光日期2012/12/25 12:08:00
  6. 朋友电话:图片1235.jpg- EXIF 曝光日期2012/12/25 12:18:00

...然后我想使用如下文件名导出它们:

  1. 20121225_120500-IMG_0001.JPG
  2. 20121225_120800-pic1234.jpg
  3. 20121225_120900-pic5678.jpg
  4. 20121225_121100-IMG_0002.JPG
  5. 20121225_121500-pic5679.jpg
  6. 20121225_121800-pic1235.jpg

以便在使用任何图像浏览器浏览时它们都能按正确的顺序显示。

以下脚本可以达到此目的,但并未集成到 Shotwell 中,这正是问题的关键所在,如果图片未使用 Exif 数据导出,则脚本将会(正常)失败:

#!/usr/bin/python

import pyexiv2
import sys
import shutil

def getTimestamp(f):
  metadata = pyexiv2.ImageMetadata(f)
  metadata.read()
  try:
    d = metadata['Exif.Image.DateTime']
    return d.value.strftime('%Y%m%d%H%M%S')
  except Exception as e:
    return "00000000000000"

if len(sys.argv) > 1:
  for f in sys.argv[1:]:
    try:
      timestamp = getTimestamp(f)
      prefix = "%s_" % timestamp
      if f[0:len(prefix)] == prefix:
        print "File %s was already renamed, not renaming again" % (f)
      else:
        nn = "%s%s" % (prefix, f)
        shutil.move(f, nn)
        print "File %s renamed to %s" % (f, nn)
    except Exception as e:
      print "File %s not renamed (%s)" % (f, e)
else:
  print "Usage: %s <JPG files with Exif tags>" % (sys.argv[0])

答案1

最简单的方法是将其分成两部分。

  • 首先,将 Shotwell 中的所有图像导出到一个文件夹中。

  • 二、使用芘尼美拉为文件提供您想要的命名模式。

以下是如何使用 pyrenamer 的示例:

比利奈梅尤

这是我用来尝试匹配您问题中的示例的代码:

{imageyear}{imagemonth}{imageday}_{imagehour}{imageminute}{imagesecond}_{num3+1}.jpg  

它生成的文件名如下所示:

pyrenamer 输出样本

请注意,您可以在大括号中的值之间添加字符(例如 {imageday} 和 {imagehour} 之间的下划线),以使输出更易于阅读。

最后的 {num3+1} 位是可选的,但如果您碰巧有两张照片在同一秒拍摄,它会有所帮助,并使整个画面更容易阅读。

如果你这样做,发现一个或多个设备时钟关闭,你可以使用 Shotwell 修改时间/日期,然后重新执行 pyrenamer 步骤,让一切井然有序。这对于婚礼之类的活动尤其有用,因为人们来自不同的时区,而乱序的照片看起来完全不对。

最后,不要忘记在末尾添加文件扩展名,否则它将被删除,并且可能会导致其他问题

相关内容