Как я могу постепенно датировать фотографии? - Фотопедия
7 голосов
/ 20 февраля 2015

У меня есть коллекция фотографий без информации о дате. Они не имеют данных Exif, и даты изменения файла все идентичны. Единственная последовательность в имени файла: image-0001.jpg, image-0002.jpg и т. Д.

Теперь я хочу назначить дату этим файлам (желательно в Exif), которые находятся на расстоянии 10 секунд. Меня не очень интересует какая именно базовая дата и время будут, просто они все увеличивают на 10 секунд. Таким образом, первое изображение получит 0:00:00, второе 0:00:10, третье 0:00:20 и т. Д.

Возможно ли это с ExifTool или другими приложениями Windows? Мы говорим о нескольких тысячах изображений, поэтому об этом вручную не может быть и речи; -)

Ответы [ 4 ]

7 голосов
/ 22 февраля 2015

Уже есть аналогичный вопрос на форумах ExifTool. Это можно сделать с помощью двух последовательных команд ExifTool. Сначала убедитесь, что все даты совпадают

exiftool -datetimeoriginal="2015:02:22 00:00:00" DIR

А затем увеличивайте время на каждом

exiftool '-datetimeoriginal+<0:0:${filesequence}0' DIR
2 голосов
/ 23 февраля 2015

Поскольку лучшие ответы используют синтаксис не-Windows, я опубликую их код, преобразованный для Microsoft Windows.

@ Решение StarGeek, очень быстрое и простое:

Сначала установите базовую временную метку для всех изображений:

exiftool -datetimeoriginal="2015:01:01 12:00:00" DIR

(DIR - это имя папки, содержащей все изображения.)

Затем назначьте инкрементные метки времени:

exiftool "-datetimeoriginal+<0:0:${filesequence;$_*=3}" DIR

(В данном случае 3 - это количество секунд, которое вы хотите между каждой фотографией.)

Обратите внимание на использование двойных кавычек, это требуется в системах Windows.


@ junkyardsparkle, которое изначально было единственным, с которым я смог работать:

Это требует создания командного файла из-за задействованных команд.

@echo off
setlocal EnableDelayedExpansion
for %%f in (*.jpg) do (
    echo %%f
    rem Get filename
    set n=%%f
    rem Extract number
    set n=!n:~6,4!
    rem Interpret as decimal
    set /a n=1!n!-10000
    rem Convert to seconds
    set /a n = n*10
    rem Assign base timestamp
    exiftool -DateTimeOriginal="2000:1:1 00:00:00" %%f
    rem Assign time increment
    exiftool -DateTimeOriginal+="00:00:!n!" %%f
)
2 голосов
/ 21 февраля 2015

Ну, я не опубликовал свой ответ на bash, потому что вопрос специально задавался о решении для Windows, но так как два других человека сделали, вот что я придумал:

for file in *.jpg
do
  exiftool -DateTimeOriginal="1111:11:11 00:00:00" $file
  exiftool -DateTimeOriginal+="00:00:${file:6:4}0" $file
done

Позволяет избежать путаницы с командой date. :)

Обратите внимание, что в части, где написано ${file:6:4}, "6" представляет точку в имени файла, где начинается порядковый номер, а "4" представляет длину этой последовательности. Если ваши файлы в точности соответствуют «image-0001.jpg, image-0002.jpg», приведенному в вопросе, это будет работать как есть; в противном случае настройте в соответствии.

2 голосов
/ 20 февраля 2015

Попробуйте Irfanview . Это бесплатное ПО (AFAIR) и очень гибкая система пакетного переименования.

Кроме этого, я бы попытался написать сценарий, что-то вроде

for X in $(seq -w 0 20) ; do
  plus=$(expr $X \* 10)
  exiftool -alldates+="0:0:0 0:0:$plus" image_$X.jpg
done

Первая строка создает цикл по числам в именах файлов, которые у вас есть, например. 00..20. Если у вас есть 1000 изображений, команда будет seq -w 0 1000. Опция -w добавляет начальные нули к числам.

Вторая строка определяет приращение - 10 в этом случае. Пока без юнитов.

Строка формата в третьей строке «0: 0: 0 0: 0: $ plus» определяет, что означает переменная $plus, в данном случае секунд. Если вы хотели минут, вы бы написали 0:0:0 0:$plus:0. Формат «год: месяц: день час: минута: секунда». Итак, у нас есть 10-секундный прирост.

Это пакет, выполненный в 'bash' (оболочка Linux), вам, возможно, придется адаптировать его для Windows или использовать живую систему Linux для выполнения преобразования.

Обратите внимание, что все файлы должны иметь (идентичный) тег Exif (DateTimeOriginal), прежде чем его можно будет использовать, поскольку он увеличивает только существующие теги. Но вы можете просто написать тег одной командой exiftool.

Я протестировал это с 20 примерами файлов, и теги были написаны правильно.

...