ExifTool by Phil Harvey 是一个很强大的元数据处理工具,它可以读取包括图片视频在内的大多数格式文件的元数据;支持文件重命名和文件夹整理;支持不同文件之间的元数据相互拷贝;读取生产 xpm 文件等等。这里我们主要是使用 ExifTool 进行图片管理,介绍其在图片管理中的一些常用命令。
macOS 中的图片元数据
macOS 的 Photos 应用支持标题、关键词、描述、时间的查看和处理,其它元数据好像没看到具体使用场景,后面的命令行也主要针对以上元数据的管理。
exiftool
和 macos
的属性对应关系如下:
exiftool | macOS |
---|---|
Title | Title |
Subject | Keyword |
ImageDescription | Description |
DateTimeOriginal | Create Date |
描述标签
Exif:ImageDescription
和 XMP:Description
是两个独立的描述标签,macOS 将(优先)使用 Exif:ImageDescription
作为描述标签显示。然而,当 Exif:ImageDescription
已经存在的情况下,从 Photos 应用重新导出的照片并不会将修改的描述写入 Exif:ImageDescription
, 而是只写入 XMP:Description
. 因此需要将 XMP:Description
赋值到 Exif:ImageDescription
.
读取元数据
读取元数据只需在命令后添加文件名。
exiftool [OPTIONS] [-TAG...] [--TAG...] FILE...
读取所有标签:
|
|
读取特定标签:
|
|
排除特定标签:
|
|
标签组别
每个标签都有对应的组别,可添加 -g
或 -G
选项让其显示。同时可以使用 -a
选项显示不同组别中的重复选项
|
|
排序
可以通过 -Sort
选项让输出按字母顺序排序。
|
|
Wildcard 筛选
标签也可以使用 wildcard 进行筛选。使用时,标签需要加上引号,或对特殊字符进行转义。
|
|
使用 -s
自定义输出
使用 -s
时将去除标签名中的空格,使用 -s -s
或 -S
将去除标签名与冒号之间的空格,而使用-s -s -s
则将只留下标签取值。
|
|
格式化打印
使用 -p
选项可以格式化输出图片信息,图片信息使用 \$
字符表示。注意转义字符的使用。
|
|
格式文件
也可以使用格式化文件指定打印格式。首先创建格式化文件 format.fmt, 其内容如下:
|
|
然后执行:
也可对指定目录对所有文件进行遍历输出:
|
|
文件夹遍历
可以使用 -r
选项整个文件夹。如果想忽略某个子文件夹,可用 -i
选项排除。
|
|
指定文件类型
使用 -ext
指定遍历的文件类型,--ext
排除遍历的文件类型。
使用
-
选定,使用--
排除是 exiftool 中的通用做法。
使用 if
寻找指定关键词的文件:
|
|
多语言
使用 -lang
选项查看支持的语言:
|
|
切换输出语言:
|
|
选项文件
我们也可以将常用的选项放在一个文件中,然后使用 -@ args.txt
将其选项内容读取。
当然,你也可以在命令中添加其它选项。
写入元数据
使用 -Tag=Value
的形式对元数据进行修改
exiftool [OPTIONS] -TAG[+-<]=[VALUE]... FILE...
可同时写入多个标签或多个文件:
|
|
增加关键词:
|
|
删除标签
在等号后留空值可删除对应标签。当使用 wildcard 时,使用 -a
选项确保所有组别的对应标签都已删除。
|
|
选项顺序
选项顺序至关重要,exiftool
将从左到右对标签进行修改。因此需把删除的选项放最前面。
|
|
文件备份与复原
当对文件进行修改时,exiftool
将会自动生成备份文件filename_original.ext
, 以下是几个关于备份文件的操作选项。
-
-restore_original
: 从备份文件还原 -
-delete_original
: 删除备份文件 -
-overwrite_orignial
: 避免生产备份文件
|
|
元数据导出、导入、复制
从文件读取元数据
可以使用选项 -tagsFromFile SRCFILE
从文件中读取数据。
Copy tag values from SRCFILE to FILE. Tag names on the command line after this option specify the tags to be copied, or excluded from the copy. Wildcards are permitted in these tag names. If no tags are specified, then all possible tags from the source file are copied to same-named tags in the preferred location of the output file (the same as specifying
-all
). More than one -tagsFromFile option may be used to copy tags from multiple files.
在使用该选项时,选项后面的赋值将在选项拷贝完成后进行。例如下述命令的赋值顺序依次为:one, two, three, four.
|
|
导出元数据文件
- 可以用
-tagsfromfile
或-o
选项导出元数据,两者区别在于使用-o
选项时,输出的文件必须是新文件,不能事先存在。
|
|
- 可以使用
-all:all
选项确保写入的标签在相同的组别。
|
|
-
将 EXIF 和 IPTC 标签导入到 XMP 中。
1 2
# Generate XMP from EXIF and IPTC using standard tag name mappings: exiftool -tagsfromfile SRC.EXT -@ exif2xmp.args -@ iptc2xmp.args DST.xmp
-
将 XMP 作为区块导出。这是将未知或只读标签导出到唯一方法。
1 2 3 4 5 6 7 8
# Note that this will not deal with extended XMP segments in JPEG images if they exist. exiftool -tagsfromfile SRC.EXT -xmp DST.xmp # As with the previous command, this command will not copy extended XMP segments in JPEG images, but in this case the -a option may be added to also extract extended XMP blocks. However, the result would be a non-standard XMP file that ExifTool could read but other utilities may not. exiftool -xmp -b SRC.EXT > DST.xmp # same effect as above, but the destination file name will be the same as the source file, and this command will fail if the XMP file exists while the previous command will overwrite an existing file exiftool -xmp -b -w xmp SRC.EXT
写入元数据文件
将 xmp
文件元数据写入到图片:
|
|
应用场景
读取数据
|
|
赋值
|
|
写入 xmp
文件
|
|
macOS 操作流程
-
将照片导入到 Photos 应用,添加关键词、标题,描述等字段。
-
导出未修改的照片和
xmp
文件 -
写入
xmp
文件1
exiftool -ext jpg -tagsfromfile %d%f.xmp -all:all .
-
将标题添加到描述。其中
${/}
表示换行,参考 Linebreak in Image Description.1 2
exiftool '-description<${title}${/}${description}' . -ext jpg exiftool '-ImageDescription<description' . -ext jpg
也可直接换行:
1 2 3
exiftool '-description<${title} ${description}' . -ext jpg exiftool '-ImageDescription<description' . -ext jpg
-
重命名文件。参考:FileName and Directory tags
1 2 3 4
# 测试语法是否正确 exiftool '-testname<$title%-c.%e' -ext jpg . # 修改文件名 exiftool '-filename<$title%-c.%e' -ext jpg .
元数据的读取
-
创建
~/photo_args.txt
文件。1 2 3 4 5 6
-FileName -CreateDate -Title -Description -ImageDescription -Subject
-
使用如下命令读取元数据。
1
exiftool -@ ~/photo_args.txt *.jpg -T
相关工具
RhetTbull/photosmeta: Extract known metadata from Apple's MacOS Photos library and export this metadata to EXIF/IPTC/XMP fields in the photo file For example: Photos knows about Faces (personInImage) but does not preserve this data when exporting the original photo.
RhetTbull/osxphotos: Python app to export pictures and associated metadata from Apple Photos on macOS. Also includes a package to provide programmatic access to the Photos library, pictures, and metadata.
RhetTbull/PhotoScript: : Automate Apple / MacOS Photos app with python. Wraps applescript calls in python to allow automation of Photos from python code.