整理硬盘里几年前的照片是越来越多人的隐痛——iPhone 导出的 IMG_4321.HEIC、单反的 DSC_0987.NEF、无人机的 DJI_0042.JPG、网盘下载回来又被 QQ 改成 mmexport1709891234567.jpg——文件名彻底失去时间线意义。
EXIF 里其实藏着每张图准确到秒的拍摄时间,把它批量提到文件名就行。这篇按”先看 EXIF → 选执行方式 → 拼命名模板 → 兜底无 EXIF → 时区与跨机型问题”五段讲清楚。
EXIF 拍摄时间到底是什么
打开任意一张相机/手机直出的图片,里面有一个标准字段 DateTimeOriginal(也叫”原始拍摄时间”),格式是字符串 2024:03:15 14:23:07(注意年月日之间是冒号不是横杠,这是 EXIF 规范)。
| 字段 | 来源 | 内容 |
|---|---|---|
DateTimeOriginal | 相机/手机按下快门时写 | 拍摄那一刻 |
DateTimeDigitized | 数字化时间 | 通常等于上面,但扫描胶片时不同 |
DateTime | 修改时间 | 后期处理时会被更新 |
mtime(文件系统) | OS 维护 | 任何拷贝、转码都可能改 |
90% 场景认准 DateTimeOriginal。本工具的 {exif-date} / {exif-time} 占位符读的就是它。
文件修改时间为什么不可靠
不少人凭直觉以为”文件创建时间 = 拍摄时间”,几乎不成立。
| 操作 | 对 mtime 的影响 |
|---|---|
| 相机/手机内拷贝到 SD 卡 | 通常保留 |
| iCloud / Google Photos 下载 | 重置为下载时间 |
| 微信 / QQ 接收 | 重置为接收时间 |
| 拷到 NAS 再拷回来 | 视协议而定(SMB 多半重置) |
| AirDrop | iOS 通常保留、跨 macOS 不一定 |
| 双击图片用 Preview 打开 | 可能更新为打开时间 |
| 第三方相册 App 同步 | 不可预料 |
实测:一张 2018 年拍的旧照片,从 iCloud 下载到电脑,mtime 显示 2024 年。这就是为什么必须读 EXIF。
主流格式的 EXIF 兼容性
本工具底层用 exifr 库,覆盖如下:
| 格式 | 拓展名 | EXIF 支持 | 备注 |
|---|---|---|---|
| JPEG | .jpg .jpeg | ✅ 完整 | 最稳 |
| HEIC / HEIF | .heic .heif | ✅ 完整 | iPhone 默认格式 |
| TIFF | .tif .tiff | ✅ 完整 | 扫描件常见 |
| Nikon RAW | .nef | ✅ 完整 | |
| Canon RAW | .cr2 .cr3 | ✅ 完整 | |
| Sony RAW | .arw | ✅ 完整 | |
| Fuji RAW | .raf | ✅ 完整 | |
| Panasonic RAW | .rw2 | ✅ 完整 | |
| DJI DNG | .dng | ✅ 完整 | 无人机、Adobe DNG |
| PNG | .png | ⚠️ 极少 | 标准不含 EXIF |
| WebP | .webp | ⚠️ 看导出 | Google Photos 写、浏览器另存不写 |
| 截图 | 任意 | ❌ 无 | 系统截图工具不写 EXIF |
没 EXIF 的图怎么办?{exif-date} 输出空字符串——模板写成 {exif-date}{name}{ext} 兜底,无 EXIF 时至少保留原名。
推荐的命名模板配方
按”产物长什么样”挑模板:
| 模板 | 产物 | 适合 |
|---|---|---|
{exif-date}{ext} | 20240315.jpg | 一天只拍一张(少见) |
{exif-date}_{exif-time}{ext} | 20240315_142307.jpg | 日常推荐,到秒级唯一 |
{exif-date}_{exif-time}_{n3}{ext} | 20240315_142307_001.jpg | 连拍场景最稳,绝不重名 |
{exif-date}_{n3}{ext} | 20240315_001.jpg | 不在意秒数、只想看日期 + 顺序 |
{exif-date}_{name}{ext} | 20240315_IMG_4321.jpg | 保留相机原名做溯源 |
IMG_{exif-date}_{n4}{ext} | IMG_20240315_0001.jpg | 模仿 Google Photos 命名风格 |
实战首选 {exif-date}_{exif-time}_{n3}{ext} —— 拍摄时间精确到秒 + 序号兜底连拍。
“按 EXIF 排序”必须打开
模板带 {n} 序号时,序号的编号顺序由”排序”决定:
| 排序 | 1.jpg → 100.jpg 的编号依据 |
|---|---|
| 按文件名 | 原相机文件名字母序(IMG_4321 < IMG_4322) |
| 按修改时间 | 文件系统 mtime,不一定是拍摄顺序 |
| 按拍摄时间 (EXIF) | DateTimeOriginal,真正的拍摄顺序 |
| 按导入顺序 | 你拖入文件的顺序,不稳定 |
拍摄时间整理图库一律选”按拍摄时间 (EXIF)“。否则模板带日期但序号乱跳,看起来很奇怪。
原地改名 vs ZIP 下载
| 维度 | 原地改名 | ZIP 下载 |
|---|---|---|
| 浏览器 | Chrome / Edge / 新版 Safari | 全部浏览器 |
| 加载方式 | 左下”选择文件夹”按钮(必须) | 拖入 / 选文件均可 |
| 是否产生副本 | 否,直接改原文件 | 是,原文件不动 + ZIP |
| 内存占用 | 低(不全量加载) | 高(全部读进内存打包) |
| 文件规模上限 | 几万张 RAW 也行 | 总大小 ≤ 2GB、≤ 5000 文件 |
| 撤销 | 不可撤销——但可用工具反向跑 | 原文件还在,可用作”回退” |
整理本地图库直接用原地改名。分享给朋友 / 跨设备走 ZIP。
关键限制:原地改名只处理目录的直接子文件,不递归子目录——这是浏览器安全限制,避免误改深层结构。需要递归整理时,每个子目录单独跑一次。
时区与跨机型时间偏移
EXIF 的 DateTimeOriginal 是本地时间字符串,不带时区信息——同一张图在不同时区的人读到都是同一行字。
常见错位场景:
| 场景 | 表现 | 怎么修 |
|---|---|---|
| 出国旅游胶片机没改时区 | 全部图差固定小时数 | 用 ExifTool AllDates+=8 批量修,再回工具改名 |
| iPhone GPS 时区识别错 | 个别图差 6-12 小时 | 重命名后手动修这几张 |
| 多机协同(婚礼摄影) | 不同机器时间不一致 | 拍前对齐所有机器系统时间,事后 ExifTool 修 |
| 跨年/跨日临界 | 凌晨 00:00 前后的图错乱 | 通常是手机时区切换瞬间,影响小 |
实战建议:
- 出国旅行前——相机系统时间调到目的地时区
- 拍重要场合前——所有协同机器对齐到同一时钟(手机看准官方授时再调)
- 整理时先抽样验证——抽一张已知拍摄时间的图,看 EXIF 是否吻合,再批量改名
没 EXIF 的图怎么兜底
截图、网图、被微信压缩过的图—— {exif-date} 会输出空字符串。三种兜底策略:
策略 1:保留原名
模板:{exif-date}{name}{ext}
有 EXIF:20240315IMG_4321.jpg
无 EXIF:IMG_4321.jpg(fallback 到原名)
策略 2:用修改时间兜底
模板:{exif-date}{mtime}{ext}
有 EXIF:20240315.jpg(exif 已经填了,mtime 也填但拼一起)
无 EXIF:20231220.jpg(仅 mtime)
不太推荐——同一张图可能两个日期都填上变成 20240315_20231220.jpg,反而乱。
策略 3:两次跑工具
先用 {exif-date}_{exif-time}{ext} 改一遍(带 EXIF 的图变成新名、无 EXIF 的图变成纯 .jpg 标红跳过),把没改成的单独挑出来再用 {mtime}_{name}{ext} 跑第二遍。
最稳的是策略 1 —— 一次跑完,无 EXIF 的图保留可识别的原名,事后人工挑出来手动处理。
完整示例:婚礼摄影师整理 5000 张
场景:单反 + 副机两台机器拍,总共 5000+ 张 NEF + JPG,按相机的 IMG_ 序号排没意义(两台机器都从 0 开始),按拍摄时间整理才能还原完整流程。
步骤:
- 把两台机器的卡都倒到同一文件夹
wedding-2024-03-15/ - Chrome 打开工具,点”选择文件夹(原地改名)“加载
- 排序选”按拍摄时间 (EXIF) 升序”
- 模板填
{exif-date}_{exif-time}_{n4}{ext} - 预览检查重名行(连拍可能撞秒)——
{n4}兜底已经保证唯一 - 检查”无 EXIF”标记(手机抓拍的旁拍图可能在)—— 模板可改
{exif-date}_{exif-time}_{n4}_{name}{ext}保留原名兜底 - 执行 → 5000 张文件名变成
20240315_092301_0001.NEF、20240315_092301_0002.JPG(两机器同秒都拍到) - 抽 20 张验证——确认仪式、敬酒、合影各段时间合理
产物:丢进 Lightroom 直接按文件名排序就是真实拍摄顺序,比按时间排更稳(断电、卡导出顺序错乱都不影响)。
一句话总结
{exif-date}_{exif-time}_{n3}{ext} 模板 + “按拍摄时间 (EXIF)” 排序 + Chrome 原地改名 —— 这套组合解决了 95% 的照片整理场景。事前抽样验证 EXIF、事后抽 10 张校验时区——剩下 5% 的奇葩问题在这两步就能拦截。
整理完图库后,下一步是清除 EXIF 隐私(GPS、相机序列号)再分享——用 [[exif-clean]];统一格式压缩——用 [[image-compress]];做成长图分享——用 [[long-image]]。