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 正常吗?
大相册里正常。通常是实况照片的视频片段、编辑过的副本,以及很早上传、本来就没有附属文件的文件。