Начал ковыряться с EXIF для сканов пленки, только сейчас узнал какой это бардак. Оказывается, даже только JPEG (не говоря уже о других форматах) поддерживает кучу разных семейств тегов, какие-то более стандартизированы, какие-то менее, какие-то можно кастомизировать. Например, сам EXIF довольно строго стандартизирован, но в нем не хватает полей, например, для формата пленки, ее типа и названия, номера кадра и т.п. Можно для этого использовать поле описания картинки, или можно написать свою схему в семействе XPM, как сделал автор вот этих скриптов:
https://github.com/thetestspecimen/film-exif/. Я в итоге делаю и то, и другое.
Последнее для порядка, первое для сайтов, которые поле Description читают и авто-заполняют поля, как например, 500px и Flickr. Deviantart распознает (или по крайней мере отображает) только некоторые тэги, например, EXIF:ImageDescription и EXIF:Lens/LensMake/LensModel не понимает. Аналогично не понимает их, например, просмотрoщик eog (Eye of Gnome), но он понимает композитный LensID (про который я пока не нашел никакой информации по использованию, update: нашел —
Nikon:LensID). 500px понимает IPTC:Keywords, другие двое не понимают. DeviantArt понимает какие-то Subject тэги, пока не разобрался какие именно. Flickr, похоже, никакие не понимает, но умеет показывать всю сырую мету. Ни один из сайтов не публикует документацию на эту тему, ограничиваясь общими словами. Некоторые вещи (например, FNumber/ApertureValue) надо заполнять по несколько раз, потому что в одном месте читают из одного тэга, в другом из другого. В общем, с сайтами/тулзами тоже бардак.
Если камера не заполняет мета-информацию (пленочная, понятно, не заполняет), то тулзы для заполнения тоже никуда не годятся. exiftool — отличный cli для прямой работы с тэгами, но чтобы с ним работать нужно уже хорошо понимать как эти форматы устроены и что куда можно и нужно писать. В итоге я взял кастомную XMP схему из репозитория выше, пишу туда пленочную информацию, а все остальное в стандартные EXIF/IPTC поля + дамп пленочных данных в Image Description. И добавил скрипт, активируемый из моего основного просмотрщика feh, который вызывает `rofi -dmenu` с набором полей, читаемый exiftool и через него же пишущий изменения. Так можно записать основную кучу информации через `exiftool -overwrite_original -m -all= … *.jpg`, и дальше через feh отредактировать отличия (чаще всего выдержку, диафрагму и объектив). Похожий подход используется и для фотогалерей Тулупа, кстати, только вместо EXIF информация пишется в JSON. Выглядит это вот так:
Сам скрипт здесь:
https://gist.github.com/moorchegue/5b9c91768d2f698d2a06e3a799b8f48d. Там есть пара грязных мест, если кто подскажет как подчистить, буду благодарен.
Из JS-библиотек для браузера единственным нормально работающим вариантом оказался
exif-js, который может читать прямо из <img> элемента, и
не запрашивает при этом картинку с сервера второй раз (update: оказалось, что запрашивает). Например, вот так можно подписать все картинки на странице:
https://gist.github.com/moorchegue/c546d9b535820aa95765de134dd38543.