用 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