Как заставить Exiv2 применять метаданные из статического файла XML к нескольким изображениям? - Фотопедия
1 голос
/ 06 января 2016

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

Моя задача - извлечь метаинформацию из основного файла jpg, а затем применить ее к нескольким существующим меньшим версиям файла. У меня есть ...

  Photo1.jpg        - contains meta information
  thumb_Photo1.jpg  - no meta information
  sample_Photo1.jpg - no meta information

Сейчас я использую exiv2 для извлечения метаинформации из Photo1.jpg, в результате чего получается файл ...

  Photo1.xml

Далее я хотел бы применить эти метаданные к эскизам и файлам примеров. С Exiv2 я не могу найти способ заставить его работать с чем-либо, кроме файлов с соответствующими базовыми именами. Поэтому я не могу применить Photo1.xml к thumb_Photo1.jpg, только Photo1.jpg.

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

  Photo1.jpg        - contains meta information
  Photo1.xml        - derived from Photo1.jpg
  thumb_Photo1.jpg  - no meta information
  thumb_Photo1.xml  - copy of Photo1.xml
  sample_Photo1.jpg - no meta information
  sample_Photo1.xml - copy of Photo1.xml

После этого я могу запустить exiv2, чтобы добавить теги к большому пальцу и образец JPEG. После этого я удаляю файлы XML, и у меня остаются три файла с одинаковыми тегами.

Хотя вышеперечисленное работает очень хорошо, мне интересно, пропустил ли я глубоко в документации опцию exiv2, позволяющую помечать JPEG из файла XML с другим базовым именем.

Ответы [ 2 ]

2 голосов
/ 06 января 2016

exiv2, похоже, действительно предпочитает, чтобы базовые имена файлов изображений и сопутствующих файлов / файлов метаданных совпали. Вы можете автоматизировать (создать сценарий) создание / удаление копирования / переименования файлов метаданных, как у вас.

Однако для того, что вы хотите сделать, я настоятельно рекомендую использовать exiftool. Это следует за парадигмой потока Unix намного более близко. Вы можете делать что хотите, используя exiftool, с помощью следующей команды:

> exiftool -TagsFromFile Photo1.jpg *_Photo1.jpg
    2 image files updated

Преимущество этого состоит в том, что нет необходимости создавать файлы метаданных в качестве промежуточного шага; он просто копирует данные из Photo1.jpg в любой файл, соответствующий шаблону *_Photo1.jpg.

1 голос
/ 06 января 2016

Вы пробовали так:

cat  Photo1.xml | exiv2 -i - thumb_Photo1.jpg

Эта команда отправит содержимое Photo1.xml в STDOUT, а следующая команда будет использовать его в качестве STDIN и вставить его в файл thumb_Photo1.jpg.

P.S. На странице man в exiv2 я вижу этот пример:

exiv2 -e{tgt}- filename|xmllint .... | exiv2 -i{tgt}- filename
...