介绍

Exiftool 是一个免费的、跨平台的开源软件,用于读写和处理图像、音视频和 PDF 等文件的元数据。ExifTool可以作为Perl库(Image::ExifTool)使用,也有功能齐全的命令行版本。ExifTool支持很多类型的元数据,包括Exif、IPTC、XMP、JFIF、GeoTIFF、ICC配置文件、Photoshop IRB、FlashPix、AFCP和ID3,以及众多品牌的数码相机的私有格式的元数据。

什么是 Exif

Exif是可交换图像文件格式(Exchangeable image file format),是一种标准,定义了与数码相机捕获的图像(或其他媒体)有关的信息,用于存储重要的数据,比如相机的曝光、拍摄日期和时间,甚至GPS定位等。在早期,摄影师需要随身携带笔记本来记录重要信息,如日期、快门速度、光圈等,这非常麻烦而且容易出错。如今,每台数码相机都支持Exif,能够将拍摄时的很多参数通过这种格式(Exif)记录到照片中,这些照片(或其他类型的文件)中的额外数据就叫元数据(metadata),它由一系列参数组成,如快门速度、光圈、白平衡、相机品牌和型号、镜头、焦距等等。Exif信息可能会造成隐私泄露(相机型号、位置等),在社会工程学中,Exif也是获取目标信息的一种手段,所以建议在把照片上传到互联网之前先清理Exif数据。

ExifTool支持的文件类型和标签

命令格式

  1. 读取:exiftool [OPTIONS] [-TAG...] [--TAG...] FILE...
  2. 写入:exiftool [OPTIONS] -TAG[+-<]=[VALUE]... FILE...
  3. 复制:exiftool [OPTIONS] -tagsFromFile SRCFILE [-SRCTAG[>DSTTAG]...] FILE...
  4. 其他:exiftool [ -ver | -list[w|f|r|wf|g[NUM]|d|x] ]

参数信息

  1. 标签选项
  2. -TAG or --TAG 提取或排除指定的标签
  3. -TAG[+-^]=[VALUE] 向标签写入新值
  4. -TAG[+-]<=DATFILE 从数据文件读取标签写入文件
  5. -TAG[+-]<SRCTAG 复制标签值(见-tagsFromFile
  6. -tagsFromFile SRCFILE 复制某文件的标签值
  7. -x TAG (-exclude) 排出指定标签
  8. 输入输出文本格式
  9. -args (-argFormat) 将元数据格式化为ExifTool参数
  10. -b (-binary) 以二进制输出元数据
  11. -c FMT (-coordFormat) 设置GPS坐标格式
  12. -charset [[TYPE=]CHARSET] 指定字符编码
  13. -csv[[+]=CSVFILE] CSV格式导出/导入标签
  14. -d FMT (-dateFormat) 设置日期/时间的格式
  15. -D (-decimal) 以十进制显示标签ID
  16. -E,-ex,-ec (-escape(HTML|XML|C))为HTMLXMLC的转义标记值
  17. -f (-forcePrint) 强制打印所有指定的标签
  18. -g[NUM...] (-groupHeadings) 按标签组输出
  19. -G[NUM...] (-groupNames) 打印每个标签的组名
  20. -h (-htmlFormat) 输出为HTML格式
  21. -H (-hex) 以十六进制显示标签ID
  22. -htmlDump[OFFSET] 生成HTML格式的二进制转储
  23. -j[[+]=JSONFILE] (-json) JSON格式导出/导入标签
  24. -l (-long) 使用长2行输出格式(标签、值各一行)
  25. -L (-latin) 使用Windows Latin1编码
  26. -lang [LANG] 设定当前语言
  27. -listItem INDEX 从列表中提取特定项目
  28. -n (--printConv) 不转换,直接打印
  29. -p FMTFILE (-printFormat) 以指定格式输出
  30. -php 将标签导出为PHP数组
  31. -s[NUM] (-short) 简短输出
  32. -S (-veryShort) 非常简短输出
  33. -sep STR (-separator) 设置列表项的分隔符字符串
  34. -sort 按字母顺序对输出进行排序
  35. -struct 启用结构化信息的输出
  36. -t (-tab) 以制表符分隔的列表格式输出
  37. -T (-table) 以表格格式输出
  38. -v[NUM] (-verbose) 打印详细消息
  39. -w[+|!] EXT (-textOut) 写入(或覆盖!)输出的文本文件
  40. -W[+|!] FMT (-tagOut) 为每个标签写入输出文本文件
  41. -Wext EXT (-tagOutExt) 用-W指定要写入的文件类型
  42. -X (-xmlFormat) 使用RDF/XML输出格式
  43. 执行选项
  44. -a (-duplicates) 允许提取重复的标签
  45. -e (--composite) 不生成复合标签
  46. -ee (-extractEmbedded) 从嵌入式文件中提取信息
  47. -ext[+] EXT (-extension) 只处理具有指定扩展名的文件
  48. -F[OFFSET] (-fixBase) 修复制造商Makernotes偏移
  49. -fast[NUM] 提取元数据时提高速度
  50. -fileOrder[NUM] [-]TAG 设置文件处理顺序
  51. -i DIR (-ignore) 忽略指定的目录名称
  52. -if[NUM] EXPR 按条件处理文件
  53. -m (-ignoreMinorErrors) 忽略小错误和警告
  54. -o OUTFILE (-out) 设置输出文件或目录名称
  55. -overwrite_original 重命名tmp文件覆盖原始文件
  56. -overwrite_original_in_place 通过复制tmp文件覆盖原始文件
  57. -P (-preserve) 保留文件修改日期/时间
  58. -password PASSWD 处理受保护文件的密码
  59. -progress[:[TITLE]] 显示文件进度计数
  60. -q (-quiet) -q不显示正常消息,-q-q不显示警告
  61. -r[.] (-recurse) 递归处理子目录
  62. -scanForXMP 扫描所有文件以获取XMP
  63. -u (-unknown) 提取未知标签
  64. -U (-unknown2) 提取未知的二进制标签
  65. -wm MODE (-writeMode) 设置用于写入/创建标签的模式
  66. -z (-zip) 读/写压缩信息
  67. 其他选项
  68. -@ ARGFILE 从文件中读取命令行参数
  69. -k (-pause) 结束前先暂停
  70. -list[w|f|wf|g[NUM]|d|x] 列出各种exiftool功能
  71. -ver 打印版本号
  72. -- 结束选项
  73. 特殊功能
  74. -geotag TRKFILE 从指定的GPS日志对图像进行地理标记
  75. -globalTimeShift SHIFT 移位所有格式化的日期/时间值
  76. -use MODULE 从插件模块添加功能
  77. 实用工具
  78. -delete_original[!] 删除"_original"备份
  79. -restore_original "_original"备份还原
  80. 高级选项
  81. -api OPT[[^]=[VAL]] 设置ExifTool API选项
  82. -common_args 定义通用参数
  83. -config CFGFILE 指定配置文件名
  84. -echo[NUM] TEXT 将文本回显到stdoutstderr
  85. -efile[NUM][!] ERRFILE 保存错误的文件名
  86. -execute[NUM] 一行执行多个命令
  87. -srcfile FMT 处理其他文件来源
  88. -stay_open FLAG 继续阅读-@ argfile,即使在EOF之后
  89. -userParam PARAM[[^]=[VAL]] 设置用户参数 (API UserParam opt)

使用

几个常用的参数
  -r:递归处理子目录
  -overwrite_original:不备份_original文件,直接覆盖
  -restore_original:恢复备份
  -delete_original:删除备份

  1. 读取文件所有元数据
  1. exiftool a.jpg
  1. 写入标签artist、值rmnof到文件a.jpg(如果artist已存在将更新其值)
  1. exiftool -artist=rmnof a.jpg
  2. exiftool -artist=rmnof a.jpg b.jpg c.jpg  (同时写入多个文件)
  3. exiftool -artist=rmnof D:/images    (写入目录中所有文件)
  4. exiftool -artist=rmnof D:/images -r   (递归处理子目录)
  5. exiftool -artist="rmnof" -copyright="rmnof.com" a.jpg (同时写入多个标签)
  1. 将创建时间、光圈、快门速度和ISO四项以列表形式保存为out.txt
  1. exiftool -T -createdate -aperture -shutterspeed -iso DIR > out.txt
  1. 打印某照片的尺寸和曝光时间
  1. exiftool -s -ImageSize -ExposureTime a.jpg
  1. 递归扫描某目录所有照片,将共有的元数据写入相同文件名的txt文件中
  1. exiftool -r -w .txt -common DIR
  1. 生成image.raw的缩略图thumbnail.jpg
  1. exiftool -b -ThumbnailImage image.raw > thumbnail.jpg
  1. 从a.jpg提取完整的xmp数据记录
  1. exiftool -xmp -b a.jpg> out.xmp
  1. 递归删除某目录下所有文件的全部元数据
  1. exiftool -all= -r DIR

基于ExifTool引擎的实用程序

详细查看官方文档: ExifTool实用程序

  1. WIndows
    • Metadata++:图形界面,可以查看、编辑、提取和复制元数据。
    • GeoSetter:图形界面,用于显示和更改图片的GPS数据。
    • AdvancedRenamer:图形界面,通过元数据信息重命名文件。
    • AutoJpegTrunk:图形界面,清理图片所有元数据的工具。
    • ExifTool GUI for Windows:图形界面,可以查看元数据,和一些编辑功能
  2. Android
  3. 在线工具
  4. ExifTool 命令示例