ExifTool入门到实战:图片视频元数据批量读取、写入与清理指南

发布时间:2026/10/12 5:55:53
ExifTool入门到实战:图片视频元数据批量读取、写入与清理指南 如果你手头有一堆图片和视频想快速知道它们是谁拍的、用什么设备拍的、什么时候拍的、甚至拍摄地点的经纬度第一个浮现在我脑子里的工具永远是 ExifTool。这个开源工具几乎是图像和视频源信息解析领域的标配支持几十种文件格式命令行一敲就能把隐藏的元数据全倒出来。这篇文章我会从零开始讲清楚它到底是什么、怎么装、怎么用它批量化处理你的素材以及我在实际使用中遇到的坑。我会尽量写得实在一些适合刚接触元数据处理的人也适合已经在用但想提高效率的老手。1. 一张图里原来藏着这么多看不见的纸条很多人拍的 JPG、RAW、MP4表面上是一段像素或者视频流实际上文件内部还带了一套档案纸记录着拍摄时的各种信息。这套档案纸就是源信息业界一般叫元数据。ExifTool 处理的就是这些东西它的名字也来自于最早的照片元数据标准 EXIF。1.1 照片的身份证到底写了什么我把元数据理解成一张照片的身份证加日志本。一张普通手机照片里面至少包含这几类信息设备信息相机厂商、相机型号、镜头型号、固件版本拍摄参数快门速度、光圈、ISO、焦距、测光模式、闪光灯是否打开时间和日期拍摄时间、数字化时间、修改时间图像信息像素尺寸、分辨率、色彩空间、压缩方式位置信息如果手机开了定位会写入 GPS 纬度、经度、海拔缩略图很多相机还会在文件里附带一张小尺寸预览图这些信息不是 Photoshop 后期加上的文字而是拍摄时相机根据传感器和处理器状态自动写入的。后期软件也可能追加信息比如 Adobe 系列会写 XMP 命名空间Windows 和 macOS 的资源管理器也会读出来给你看只是它们各写各的字段格式不完全一样。表格里可以快速看出不同标准之间的差异标准常见于主要内容EXIF绝大多数相机和手机照片拍摄参数、日期、GPSIPTC新闻、图库照片作者、标题、关键词、版权、联系方式XMPAdobe 生态、PDF、RAW版本历史、评级、关键词、相机原始设置MakerNotes各相机厂商私有区域快门数、序列号等私有数据QuickTime/MP4视频文件创建时间、录制设备、编码信息、轨道数据EXIF 是历史最悠久也最基础的那层IPTC 是图库和新闻行业用来描述画面内容的标准XMP 则是 Adobe 后来推动的扩展标准。ExifTool 的厉害之处就在于它把这些不同标准统一放在一个命令行工具里读不用再分别打开三四个软件。1.2 视频同样有字幕式的源信息视频文件和静态图片不太一样。常见的 MP4、MOV 容器基于 QuickTime 或 ISO BMFF 结构里面的元数据分散在多处比如文件头里的标签、视频轨和音轨各自的轨道属性、甚至是每个时间片段里的样本信息。ExifTool 把视频里的创建时间、编码器、码率、帧率、音频采样率、录制设备型号、GPS 轨迹等都能读出来。有些影视拍摄素材里面还会带记录片场信息的辅助数据比如摄影机位、镜头参数是否在连续镜头之间有变化。做后期的人用得比较多的是读取每个 clip 的创建时间和摄影机型号方便批量套 LUT、命名素材、同步多机位。1.3 ExifTool和其他查看工具的区别操作系统自带的右键属性和看图软件也能显示一些基本信息但这些工具通常只显示它们自己选择暴露出来的字段升级了 UI 也不一定升级字段覆盖范围。ExifTool 是命令行工具行为高度可控输出格式可以自己选能批量处理几百上千个文件也能精确到修改某一个单独标签而不动其他任何字节。我经常用一句话形容这种工具图形界面工具适合看命令行工具适合算。当你的需求是批量重命名、批量写版权、批量导出到数据库这类机械性操作交给 ExifTool 这样可脚本化调用的工具效率完全不在一个量级。2. 装好它只需两分钟但使用逻辑值得先想明白ExifTool 是开源免费的跨平台支持 Windows、macOS、Linux也有对应的图形化扩展但核心还是 Perl 写的命令行程序。安装这一步没什么难度难的是思维上从看图切换到操作字段。2.1 安装方式在 Windows 系统上我一般直接下载官方提供的 Windows 可执行压缩包解压后把 exiftool.exe 放到一个固定目录并把这个目录加入 PATH这样在任意终端里都能调用。macOS 和 Linux 更简单通过系统包管理器一条命令就能装好。装完打开终端输入exiftool -ver能输出版本号就说明环境已经通了。提示如果你有多个版本混用的场景建议用完整版本号定位问题。Exiftool 在不同大版本之间对某些私有标签的解析行为会有差异我见过同一段命令在两个版本下输出字段名略有不同的情况。2.2 先学会读读取单张照片的完整源信息最基本的用法就是直接跟文件路径。在终端执行exiftool IMG_001.jpg这会输出一大串标签名: 值的明文结果比如相机厂商、镜头型号、拍摄时间、GPS 坐标、缩略图信息等。如果文件没有任何元数据输出会非常短只有文件名、文件大小、文件类型这几项系统级标签这些标签不是文件内部写的而是 ExifTool 根据文件系统实时计算出来的。读信息时我强烈建议先看原始全量输出不要一上来就用过滤条件因为你根本不知道这个文件里有哪些字段。只有见过一次完整的样子后面才知道该过滤哪些字段。2.3 如何只提取自己关心的字段当你已经知道目标字段名后可以直接用-标签名来指定输出exiftool -DateTimeOriginal -Make -Model -ISO IMG_001.jpg每个标签前面的前缀表示命名空间比如EXIF:DateTimeOriginal、QuickTime:CreateDate。写全命名空间能避免歧义因为同一个字段名在不同标准下不一定代表同一个时间。比如 JPEG 里常见CreateDate和DateTimeOriginal是两回事前者是文件创建时间后者是拍摄瞬间的时间两者可能相差好几天。如果你只是想看这个文件支持哪些标签可以加-s参数比如exiftool -s IMG_001.jpg它会输出短字段名方便后续脚本直接引用。2.4 输出格式JSON、CSV、纯文本怎么选单文件看纯文本没问题批量处理时纯文本就难整理所以 ExifTool 提供了多种输出格式exiftool -j -- lat long image.jpg exiftool -csv *.jpg metadata.csv-j输出 JSON适合丢给 Python、Node 等程序继续处理。-csv输出表格结构适合直接导入 Excel 做交接和归档。实际项目里我经常先用 CSV 导出全量字段再在表格工具里做透视这样能快速发现一批素材里哪些文件缺少关键标签、哪些文件时间不对、哪些文件 GPS 是空的。还有-p参数可以自定义输出模板比如只打印日期和文件名exiftool -p ${DateTimeOriginal} ${FileName} *.jpg这在写自动化脚本时特别好用比先导出 CSV 再二次处理更直接。3. 真正干活时的高频操作批量重命名、整理与写入读信息只是第一步日常用得最多的其实是批量写入和批量改名。我接手过很多摄影素材归档项目核心需求几乎都一样把零散命名的一堆文件按拍摄时间重新命名同时把作者、版权、关键词这些基础字段统一写进去。3.1 按拍摄时间批量重命名假设你有一个目录全是 JPG想把文件名改成20250120_153000这种格式可以这样操作exiftool -FileNameDateTimeOriginal -d %Y%m%d_%H%M%S%%-c.%%e ./素材目录解释一下这行命令的逻辑-FileNameDateTimeOriginal表示把DateTimeOriginal的值作为新文件名的来源后面的-d是日期格式模板%%-c表示如果目标文件名已经存在就自动追加序号避免覆盖%%e代表原始扩展名。这个用法几乎是图片素材归档的标配。如果你有 RAW 文件和对应的 JPG 同在一个目录用上面这条命令就会出现两个文件重名的情况因为它们的 DateTimeOriginal 通常一样。这时候需要先按扩展名区分批次或者用%f保留原文件名前缀再加日期后缀比如%f_%Y%m%d_%H%M%S这样既能保留原始序号又不会冲突。3.2 批量写入版权与作者信息发布到个人作品集或者委托拍摄的照片最好在一开始就写入作者和版权信息避免后续一张张补。我自己一般用三条一起写exiftool -Artist某开发者 -CopyrightCopyright 2025 某开发者 -ImageDescription个人摄影作品集 *.jpg写完以后可以用读信息确认一下确保每个文件的Artist和Copyright都覆盖到了。需要注意的是很多看图软件只看 XMP 里的Creator而不看 EXIF 里的Artist所以如果希望更通用最好多个标准一起写exiftool -Artist某开发者 -CopyrightCopyright 2025 -XMP-dc:Creator某开发者 -XMP-dc:RightsCopyright 2025 *.jpg如果只用 EXIF 字段在某些平台上可能显示不出来这一点在给图库供图时尤其吃亏。3.3 整批照片的GPS坐标补齐有些老相机或者关闭了定位的手机拍出来的照片没有 GPS 字段但你可能希望用行车记录仪或者手机轨迹补上坐标。ExifTool 可以直接写入 GPS 标签接受十进制格式也接受度分秒格式exiftool -GPSLatitude39.9042 -GPSLongitude116.4074 -GPSLatitudeRefN -GPSLongitudeRefE image.jpg如果你有某条轨迹的起点和终点坐标想给一批照片统一写入同一个 GPS 坐标也可以循环遍历。更高级的玩法是把 GPS 轨迹文件里的时间点和照片时间做匹配按秒差值插值出每张照片的坐标这需要先解析轨迹文件再把结果喂给 ExifTool可以做成一个小脚本。但这里有个前提照片自身时间必须准确否则坐标会全部偏移这点在长途旅行时尤其明显。3.4 从一张图复制元数据到另一张图有时候你拍了一组连拍只有其中一张被后期软件处理过其他原图还保留着最完整的信息。如果希望后期图保留原图的全部元数据可以直接用-TagsFromFile复制exiftool -TagsFromFile 原图.jpg -all:all 处理后的图.jpg从原图复制所有标签到处理后的图默认会备份处理后的图需要配合-overwrite_original才会直接覆盖不过这个参数要慎用。实际工作中更常见的用法是只复制特定字段比如从 RAW 文件把时间、相机参数、GPS 复制到导出的 JPGexiftool -TagsFromFile RAW文件.CR3 -DateTimeOriginal -GPSLatitude -GPSLongitude 导出文件.jpg这样能避免把 RAW 里特有的私有 MakerNotes 复制到 JPG 上造成兼容性问题。3.5 日期归档脚本的思路如果是长期累积的照片我习惯按年/月/日目录结构归档。核心逻辑是先读取每张照片的 DateTimeOriginal再让 ExifTool 生成目标路径exiftool -DirectoryDateTimeOriginal -d ./归档/%Y/%m/%d *.jpg-DirectoryDateTimeOriginal表示目标目录由日期来决定配合-d模板就能自动创建对应文件夹并移动文件。这个命令特别适合把手机里攒了好几年的照片一次性按时间摊开。执行前建议先加-dry-run或-test参数预览一遍ExifTool 支持这两个参数会显示将要执行的操作而不实际改动这是大规模操作前最安全的习惯。4. 视频文件没你想的那么简单解析MP4/MOV里的隐藏信息静态照片的元数据已经够复杂了视频文件的信息层级要多得多。ExifTool 对视频的支持不是蜻蜓点水它能深入容器内部读取不同轨道各自的属性还能把每个时间片段里的嵌入式数据提取出来。4.1 视频里能读到哪些源信息一段手机拍的 MP4用 ExifTool 读取后可以拿到容器信息文件格式、时长、文件大小、总比特率视频轨编码格式、分辨率、帧率、显示宽高比、码率音频轨音频编码、采样率、声道数量、语言代码拍摄信息录制设备型号、创建时间、位置信息编码器信息软件名称、编码参数版本这些信息对剪辑工作流特别有价值。比如你从甲方那边收到几十个素材片段想确认哪些是 4K 哪些是 1080P、哪些是 H.264 哪些是 HEVC不需要逐个拖进剪辑软件一条命令就能列出来exiftool -csv -VideoFrameRate -VideoCodecType -ImageWidth -ImageHeight *.mp44.2 用 -ee 展开每一个时间片段视频文件里面的元数据不只在文件头有些设备会在视频流内部按固定间隔写入信息比如运动相机每一段录制的状态数据、经纬度坐标、速度等。默认情况下 ExifTool 只读取文件头部的主要标签这些嵌入式数据需要加-ee参数才能完整提取exiftool -ee -api QuickTimeUTC1 运动视频.mp4-ee全称是extract embedded information它会把视频流中重复出现的元数据逐段展开。展开之后你会发现原本只有几条记录的结果变成了几十条甚至上百条每条对应不同的时间区间这在分析潜水、骑行、飞行轨迹时非常有用。不过要提醒一句-ee的输出会让普通读信息的命令变得非常长所以日常归档不需要加这个参数只有明确要提取嵌入式 GPS 或状态数据时才用。4.3 视频元数据的时区陷阱视频文件的时间字段和照片不太一样。QuickTime 容器里的CreateDate和ModifyDate通常以 UTC 时间存储而很多播放器为了方便显示会自动加本地时区。如果你直接用 ExifTool 读看到的时间可能和拍摄软件显示的时间差了好几个小时。这种情况下我建议统一加一个参数exiftool -api QuickTimeUTC1 video.mp4-api QuickTimeUTC1表示把 QuickTime 的 UTC 时间自动转成本地时区来显示。批量对比视频与照片拍摄时间时这个参数非常重要否则你最后排出来的时间线会错乱。5. 我踩过的坑和绕开它们的办法工具再好用坑也少不了。下面这几条是我实际使用中反复踩过的写出来供参考。每个坑背后都有对应的原因和解决方法看了之后能帮你省不少排查时间。5.1 中文信息乱码写入中文关键词或者作者名时最常见的结果是打开软件一看全是乱码。原因一般是字符编码不一致。有些设备写的是 GBK/GB2312有些软件写的是 UTF-8ExifTool 默认按一定规则去解码遇到不匹配就会显示乱码。解决办法是显式指定字符集exiftool -charset exifUTF8 -charset iptcUTF8 -Artist某开发者 photo.jpg如果文件里的中文已经乱掉了先别急着覆盖。先用不同字符集参数去读比如-charset exifCP1252、-charset iptcGBK等多试几种组合找到能正确显示的那次再考虑如何转存。这个过程中最重要的原则是先读出正确数据再重写文件不要对着乱码猜。5.2 日期和时间偏了8小时处理一批素材时发现所有照片的时间都比实际时间早了或晚了 8 个小时。这通常不是文件的问题而是 ExifTool 根据系统时区换算时用了不同规则。照片里的DateTimeOriginal本身可能按本地时间存储如果系统时区设置不对输出就会偏。对于已经偏了的文件正确做法是先确认时区偏移标签是否存在比如OffsetTimeOriginal。然后可以这样调整exiftool -DateTimeOriginal-8:00:00 *.jpg这表示对DateTimeOriginal做时间减法往前调 8 小时。反过来用就是往后调。为了避免把方向搞反建议先对单个文件做测试读取确认无误后再对整批操作。5.3 GPS坐标到底是哪种格式ExifTool 默认读取 GPS 时输出度分秒格式类似39 deg 54 15.12 N。写入时很多人直接填了十进制的39.9042结果读出来发现变成了奇怪的组合这是因为没告诉它这是十进制格式。写入十进制坐标时我习惯这样写避免歧义exiftool -GPSLatitude39.9042 -GPSLongitude116.4074 -GPSLatitudeRefN -GPSLongitudeRefE photo.jpg可以加引号让 ExifTool 明确参数边界。如果你拿到的是度分秒字符串也可以写39 54 15.12这种带空格的格式它同样能解析。批量补 GPS 前先拿一张测试图读写一遍确认输出不报错后再整批执行这是最稳妥的流程。5.4 overwrite_original 参数别乱用ExifTool 默认修改文件前会复制一份原名加_original后缀的备份文件这是它保护数据的方式。有的人为了省磁盘空间喜欢加-overwrite_original但一旦批量命令里写错了字段原始文件就被覆盖了想恢复都难。我自己只在两种情况用-overwrite_original一是面对大量临时文件且目标明确二是处理完后马上有校对步骤。否则还是保留备份等你验证一批没问题后再统一删除_original文件这个习惯能救回不少意外。5.5 递归处理时误伤非目标文件递归参数-r很好用但它会按扩展名匹配时忽略目录内所有文件一不小心就会把隐藏在子目录里的视频文件也处理了。我建议在批量操作时主动限定扩展名exiftool -r -ext .jpg -ext .jpeg -tagsfromfile 参数 ./素材库这样只处理 JPG 和 JPEG 两种格式其他文件即使递归到也不会被改动。尤其是当前目录如果你混有输出文件比如_original备份也要考虑过滤掉避免把备份文件也当成原始文件二次写入。6. 分享图片前记得先撕掉这些纸条安全与隐私最后聊一个很多人容易忽略的点源信息在帮助回溯拍摄参数的同时也可能泄露隐私。照片里的 GPS 坐标、拍摄时间、设备序列号都可能被有心人利用。在公开发布图片前学会用 ExifTool 抹掉敏感信息是每个素材处理者都应该掌握的基本操作。6.1 一张分享出去的照片会暴露什么你随手拍的一张家里照片如果原图直接发到社交媒体别人下载后通过源信息可能看到你的拍摄地点甚至通过镜头序列号或相机序列号追踪到设备。视频文件也有类似风险文件头里可能带有录制设备的序列号。这些信息平时你看不到但它是真实存在于文件里的数据层。尤其做图库、电商、自媒体的人经常要传图片给外部合作方如果合作方内部有合规审查要求带 GPS 的照片可能直接导致审计问题。所以我处理对外素材的第一道工序永远是清理源信息再谈排版和发布。6.2 一键清除源信息的正确姿势ExifTool 清除所有元数据的命令非常简洁exiftool -all -overwrite_original 要发布的图片.jpg-all的意思是清空所有可写的元数据组执行后照片仍然可以打开只是里面不再有 EXIF、IPTC、XMP 等标签。加-overwrite_original是为了避免留下一堆_original文件因为这个场景下不需要备份原始文件。批量清理时配合递归exiftool -all -r -ext .jpg -ext .png ./待发布目录执行完后可以挑几张重新读信息确认GPSLatitude、DateTimeOriginal等字段已经消失。需要注意清空后图片的创建时间原生信息也会消失对个别平台的时间线展示可能有影响取舍要自己判断。6.3 只抹掉部分敏感字段并不是每次都要清空全部元数据很多时候你只是想去掉位置信息但保留镜头参数和拍摄时间。可以单独删除 GPS 相关标签exiftool -GPSLatitude -GPSLongitude -GPSAltitude -GPSLatitudeRef -GPSLongitudeRef -GPSAltitudeRef photo.jpg把要删除的标签值设为空ExifTool 就会移除该标签。也可以按组删除比如-gps:all只清 GPS 组-exif:all只清 EXIF 组。我自己的习惯是先用-s列一下当前所有标签再决定删哪一组而不是凭记忆删除这样更不容易漏掉字段。我个人的经验是照片的源信息既是一个高效整理素材的工具也是一个需要随时警惕的隐私边界。学会用 ExifTool 读、写、删不光是技术活儿更是一套完整的数字资产管理思维。如果把它的各项参数吃透了你会发现整理几十 GB 的素材根本不是体力活而是一串命令反复执行完的流水线。希望这篇文章里的细节能帮你少走一些弯路。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询