XiaO

用 ExifTool 工具整理照片

XiaO / 2021-12-30


ExifTool 可快速安全地批量移动、复制、重命名、分组、提取预览 JPG 或标记照片。

工具安装

# 命令
brew install exiftool

照片信息

文件信息与照片 Metadata 信息是不同的。文件信息是由电脑系统记录并展示的其在存储硬盘上的信息,而照片 Metadata 信息是在拍照时由相机系统嵌入照片的。其有三种标准, XEIF、XMP 与 IPTC。

# 命令
exiftool path/to/file

# 结果:存储硬盘上关于该照片的时间信息
ExifTool Version Number         : 12.30
File Modification Date/Time     : 2021:12:29 22:22:08+01:00
File Access Date/Time           : 2021:12:29 22:48:27+01:00
File Inode Change Date/Time     : 2021:12:29 22:48:25+01:00

# 结果:Metadata 中关于该照片的时间信息
Date/Time Original              : 2016:06:16 23:53:08
Create Date                     : 2016:06:16 23:53:08
GPS Date Stamp                  : 2016:06:16
Digital Creation Time           : 23:53:08
Digital Creation Date           : 2016:06:16
Date Created                    : 2016:06:16
Time Created                    : 23:53:08
Date/Time Created               : 2016:06:16 23:53:08
Digital Creation Date/Time      : 2016:06:16 23:53:08
# 命令
exiftool -s -G path/to/file
# 说明
-s 显示编写 ExifTool commands 时所用的名称
-G 显示该元数据标签所属的元数据组
# 结果
[File]          FileModifyDate                  : 2021:12:29 22:22:08+01:00
[File]          FileAccessDate                  : 2021:12:29 22:48:27+01:00
[File]          FileInodeChangeDate             : 2021:12:29 22:48:25+01:00

[EXIF]          ModifyDate                      : 2016:06:16 23:53:08
[EXIF]          DateTimeOriginal                : 2016:06:16 23:53:08
[EXIF]          CreateDate                      : 2016:06:16 23:53:08
[EXIF]          GPSDateStamp                    : 2016:06:16

[IPTC]          DigitalCreationTime             : 23:53:08
[IPTC]          DigitalCreationDate             : 2016:06:16
[IPTC]          DateCreated                     : 2016:06:16
[IPTC]          TimeCreated                     : 23:53:08

[XMP]           CreateDate                      : 2016:06:16 23:53:08
[XMP]           ModifyDate                      : 2016:06:16 23:53:08
[XMP]           DateCreated                     : 2016:06:16 23:53:08

[Composite]     SubSecCreateDate                : 2016:06:16 23:53:08.642
[Composite]     SubSecDateTimeOriginal          : 2016:06:16 23:53:08.642
[Composite]     DateTimeCreated                 : 2016:06:16 23:53:08
[Composite]     DigitalCreationDateTime         : 2016:06:16 23:53:08

显示照片的所有日期时间信息

# 命令
exiftool -AllDates -s -G path/to/file # -AllDates 显示所有含有日期的标签
# 命令
exiftool -time:all -s -G path/to/file #-time:all 显示所有含有时间的标签

查找符合条件的照片


# 命令,查找 exif 分组中没有 DateTimeOriginal 标签的照片
exiftool -r -G -s -filename -if 'not $exif:DateTimeOriginal' path/to/fileORfolder

# 命令,查找 所有 分组中没有 CreateDate 标签的照片
exiftool -r -G -s -filename -if 'not CreateDate' path/to/fileORfolder

# 说明
-r                            对源文件夹及其子文件夹中的所有照片执行操作
-filename                     显示文件名称
-if                           引入条件参数以便设置条件
'not $exif:DateTimeOriginal'  具体的条件,即没有 `exif:DateTimeOriginal` 标签的照片
$exif:DateTimeOriginal        选中某个分组中的某个标签,作为变量使用
-exif:DateTimeOriginal        引入某个分组中的某个标签,作为操作参数,对其进行操作

添加或修改标签值

# 给 EXIF:DateTimeOriginal 标签添加具体的值
exiftool '-EXIF:DateTimeOriginal="2021:11:10 10:41:20"' -r  path/to/fileORfolder

# 将标签 DateTimeOriginal 的值复制给标签 CreateDate
exiftool '-exif:DateTimeOriginal>CreateDate' -r path/to/fileORfolder

# 将标签 CreateDate 的值复制给标签 DateTimeOriginal
exiftool '-exif:DateTimeOriginal<CreateDate' -r path/to/fileORfolder

# 将标签 FileModifyDate 的值复制给 EXIF 中的时间标签,包括  EXIF:DateTimeOriginal, EXIF:ModifyDate 以及 EXIF:CreateDate,并且
exiftool "-AllDates<FileModifyDate" -r -overwrite_original path/to/fileORfolder


# 如果照片是以时间命名,可以将该时间写给 EXIF 或所有时间标签
exiftool "-AllDates<filename" -r -overwrite_original  path/to/fileORfolder

照片重命名

使用照片 EXIF 信息中的创建日期和时间对照片重命名:

# 命令
exiftool '-filename<CreateDate' -d %y%m%d_%H%M%S%%-c.%%le -r -ext jpg -ext arw path/to/fileORfolder
# 说明
'-filename<CreateDate'    使用照片 EXIF 信息中的创建日期和时间对照片重命名
-d                        引入日期时间显示格式参数,以便设置日期时间的显示格式
%y%m%d_%H%M%S%%-c.%%le    具体的日期时间格式,年月日_时分秒
%%-c                      如果照片将有与已存在的照片相同的名字,则以添加续增数字的方式命名
.%%le                     保持源文件的扩展名,但使用小写字母
-ext jpg -ext arw         只重命名具有 "jpg""arw"扩展名的文件
-r                        对源文件夹及其子文件夹中的所有照片执行操作

使用文件的在存储硬盘上的创建时间对图片批量重命名:

# 命令
exiftool -s -G path/to/file
# 结果
[File]          FileModifyDate                  : 2021:12:29 13:37:24+01:00
[File]          FileAccessDate                  : 2021:12:29 13:37:28+01:00
[File]          FileInodeChangeDate             : 2021:12:29 13:37:28+01:00

# 命令
exiftool '-filename<FileModifyDate' -d %y%m%d_%H%M%S%%-c.%%le -r path/to/fileORfolder

本质上来说,exiftool 可以使用 exiftool -s -G 所查询到的任何参数对任何文件重命名,譬如上面例子中使用文件的创建时间对文件重命名。

照片分类存储

# 移动照片
exiftool '-Directory<CreateDate' -d path/to/fileORfolder/%Y/%Y%m -P -r path/to/fileORfolder

# 复制照片
exiftool -o . '-Directory<CreateDate' -d path/to/fileORfolder/%Y/%Y%m -P -r path/to/fileORfolder

# 说明
-P        该参数将保留文件在硬盘上的时间信息,即 FileModifyDate 信息
-o .      该参数末尾空格加点号,用于复制文件,保留源文件不动
/%Y/%Y%m  在源文件(夹)path/to/fileORfolder 中,新建名为 %Y 的年子文件夹,再在年文件夹中新建名为 %Y%m 的年月子文件夹

提取预览 JPG

ARW 文件中包含用于预览显示的 JPG 文件,可将其提出出来

# 命令
exiftool -s -G path/to/file.arw # 查看信息
# 结果
[EXIF]      PreviewImage        : (Binary data 394735 bytes, use -b option to extract)
[EXIF]      ThumbnailImage      : (Binary data 8732 bytes, use -b option to extract)

# 命令 
exiftool -b -PreviewImage -w _preview.jpg -ext arw -r path/to/fileORfolder/ARWFiles # 提取预览图
# 说明
-b                提取 Binary 文件
-PreviewImage     提取 PreviewImage 标签的文件
-w                将嵌在 arw 中的二进制图像 blob 文件,以一个单独副本的形式另存
_preview.jpg      将预览文件以 源文件名_preview.jpg 的形式存储
-ext arw          对所有 arw 扩展名的文件进行操作
- r               对文件夹下及其子文件夹操作

注意:先对照片重命名与分组,再进行预览 JPG 的提取工作。否则,可能提取的 预览 JPG 与源文件名称无法匹配的情况。

对预览 JPG 添加源文件的 Metadata

提取的预览 JPG 文件,是不含有源文件的 Metadata 的,所以,需要将源文件中的 Metadata 信息写入预览 JPG 文件。

# 命令
exiftool -tagsfromfile %d%-.8f.arw -all:all -r -overwrite_original -ext jpg path/to/fileORfolder/ARWJPGFiles

# 说明
-tagsfromfile                 扩展名为 arw 的源文件的所有 Metadata 标签
%d%-.8f.arw                   寻找扩展名为 arw 的源文件,且源文件与 预览 JPG 名称去掉后八位(名称中的 "-preview "部分) 相同。
-all:all                      写入所有的元数据,并且完全按照源文件中的分组和写法保留所有的元数据
-overwrite_original           对需要操作的 JPG 文件覆盖,而不产生一个 .original 文件
-ext jpg                      对所有的扩展名为 jpg 的文件进行操作
path/to/fileORfolder/ARWJPGFiles 包含 arw 与 jpg 的文件夹

终端中时间格式命令

# 查看时间
date 
date +<format-option><format-option>

参考资料:

https://exiftool.org/exiftool_pod.html https://ninedegreesbelow.com/photography/exiftool-commands.html