Как я экспортирую фотографии Shotwell, заказанные датой/временем, они были застрелены?

Я делаю альбом с изображениями от камер нескольких друзей. Давайте предположим, что дата и время воздействия EXIF корректна во всех файлах. Имена файлов, однако, не выровненные (например, моя камера запускается в IMG0001, но телефонная камера моего друга запускается в pic1234.jpg, и мой собственный телефон запускается в pic5678.jpg).

Существует ли путь с Shotwell для экспорта файлов от всех к простому каталогу с именами файлов, переписанными так, чтобы изображения были отсортированы в хронологическом порядке? Затем когда я слайд-шоу эти файлы в другом компьютере, с другой программой просмотра изображений (или с самим Shotwell в режиме просмотра файла), они покажут в правильном хронологическом порядке.

Пример. Если у меня есть эти шесть файлов...

  1. Моя камера: IMG_0001.JPG - дата воздействия EXIF 25.12.2012 12:05:00
  2. Моя камера: IMG_0002.JPG - дата воздействия EXIF 25.12.2012 12:11:00
  3. Мой собственный телефон: pic5678.jpg - дата воздействия EXIF 25.12.2012 12:09:00
  4. Мой собственный телефон: pic5679.jpg - дата воздействия EXIF 25.12.2012 12:15:00
  5. Телефон друга: pic1234.jpg - дата воздействия EXIF 25.12.2012 12:08:00
  6. Телефон друга: pic1235.jpg - дата воздействия EXIF 25.12.2012 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])
2
задан 9 December 2012 в 23:14

1 ответ

Самый легкий подход должен будет повредить это в две части.

  • Во-первых, экспортируйте все изображения от Shotwell до одной папки.

  • Во-вторых, используйте pyrenamer, чтобы дать файлам шаблон именования, который Вы хотите.

Вот пример того, как использовать pyrenamer:

pyrenamer ui

Вот код, я раньше пытался соответствовать Вашему примеру в Вашем вопросе:

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

Это производит имена файлов, которые похожи на это:

pyrenamer output sample

Заметьте, что можно добавить символы между значениями в фигурных скобках (как подчеркивание между {imageday} и {imagehour}), для создания вывода легче читать.

Последнее {num3+1} укусило, является дополнительным, но помогает, если у Вас, оказывается, есть две фотографии, выстрелил в ту же секунду, и делает всех легче читать.

Если Вы делаете это и находите, что один или несколько часов устройства выключен, можно использовать Shotwell, чтобы изменить время/дату и затем восстановить шаг pyrenamer, чтобы иметь все в идеальном порядке. Это особенно полезно для чего-то как свадьба, куда люди приезжают в событие от различных часовых поясов, и фотографии не в порядке выглядят полностью неправильными.

Наконец, не забывайте включать расширение файла в конец, или это будет удалено и может вызвать другие проблемы.

3
ответ дан 9 December 2012 в 23:14

Другие вопросы по тегам:

Похожие вопросы: