Takeout JSON
ZH

immich-go 提示缺少 JSON、导入后没有位置?两个原因

immich-go 找不到 .json 附属文件,通常是 Takeout 把长文件名截断了;导入后没有地理位置,常常是 GPS 本来就是 0,0。怎样分辨这两种情况,导入前一起修好。

用 immich-go 把 Google Takeout 导入 Immich,日志里一堆「JSON missing」,或者导完打开地图,一大片照片没有位置。这是两件不同的事,修法也取决于你碰到的是哪一个。

原因一:照片和附属文件没配上

immich-go 会读每张照片旁边的 .json 附属文件。配不上,位置就永远到不了 Immich。

Google 让配对变得比应该的难:

  • 附属文件名超过 46 个字符会被截断。
  • 新旧导出的命名规则不一样,2024 年起多了 supplemental-metadata
  • 重复照片的 (1) 在照片名和附属文件名里的位置不一样。

凡是附属文件没配上的照片,导入时都没有位置,而且不报任何错。这些命名规则详见 supplemental-metadata.json 是什么

原因二:本来就没有位置

Google 没有某张照片的 GPS 时,不是把这一项空着,而是写成 0.0, 0.0。这是一个真实存在的坐标,在大西洋里。信任它的工具,要么把照片放到海里,要么比较明智地把它丢掉。

截图和聊天软件里保存的图片,几乎都属于这一类。它们从一开始就没有位置,任何工具都变不出来。

怎么分辨是哪一种

打开一张没有位置的照片对应的 .json,看 geoData 里的纬度和经度:

  • 是真实的数字,说明原来有位置,问题出在配对上(原因一)。
  • 两个都是 0.0,说明 Google 本来就不知道它在哪(原因二)。
  • 根本找不到这张照片的 .json,多半是文件名被截断,或者 (1) 的位置不同(原因一)。

最可靠的办法:导入前先把 GPS 写进照片

与其让 immich-go 在导入时去猜附属文件,不如在 Immich 看到照片之前,就把 GPS 写进照片的 EXIF。Immich 读标准 EXIF 完全没问题,地图会自己填满。

Takeout JSON Metadata Fixer 会处理所有别扭的命名情况,把照片和附属文件配对,把真实坐标写进 EXIF,并把全零坐标当作「未知」,而不是当作大西洋。支持 Windows、Mac 和 Linux,离线运行。前 1000 张照片免费。

修好之后,用 immich-go、网页或手机上传都行,也可以把文件夹加为外部库。完整流程见 Google 相册迁移到 Immich

已经导进去了怎么办

如果全零坐标已经被写进了照片,照片会出现在海里。对这些文件用 exiftool -gps:all= 清掉 GPS,再重新导入。整体的 GPS 修复方法见 Google Takeout 照片没有位置信息

常见问题

更新 immich-go 能解决吗?

较新的版本能处理 supplemental-metadata 命名和截断的文件名,看到大量「JSON missing」先更新。但它解决不了原因二:GPS 本来就是 0,0 的照片,没有位置可以恢复。

缺几百个 JSON 正常吗?

大相册里正常。通常是实况照片的视频片段、编辑过的副本,以及很早上传、本来就没有附属文件的文件。