Exiftool: пакетная запись метаданных в JPEG из текстового файла - PullRequest
1 голос
/ 25 февраля 2020

Я хотел бы использовать ExifTool для пакетной записи метаданных, которые ранее были сохранены в текстовом файле.

Скажем, у меня есть каталог, содержащий следующие файлы JPEG:

001.jpg 002.jpg 003.jpg 004.jpg 005.jpg

Затем я создаю файл metadata.txt, который содержит имена файлов, за которыми следует двоеточие, и раздаю его коллеге, который заполнит его необходимыми метаданными - в данном случае ключевыми словами IPT C, разделенными запятыми. После завершения файл будет выглядеть следующим образом:

001.jpg: Keyword, Keyword, Keyword 
002.jpg: Keyword, Keyword, Keyword
003.jpg: Keyword, Keyword, Keyword
004.jpg: Keyword, Keyword, Keyword
005.jpg: Keyword, Keyword, Keyword

Как мне go сообщить о передаче этого файла в ExifTool и убедиться, что правильные ключевые слова сохранены в нужном файле? Я также готов изменить структуру файла, если это поможет, например, отформатировав его в CSV, JSON или YAML.

Ответы [ 2 ]

2 голосов
/ 25 февраля 2020

Если вы можете изменить формат на файл CSV, то exiftool может непосредственно прочитать его с помощью опции -csv .

Вам придется переформатировать его таким образом. Первая строка должна иметь заголовок «SourceFile» над именами файлов и «Ключевые слова» над ключевыми словами. Если имена файлов не включают в себя путь к файлам, команда должна быть запущена из того же каталога, что и файлы. Вся строка ключевых слов должна быть заключена в кавычки, чтобы они не читались как отдельные столбцы. Результат будет выглядеть следующим образом:

SourceFile,Keywords
001.jpg,"KeywordA, KeywordB, KeywordC"
002.jpg,"KeywordD, KeywordE, KeywordF"
003.jpg,"KeywordG, KeywordH, KeywordI"
004.jpg,"KeywordJ, KeywordK, KeywordL"
005.jpg,"KeywordM, KeywordN, KeywordO"

В этот момент ваша команда будет
exiftool -csv=/path/to/file.csv -sep ", " /path/to/files

Опция -sep необходима для убедитесь, что ключевые слова обрабатываются как отдельные ключевые слова, а не как одно длинное ключевое слово.

Это имеет преимущество перед сценарием, циклически повторяющим содержимое файла и запускающим exiftool один раз для каждой строки. Наибольшее снижение производительности Exiftool происходит при запуске, и запуск его в al oop будет очень медленным, особенно на большом количестве файлов (см. Распространенная ошибка # 3 ).

См. FAQ по ExifTool # 26 для более подробной информации о чтении из файла CSV.

1 голос
/ 25 февраля 2020

Я считаю, что ответ @StarGeek превосходит мой, но я оставлю свой для полноты и ссылки на более базовый c Луддитский подход: -)

Я думаю, вы хотите этого:

#!/bin/bash

while IFS=': ' read file keywords ; do
    exiftool -sep ", " -iptc:Keywords="$keywords" "$file"
done < list.txt

Вот это list.txt:

001.jpg: KeywordA, KeywordB, KeywordC 
002.jpg: KeywordD, KeywordE, KeywordF
003.jpg: KeywordG, KeywordH, KeywordI

И вот результат:

exiftool -b -keywords 002.jpg
KeywordD
KeywordE
KeywordF

Большое спасибо StarGeek за его исправления и пояснения.

...