Задача:
Конвертировать метаданные JPEG введенные через Shotwell 0.18.0 (Ubuntu 14.04 64bit) в формат пригодный для чтения в "Фотоальбом Windows Live 2012".
Что не так:
Если открыть фотографии "Фотоальбомом Windows" мы увидим наши теги в правильной кодировке и их же еще раз кракозябрами — задвоение тегов. Мы не увидим "Комментарий".
Куда я копаю:
Я создал два пустых jpg-файла и добавил в них метаданные: в один Shotwell'ом, в другой «Фотоальбомом Windows». Записал по два тега, заголовок и комментарий.
Посмотрел на результат утилитой exiv2:
exiv2 -Pkyct *.jpg
Shotwell:
Exif.Image.Orientation Short 1 top, left
Exif.Image.Software Ascii 16 Shotwell 0.18.0
Exif.Image.ExifTag Long 1 66
Exif.Photo.UserComment Undefined 31 ShotwellComment_Рус_
Exif.Photo.PixelXDimension SLong 1 640
Exif.Photo.PixelYDimension SLong 1 400
Iptc.Application2.Program String 8 Shotwell
Iptc.Application2.ProgramVersion String 6 0.18.0
Iptc.Application2.Caption String 20 ShotwellName_Рус_
Iptc.Application2.Headline String 20 ShotwellName_Рус_
Iptc.Application2.Keywords String 21 ShotwelLabel1_Рус_
Iptc.Application2.Keywords String 21 ShotwelLabel2_Рус_
Xmp.photoshop.Headline XmpText 20 ShotwellName_Рус_
Xmp.exif.PixelXDimension XmpText 3 640
Xmp.exif.PixelYDimension XmpText 3 400
Xmp.tiff.ImageWidth XmpText 3 640
Xmp.tiff.ImageHeight XmpText 3 400
Xmp.tiff.Orientation XmpText 1 top, left
Xmp.dc.title LangAlt 1 lang="x-default" ShotwellName_Рус_
Xmp.dc.subject XmpBag 2 ShotwelLabel1_Рус_, ShotwelLabel2_Рус_
Фотоальбом Windows:
Exif.Image.ImageDescription Ascii 17 WindowsName_Рус_
Exif.Image.ExifTag Long 1 2140
Exif.Image.XPTitle Byte 34 WindowsName_Рус_
Exif.Image.XPKeywords Byte 68 WindowsTag1_Рус_;WindowsTag2_Рус_
Exif.Image.XPComment Byte 30 WindowsComment_Рус_
Xmp.dc.subject XmpBag 2 WindowsTag1_Рус_, WindowsTag2_Рус_
Xmp.dc.title LangAlt 1 lang="x-default" WindowsName_Рус_
Xmp.dc.description LangAlt 1 lang="x-default" WindowsName_Рус_
Xmp.MicrosoftPhoto.LastKeywordXMP XmpBag 2 WindowsTag1_Рус_, WindowsTag2_Рус_
Xmp.xmpMM.InstanceID XmpText 41 uuid:faf5bdd5-ba3d-11da-ad31-d33d75182f1b
Что получается:
Обе программы используют Xmp.dc.title и Xmp.dc.subject. Значит, надо удалить спецфичные для Shotwell данные (например Iptc.Application2.Keywords) и скопировать Exif.Photo.UserComment в Xmp.dc.title.
Да, Windows может писать комментарий в Exif.Image.XPComment. Но такой комментарий можно увидеть лишь открыв свойства файла на вкладке "Подробно". "Фотоальбом Windows" Exif.Image.XPComment не показывает.
Решение:
Напрашивается Bash-скрипт, но я не умею их писать. Однако! В Ubuntu есть Nautilus со своими скриптами (сценариями). Кладем в папку ~/.local/share/nautilus/scripts файлик "SuperScript.sh" с правами на исполнение и следующим содержимым:
#!/bin/sh
#
# GNU/GPL owning
# nautilus-script "Delete Shotwell tags"
#
for arg
do
# Удаляем лишнее
exiv2 -M"del Xmp.photoshop.Headline" -M"del Iptc.Application2.Keywords" -M"del Iptc.Application2.Program" -M"del Iptc.Application2.ProgramVersion" -M"del Iptc.Application2.Caption" -M"del Iptc.Application2.Headline" -M"del Exif.Image.Software" $arg
# Копируем Exif.Photo.UserComment в Xmp.dc.title
exiv2 -M"set Xmp.dc.title $(exiv2 -Pv -g Exif.Photo.UserComment $arg)" $arg
done
Пробуем. Выделяем пару картинок. Запускаем скрипт. И оппа! Shotwell пишет комментарий в Exif.Photo.UserComment, видимо, с недавних пор. В старых фотографиях такого поля нет. Значит, надо заставить его перезаписать метаданные на всех фотографиях. Выделяем все 4000 фотографий, добавляем тег "ILikeLinux". Ждем.
Теперь у всех фотографий с комментарием комментарий записан в Exif.Photo.UserComment. Можно запускать скрипт. И тут выясняется, что nautilus-script даже не пытается работать над группой файлов более 10-20 штук.
Бой проигран, но война не окончена.