使用来自Google Takeout的jpg批量加入json

时间:2017-02-03 12:23:47

标签: json exiftool google-photos

我希望留下Google照片,并使用Google Takeout下载了所有照片。现在我有一大堆包含json文件(我认为包含exif数据)和图像的文件夹。结构如下所示:home / user / Billeder / Takeout / Google Photos / 2011-06-09 / file.json。 home / user / Billeder / Takeout(2)/ Google Photos / 2011-07-09 / file.json。

我想将json数据与正确的图像一起加入,并将图像组织在与其创建日期对应的文件夹中。 我一直在看Exiftool,但到目前为止找到的所有答案只显示了如何为单个图像执行此操作。我正在寻找的是一种将所有数据与批量正确图像连接起来的方法。

我正在尝试在linux命令行中执行此操作。 有没有办法做到这一点?

4 个答案:

答案 0 :(得分:4)

Exiftool现在有能力执行ver 10.47。

在我的测试中,我看到了json文件名的两种不同格式,一些是filename.ext.json,一些是filename.json(json文件名中没有扩展名)。这两个命令可以涵盖这两种情况。如果你有混合物,就像我一样,同时运行。

json文件名中带扩展名的文件
exiftool -tagsfromfile '%d/%F.json' '-ImageTag<JsonTag' FileOrDir

json文件名中没有扩展名的文件
exiftool -tagsfromfile '%d/%f.json' '-ImageTag<JsonTag' FileOrDir

FileOrDir替换为您要处理的文件或目录。将ImageTag替换为要复制到的图像中的标记名称。将JsonTag替换为您要从中复制的json文件中的标记名称。如果您使用的是Windows而不是Linux,请使用双引号而不是单引号。

以下是我在json文件中遇到的一些更有用的标记以及我在哪里复制它们的建议。其中两个标记名称(描述和标题)与相关的XMP标记相同,因此不需要将它们重定向到图像标记名称中,只需将其保留为-Description或{{1在上面的命令中 说明:文件说明。适当的位置是IPTC:Caption-Abstract,XMP:Description和EXIF:ImageDescription。您可以使用-Title'-Caption-Abstract<Description'-Description复制这些内容 标题:上传文件的名称。这可以复制到'-ImageDescription<Description'TitleObjectDescription :不确定,但我猜测如果文件中有人在Picasa等程序中加了标记,这就是名单列表,很可能来自PreservedFileName
网址:这是可以从中下载图片的网址。警告:这是一个公开共享的网址,即使图片标记为私有,也可以使用此网址下载 GeoInfoAltitude _ GeoInfoLatitude _ GeoInfoLongitude _ :如果上传的文件已进行地理标记,则这些文件将是图片的海拔高度,纬度和经度。最好将这些内容复制到RegionPersonDisplayNameGPSAltitudeGPSLatitudeGPSLatitudeRefGPSLongitude。由于GPS标签(无符号)的性质,西半球和/或南半球的图像必须也设置了Ref标签。

示例命令:
复制gps标签
GPSLongitudeRef

复制关键字
exiftool -tagsfromfile '%d/%F.json' '-GPSAltitude<GeoInfoAltitude_' '-GPSLatitude<GeoInfoLatitude_' '-GPSLatitudeRef<GeoInfoLatitude_' '-GPSLongitude<GeoInfoLongitude_' '-GPSLongitudeRef<GeoInfoLongitude_' FileOrDir

复制说明
exiftool -tagsfromfile '%d/%F.json' '-Keywords<Tags' '-Subject<Tags' FileOrDir

编辑(2018年1月):一如既往,谷歌将改变一切。上述 GeoInfo * 标记已根据以下评论弃用,已被 GeoDataAltitude GeoDataLatitude GeoDataLongitude 。

Exiftool可以读取Json文件,因此如果有其他更改,运行命令exiftool -tagsfromfile '%d/%F.json' '-Caption-Abstract<Description' '-ImageDescription<Description' -Description FileOrDir将列出所有可以复制的标记和可用数据。

答案 1 :(得分:1)

我的导出文件包含多个文件名错误的文件:(exiftool找不到这些文件)

  • IMG-20191102-WA0011(1).jpg
  • IMG-20191102-WA0011.jpg(1).json

json文件实际上应该是:

  • IMG-20191102-WA0011(1).jpg
  • IMG-20191102-WA0011(1).jpg.json

以下脚本生成正确的文件,然后调用exiftool:

https://github.com/jeroendoggen/scripts-tools-misc/blob/master/jsonmerge/json_merge.py

答案 2 :(得分:1)

正如Pieter所述,作为2020年12月的更新,有一个专用工具花了我大约5分钟的时间来建立:https://github.com/mattwilson1024/google-photos-exif

但是,这不能解决另一个答案(mysqldump -u root -p pass database table if(fromPos < toPos){ val movingElement = myList[fromPos] //shifts all elements between fromPos and toPos 1 down for(i in fromPos+1..toPos){ myList[i-1] = myList[i] } //re-add element that was saved in the beginning myList[toPos] = movingElement } if(fromPos > toPos){ val movingElement = myList[fromPos] //shifts elements between toPos and fromPos 1 up for(i in fromPos downTo toPos+1){ myList[i] = myList[i-1] } //re-add element that was saved in the beginning myList[toPos] = movingElement } 混淆)以及时区中提到的问题。更重要的是,这里没有答案会覆盖QuickTime和PNG专用标签。

我发现该软件https://metadatafixer.com/更简单。它要花钱,但是值得。

答案 3 :(得分:1)

我在这里分享我最终使用的东西

https://gist.github.com/tetebueno/5800504133709c9844bcd1779019d390

此代码无法解决的唯一情况是文件名称很长(超过 46 个字符 (?))并且具有自动照片后缀之一(-edited 等),因为这最终会得到类似的结果:

very_large_file_name_..._foo-edited.jpg -> very_large_file_name_..._foo-edi.json