Google Takeout 导出的照片怎么恢复正确的拍摄时间?
真正的拍摄时间就在照片旁边的 .json 文件里。这里讲不用命令行也能把它写回照片的简单办法,以及手动方法的坑。
正确的日期已经在你的导出包里了。它在每张照片旁边的 .json 文件里,字段叫 photoTakenTime。问题在于没有任何看图软件会读这些文件。它们读的是 EXIF,也就是存在图片文件内部的那块信息,而 Google 把那一块留空了。
所以修复本质上是一个复制的活:从每个 .json 里读出日期,写进对应的照片,再把文件自己的时间戳改成一致。做一张要一分钟。做四万张,就得靠软件。
为什么不能直接按文件时间排
解压之后,每个文件的创建时间和修改时间都是解压那一刻。Windows 的文件资源管理器、Mac 的访达、群晖的 Synology Photos、苹果照片,全都先找 EXIF 里的拍摄时间,找不到才用文件时间。相机拍的照片 EXIF 通常还在,所以看起来一部分照片是对的。截图、微信里保存的图片、扫描件,还有你在 Google 相册里手动改过日期的照片,EXIF 里没有日期,于是全部堆到解压那天。
修好的标志是:EXIF 里有拍摄时间,文件时间和它一致。这样不管照片以后去哪,日期都跟着走。
手动做的三个坑
可以自己写一条 exiftool 命令,很多人也是这么做的。但附属文件的命名让这件事变得麻烦:
第一,Google 会把过长的文件名截断到 46 个字符,所以 PXL_20240311_183022711.jpg 的附属文件叫 PXL_20240311_183022711.jpg.supplemental-m.json,固定后缀匹配不到。
第二,2024 年前后的导出用两种不同的命名方式,IMG_2034.JPG.json 和 IMG_2034.JPG.supplemental-metadata.json,一个模式只能匹配一种。
第三,重名照片的 (1) 序号在附属文件里的位置很怪:照片叫 IMG_2034(1).JPG,附属文件却叫 IMG_2034.JPG.supplemental-metadata(1).json。
一个匹配模式漏掉这些,就会悄无声息地跳过文件,你要到几个月后才发现某一批照片还是错的。细节都在 supplemental-metadata.json 详解和 exiftool 修复指南里。
用软件做
Takeout JSON Metadata Fixer 替你处理上面所有情况。选择 Takeout 文件夹或 zip 文件,选择修好的照片放在哪,点开始。它把每个附属文件和对应的照片配对,写入日期、时间和 GPS,结束时告诉你哪些文件没有可用的数据。没有附属文件的照片保留原有的 EXIF 日期,两者都没有的用文件时间,所以不会有照片变成「无日期」。
顺带可以做的事:按拍摄时间和地点重命名,比如 2019-07-14-1105_Shanghai.jpg;按年/月或按拍摄地点分文件夹;HEIC 转 JPG 并保留元数据。这些都是可选项,只想修日期的话,选「保留文件名」和「保留我的文件夹」。
先跑一遍试运行,看看它打算改什么。全部在你的电脑上完成,不上传,不需要账号,断网也能用。界面有简体中文。Windows、Linux 和 Mac 都支持。前 1000 张照片免费,之后一次性 19.99 美元。
修之前先做两件事
把所有 Takeout 分卷解压到同一个文件夹。照片和它的附属文件经常分在不同的 zip 分卷里,分开解压就配不上对。
检查电脑的时区。附属文件里的时间戳是 UTC,写 EXIF 时会按电脑的时区换算。你在国内拍的照片,电脑设成北京时间(UTC+8)才会得到正确的本地时间。如果你人在国外、大部分照片也是在国外拍的,就设成那边的时区。详见照片时间差了几个小时怎么办。
修完怎么验证
从不同年份挑十张照片:一张截图、一张微信保存的图、一段视频、一张你记得在 Google 相册里改过日期的照片。在新的相册软件或文件资源管理器里找到它们,看「拍摄日期」是不是和 Google 相册里显示的一样。都对了,再删附属文件和原始 zip。
常见问题
只想修日期,不想改文件名和文件夹,行吗?
行。选「保留文件名」和「保留我的文件夹」,软件只写 EXIF 和文件时间,其他不动。
视频也能修吗?
能。MP4 和 MOV 不用 EXIF,日期存在视频容器的另一组标签里,软件会写到播放器读取的位置。
修完能再传回 Google 相册吗?
能,而且日期是对的。Google 相册上传时读文件里的 EXIF,不读附属文件。这也是为什么先修文件再传,比直接把导出包传到另一个账号靠谱。