Изменение даты фотографии, сохраненной в фото файле с имени файлов?

Я использую приложение PhotScan Google для сканирования всех моих старых фотографий, которые сделаны перед возрастом цифровых фотоаппаратов, и я сохраняю эти фотографии с помощью даты фотографии (пример: 19821011_trip.jpg, yyyymmdd_trip.jpg).

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

Ожидание получить справку.

-1
задан 26 January 2019 в 10:17

2 ответа

exiftool к спасению

Я предполагаю, что Вы хотите изменить данные EXIF своих отсканированных изображений согласно метке времени от имени файла изображения (не со времени, файл был создан как, например. ls -l шоу).

К счастью, существует удобный инструмент для названного exiftool. Если это еще не установлено, работать

sudo apt install libimage-exiftool-perl

сначала. exiftool находится в стандартных репозиториях. Это может показать и управлять обоими именами файлов и данными EXIF. Например, возможно переместиться, файлы согласно EXIF приписывают CreateDate и файлы перемещения к подкаталогам как

2018
    Jan
       img0001.jpg
       img0002.jpg
    Feb
       img0003.jpg
       img0004.jpg

и так далее. Но это - другая история, и Вы хотите ее просто наоборот.

Давайте возьмем Ваш 19821011_trip.jpg как пример и набор все три атрибута DateTimeOriginal, CreateDate и ModifyDate к Oct 11, 1982. exiftool имеет параметр для парсинга имени файла для чего-то, что похоже на дату и метку времени и затем назначает все эти даты сразу к тому значению. К сожалению, имя файла должно содержать метку времени (HHMMSS) для этого для работы, как так:

exiftool "-alldates<filename" 19821011_130000_trip.jpg

Это установило бы три атрибута даты, упомянутые выше на Oct 11, 1982, 01:00:00 PM. Так как Ваше имя файла не содержит такую часть HHMMSS, мы должны изменить параметр немного:

exiftool '-alldates<${filename;$_=substr($_,0,8)} 13:00:00' 19821011_trip.jpg 

Это выберет первые 8 символов от имени файла, добавит 13:00:00 и наконец синтаксический анализ та строка (19821011 13:00:00) создавать надлежащую дату всех трех атрибутов. exiftool довольно хорошо в парсинге меток времени, но требуется, по крайней мере, часть HHMM после даты.

Можно также работать exiftool на целом каталоге:

exiftool '-alldates<${filename;$_=substr($_,0,8)} 13:00:00' .

Это затем обработает все изображения, которые это находит. Никакие заботы, это делает резервные копии всех измененных файлов.

Сводка:

me@ubuntu:~> exiftool -alldates 19821011_trip.jpg
(no output)

me@ubuntu:~> exiftool '-alldates<${filename;$_=substr($_,0,8)} 13:00:00' 19821011_trip.jpg 
    1 image files updated

me@ubuntu:~> exiftool -alldates 19821011_trip.jpg 
Date/Time Original              : 1982:10:11 13:00:00
Create Date                     : 1982:10:11 13:00:00
Modify Date                     : 1982:10:11 13:00:00
2
ответ дан 26 October 2019 в 11:13

Вы могли сделать это с touch и цикл как

for i in *.jpg; do
  touch -d"${i%_trip.jpg}" "$i"
done

но это не очень точно, поскольку Ваши имена файлов только содержат дату без любой информации времени, время файла будет таким образом установлено на 0:00:00.000000000. Останьтесь со мной для лучшего пути.

Каждая обычная фотография имеет заголовок Exif, который содержит корректную метку времени того, когда фотография была сделана, если настройки даты и времени камеры были корректны. Я всегда предпочитаю использовать это, это отказоустойчиво и легко с jhead от пакета jhead, посмотрите man jhead для деталей. Некоторые полезные опции:

-ft    Sets the file's system time stamp to what is stored in the Exif header.    
-n[format_string]
       This option causes files to be renamed and/ or mmoved using the date information from the Exif header "DateTimeOriginal" field.  If the file is not an Exif file, or the DateTimeOriginal
       does not contain a valid value, the file date is used.  If the new name contains a '/', this will be interpreted as a new path, and the file will be moved accordingly.

Команда для переименования всех jpg файлы в текущем каталоге согласно их метке времени заголовка Exif и изменению штампа системного времени файла могли быть:

jhead -ft -n'%Y%m%d_trip' *.jpg

jhead достаточно мудро для не перезаписи файлов, если имя файла уже существует:

Если целевое имя уже будет существовать, то имя будет добавлено с "a", "b", "c", и т.д., если имя не закончится буквой, в этом случае это будет добавлено с "0", "1", "2", и т.д.

Если Ваши файлы не имеют заголовка Exif, следующие опции могут помочь:

-mkexif
       Creates  minimal exif header. Exif header contains date/time, and empty thumbnail fields only. Date/time set to file time by default. Use with -rgt option if you want the exif header to
       contain a thumbnail. Note that exif header creation is very limited at this time, and no other fields can be added to the exif header this way.
-dsft  Sets the Exif timestamp to the file's timestamp. Requires an Exif header to pre-exist. Use -mkexif option to create one if needed.
1
ответ дан 26 October 2019 в 11:13

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

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