Exiftool:从文本文件批量写入元数据到 JPEG

Exiftool: batch-write metadata to JPEGs from text file

我想使用 ExifTool 批量写入之前保存在文本文件中的元数据。

假设我有一个包含以下 JPEG 文件的目录:

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

然后我创建文件 metadata.txt,其中包含后跟冒号的文件名,我将其交给同事,他将用所需的元数据填充它——在本例中以逗号分隔IPTC 关键字。完成后文件将如下所示:

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

我如何将此文件提供给 ExifTool 并确保将正确的关键字保存到正确的文件中?如果有帮助,我也愿意更改文件的结构,例如将其格式化为 CSV、JSON 或 YAML。

我相信@StarGeek 的回答比我的好,但为了完整性和更基本的 Luddite 方法的参考,我将离开我的答案:-)

我想你想要这个:

#!/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 的更正和解释。

如果您可以将格式更改为CSV文件,那么exiftool可以直接使用-csv option读取它。

您必须以这种方式重新格式化它。第一行必须在文件名上方有 header 或 "SourceFile",在关键字上方有 "Keywords"。如果文件名不包含文件路径,则命令必须是来自与文件相同目录的 运行。整个关键字字符串需要用引号括起来,这样它们就不会被当作单独的列来读取。结果将如下所示:

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 option 以确保关键字被视为单独的关键字,而不是单个长关键字。

这比循环遍历文件内容并运行每行一次 exiftool 的脚本有优势。 Exiftool 最大的性能损失在于它的启动,运行循环运行它会非常慢,尤其是在处理大量文件时(参见 Common Mistake #3)。

有关从 csv 文件读取的更多详细信息,请参阅 ExifTool FAQ #26