ExifTool by Phil Harvey 可以很容易做到,ExifTool 是个用 Perl 编写的库,同时附带了一个命令行应用。仅用命令行工具,就几乎可以做与文件元数据相关的任何操作。

ExifTool 可以方便地查看、修改、导入或导出单个或多个文件的元信息,包括 PDF、DOC 甚至 EXE 多种格式在内的 EXIF、IPTC 和 XMP 信息。 JPG 的 EXIF 自然不在话下。(在官网首页的 Supported File Types 一节可以看到全部支持的格式)

ExifTool 既有 Win 版也有 OS X 版,只需要 Perl 即可运行,下面的演示都是在 OS X 上进行的。

一、查看信息

浏览一张图片的全部元信息:

exiftool IMG_0894.JPG

(省略结果)

通过加上参数,可以浏览一张图片的指定 EXIF 属性,参数的名称通常是属性名本身去掉空格,比如图片数字化日期:

exiftool -createdate IMG_0894.JPG

Create Date                     : 2013:11:05 14:48:09

也可以同时输入多个参数,返回多个结果:

exiftool -iso -imagesize IMG_0894.JPG

ISO                             : 80
Image Size                      : 1936x2592

通过输入目录名,还可以查看多个文件的信息:

exiftool -imagesize pics

======== pics/2009-09-30 15-28-16.jpg
Image Size                      : 566x480
======== pics/2010-02-10 08-12-45.jpg
Image Size                      : 180x180
======== pics/220ppi.png
Image Size                      : 1000x1000
======== pics/IMG_0894.JPG
Image Size                      : 1936x2592
======== pics/kokuhaku.mkv
Image Size                      : 1024x576
    1 directories scanned
    5 image files read

通过通配符,只查看 jpg 格式的文件信息(大小写敏感):

exiftool -imagesize pics/*.jpg

======== pics/2009-09-30 15-28-16.jpg
Image Size                      : 566x480
======== pics/2010-02-10 08-12-45.jpg
Image Size                      : 180x180
    2 image files read

二、修改信息

在参数后加入「=」等符号,即可修改文件的某个元信息。

所有对元信息的修改都会产生一个「_original」的备份文件,可以通过加上「-overwrite_original」参数来阻止这一行为。

用「=」设置某个信息:

exiftool -iso IMG_0894.JPG

ISO                             : 80
exiftool -iso=100 IMG_0894.JPG

    1 image files updated
exiftool -iso IMG_0894.JPG 

ISO                             : 100

用「-=」或「+=」来让一个参数位移,对于一些因记忆重置造成的整体拍摄时间位移,可以结合上面的批量选择来批量修改:

exiftool -DateTimeOriginal IMG_0894.JPG

Date/Time Original              : 2013:11:05 14:48:09
exiftool -DateTimeOriginal+="00:01:03 10:0:0" IMG_0894.JPG

    1 image files updated
exiftool -DateTimeOriginal IMG_0894.JPG    

Date/Time Original              : 2013:12:09 00:48:09

(如果要写入的内容包含空格或特殊字符,那么需要用引号引起)

还可以用「<」来通过某个参数来设置信息,比如用图片尺寸(imagesize)来设置文件名(filename):

exiftool '-filename<%f_$imagesize.%e' IMG_0894.JPG

    1 image files updated

这个命令可以将「IMG_0894.JPG」更名为「IMG_0894_1936x2592.JPG」:其中 %f 为文件原名,%e 为文件的扩展名(更多格式码可以参见文档 FileName and Directory tags 的 Common Date Format Codes 一节)。一旦出现格式码,就要在 imagesize 这个属性前加上「$」。

(如果出现了「<」号,那么整个参数都需要用引号引起。)

因此,将批量文件的文件名中时间信息导入到 DateTimeOriginal 属性,可以这样实现:

exiftool -filename -DateTimeOriginal *.jpg 

======== 2009-09-30 15-28-16.jpg
File Name                       : 2009-09-30 15-28-16.jpg
======== 2010-02-10 08-12-45.jpg
File Name                       : 2010-02-10 08-12-45.jpg
    2 image files read
exiftool '-DateTimeOriginal<filename' *.jpg

    2 image files updated
exiftool -filename -DateTimeOriginal *.jpg 

======== 2009-09-30 15-28-16.jpg
File Name                       : 2009-09-30 15-28-16.jpg
Date/Time Original              : 2009:09:30 15:28:16
======== 2010-02-10 08-12-45.jpg
File Name                       : 2010-02-10 08-12-45.jpg
Date/Time Original              : 2010:02:10 08:12:45
    2 image files read

两张图片都被加上了原文件日期,注意 ExifTool 自动将文件名的扩展名去掉,并将文件名中的「-」替换为「:」

Mac 平台如何批量将图片文件名中的时间写入 EXIF 信息?插图

预览可以查看到被新添加的 EXIF 信息,Dropbox 当然也可以。

基于同样的道理,视频文件的 Date/Time Original 属性,当然也可以被查看、修改和批量修改,这里就不用再说了吧~:

exiftool -datetimeoriginal kokuhaku.mkv

Date/Time Original              : 2011:02:09 10:49:56Z

三、导入与导出元信息

在命令的最后加入「>」并指向某个文件,可以将屏幕输出结果导出到某个文件,添加「-T」「-csv」或者「-json」等参数,还可以指定输出格式。而将某个文件反过来用「>」指向文件或文件夹,也可以反过来将元信息导入文件,在官方的 ExifTool FAQ 的第十二问与第二十六问分别有导入和导出的说明。

总之,exiftool 可以帮助做任何与元数据相关的操作,可以做与元数据相关的任何事情。凭借 Perl 库的形式嵌入别的程序中,还可以发挥更大的价值。如果对更多、更高级、更全面的功能感兴趣,一定要读一读官方文档:ExifTool by Phil Harvey

— 完 —

本文作者:孙北吉

【知乎日报】
你都看到这啦,快来点我嘛 Σ(▼□▼メ)

此问题还有 1 个回答,查看全部。
延伸阅读:
为什么 Mac OS X 和 Windows 都不能原生打开 RAR 文件?
为什么很多 TXT 文件用 Mac 上的 TextEdit 打开会出错?

分享到