用 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 自动将文件名的扩展名去掉,并将文件名中的「-」替换为「:」
预览可以查看到被新添加的 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 打开会出错?