Днями я наступив на вельми несподівані граблі: більша частина оброблених фотографій з однієї поїздки виявилась без EXIF-інформації. Все би нічого, але мав на меті проставити геотеги, а їм, в свою чергу, необхідно мати відомим час зйомки. Перепроявляти tiff’и по-новій, різати та коригувати (попри невелику кількість правок) не хотілось, відтак вирішив скопіювати EXIF’и.
Задача копіювання була виконана не надто тупо (надто тупо — взяти всі оброблені файли та скопіювати в них EXIF’и з оригіналів), а трошки менш тупо (пробігтись по обробленому — якщо EXIF відсутній, скопіювати його з оригіналу). Оскільки все в середовищі OS X, скриптик написаний на bash’і, втім, його можна легко «перекласти» для Windows. Код наступний:
#!/bin/bash
for f in *.*
do
STRING=$(exiftool -Make $f)
if [ "$STRING" == '' ] ; then
echo $f contains no exif;
#remove file extension to get original file name
shopt -s extglob
ORIGINAL_FILE=${f//@(.jpg|.jpeg|.tiff)}
#copy EXIF tags from original file, it should be in parent directory
exiftool -overwrite_original -x Orientation -TagsFromFile ../$ORIGINAL_FILE.NEF ./$f
echo $f, $STRING >> "log.txt";
fi
done
Далі «chmod +x copyMissingExif.sh» і запуск з будь-якого місця системи, де лежать оброблені файли. Умова: оригінали (raw) мають лежати на один рівень вище і мати ті ж самі назви файлів (розширення відтинається).
Недоліки: версія 0.1 але працює :) насправді недолік в дворазовому читанні обробленого файлу в разі копіювання тегів. Ця проблема цілком підлягає вирішенню засобами ExifTool (я сказав, що він неохідний? нє? кажу: ExifTool необхідний), але на разі я не мав часу глибоко вникнути в його схему подібних дій, щойно розберусь — буде версія 0.2.