Takeout JSON
ZH

Immich 导入后照片日期不对?原因和修复方法

为什么照片导入 Immich 后落在错误的日期,Immich 按什么顺序从 EXIF 和附属文件里取日期,以及怎样在导入前把文件修好。

你搭好了 Immich,把照片库传了上去,时间线却是乱的。几千张照片的日期是你导入的那天。多年前的旅行照片排在最上面。还有一些照片,日期对,时间正好差了几个小时。

Immich 怎么决定一张照片的日期

Immich 读每个文件的元数据,按固定的顺序取找到的第一个日期。大致是:文件旁边如果有 XMP 附属文件,先读它;然后是 EXIF 的 DateTimeOriginal;然后是视频的 CreateDate;最后才用文件的修改时间兜底。

它读的是文件,不会问你。所以一张没有 EXIF 日期的照片就拿文件时间,而文件时间是你最后一次复制留下的,通常就是今天。两者的区别见拍摄日期和修改日期有什么区别

Immich 自己的上传工具,也就是手机 App 和命令行,会把文件的修改时间一起传过去。如果这个时间也是错的,这张照片就没有任何东西能救了。

常见的几个原因

Google Takeout。这是最大的一个。Google 把很多照片的 EXIF 日期去掉,把真实日期放在文件旁边的 .json 附属文件里。Immich 不读 Google 的 .json 格式。直接上传的话,每一张没有 EXIF 的照片都拿到上传那天的日期。这种情况的完整指南见 Google 相册迁移到 Immich

聊天软件。WhatsApp、微信这类软件会把 EXIF 整个去掉,这些照片只剩文件时间。见微信保存的照片没有拍摄日期

截图和下载的图片。PNG 和网上存下来的图片很少有 EXIF 日期。

扫描件。里面是扫描仪的日期,也就是你扫描的那天,不是照片拍摄的那天。

时区偏移。一张有 EXIF 日期、但没有时区偏移的照片,有的流程当作 UTC,有的当作本地时间。日期是对的,小时差了。较新的手机会写时区偏移标签,就没有这个问题。

两种修法

在 Immich 里修。网页界面可以选中照片,改日期和时间,一次改一批选中的。几张照片这样改没问题。一个四万张的 Takeout 导出就不行了,而且改动只存在 Immich 的数据库里。以后把照片库导出来,日期又没了。

先把文件修好。上传前把正确的日期写进每个文件的 EXIF。Immich 读到的就是对的,你以后用的任何工具也都是对的。这是能长期保持的修法。

immich-go,什么时候用它

immich-go 是免费的命令行上传工具,它认识 Google Takeout。它读 .json 附属文件,和照片配对,上传时把正确的日期一起发给 Immich。如果 Immich 是你唯一的去处,你也不怕用终端,它是个好工具,还能处理相册。常见报错见 immich-go 提示缺少 JSON

它不做的事是修改文件。日期进的是 Immich 的数据库,不是照片。以后再搬一次家,或者让 PhotoPrism、苹果照片读同一批文件,就得从头再来。

手动修文件

exiftool 可以把 Takeout 的日期写进 EXIF。命令比较麻烦,因为 Google 附属文件的名字在好几个地方和照片名对不上。完整例子见 exiftool 修复指南

没有附属文件、也没有 EXIF,但文件时间是对的照片,把文件时间复制进去:

exiftool "-DateTimeOriginal<FileModifyDate" -if 'not $DateTimeOriginal' -r .

一个文件夹,你只知道日期,别的都不知道,就直接设:

exiftool -DateTimeOriginal="2014:08:10 12:00:00" -overwrite_original .

然后在 Immich 的管理页面重新跑一次元数据提取任务,或者重新上传,让它读到新的值。

用软件做

Takeout JSON Metadata Fixer 帮你准备一个能干净导入 Immich 的文件夹。它把真实的日期和 GPS 写进每个文件,Immich 直接从 EXIF 读。

给它一个 Takeout 导出,一个 zip 或很多个都行,也可以是任何文件夹。对每张照片,它先从 .json 附属文件取日期,没有就用 EXIF,再没有就用文件时间,然后把结果写进文件的 EXIF 和文件时间。GPS 也一样。HEIC 可以顺便转成 JPG。完全没有日期的照片,可以给整个文件夹设一个日期和地点。

打开对应选项,它还会在每个输出文件旁边写一个 .json 附属文件。Immich 本身不读这些,但 immich-go 和其他导入工具会读,而且元数据在任何照片库之外也能读到。然后用 Immich App、命令行或外部库上传输出文件夹。日期在文件里,第一次就对。

离线运行,支持 macOS、Windows 和 Linux,界面有简体中文。前 1000 张照片免费,不限数量一次性 19.99 美元。

常见问题

已经导入了,要从头再来吗?

不一定。先把磁盘上的文件修好,然后在 Immich 管理页面对所有资源跑一次「提取元数据」任务。如果文件是上传进去的,而不是外部库,就要重新上传修好的文件,再删掉旧的,因为 Immich 存的是它自己的副本。

为什么有些时间差了几个小时?

时区。EXIF 日期没有时区偏移,Immich 根据版本和设置,把它当作 UTC 或服务器时间。新版本处理得更好。把服务器时区设成大部分照片拍摄地的时区也有帮助。见照片时间差了几个小时怎么办

Immich 现在能读 Google 的 .json 附属文件了吗?

截至本文写作时,不能直接读。它读 XMP 附属文件。immich-go 能读 Google 的格式并在上传时转换。这一点会变,留意 Immich 的更新说明。

修 EXIF 会影响画质吗?

不会。写 EXIF 只改元数据那一块,压缩过的图像不动。