16

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

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

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

4

4 回答 4

23

从 10.47 版开始,Exiftool 现在可以执行此操作。

在我的测试中,我看到 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 文件中遇到的一些更有用的标签以及我在哪里复制它们的建议。其中两个标签名称Description 和Title 与相关的XMP 标签相同,因此不需要重定向到图像标签名称中,可以简单地保留在上述命令中的-Description或中。描述:文件的描述。合适的位置是 IPTC:Caption-Abstract、XMP:Description 和 EXIF:ImageDescription。您可以使用、或复制这些内容。title : 上传文件的名称。这可以复制到或中。人们-Title
'-Caption-Abstract<Description'-Description'-ImageDescription<Description'
TitleObjectDescriptionPreservedFileName
: 不确定,但我猜如果该文件在 Picasa 等程序中标记了人员,这将是名称列表,很可能来自RegionPersonDisplayName.
url:这是可以从中下载图像的 URL。警告:这是一个公开共享的 URL,即使图像被标记为私有,仍然可以使用此 URL 下载。
GeoInfoAltitude_GeoInfoLatitude_GeoInfoLongitude_:如果上传的文件被地理标记,这些将是图像的高度、纬度和经度。这些最好复制到GPSAltitude, GPSLatitude, GPSLatitudeRef,GPSLongitudeGPSLongitudeRef. 由于 GPS 标签(未签名)的性质,位于西半球和/或南半球的图像必须还设置了 Ref 标签。

示例命令:
复制 gps 标签
exiftool -tagsfromfile '%d/%F.json' '-GPSAltitude<GeoDataAltitude' '-GPSLatitude<GeoDataLatitude' '-GPSLatitudeRef<GeoDataLatitude' '-GPSLongitude<GeoDataLongitude' '-GPSLongitudeRef<GeoDataLongitude' FileOrDir

复制关键字:
exiftool -tagsfromfile '%d/%F.json' '-Keywords<Tags' '-Subject<Tags' FileOrDir

复制说明:
exiftool -tagsfromfile '%d/%F.json' '-Caption-Abstract<Description' '-ImageDescription<Description' -Description FileOrDir

将 JSON 中的所有数据复制到文件中,修改原始文件(2020 年):

exiftool -r -d %s -tagsfromfile "%d/%F.json" "-GPSAltitude<GeoDataAltitude" "-GPSLatitude<GeoDataLatitude" "-GPSLatitudeRef<GeoDataLatitude" "-GPSLongitude<GeoDataLongitude" "-GPSLongitudeRef<GeoDataLongitude" "-Keywords<Tags" "-Subject<Tags" "-Caption-Abstract<Description" "-ImageDescription<Description" "-DateTimeOriginal<PhotoTakenTimeTimestamp" -ext jpg -overwrite_original FileOrDir

编辑(2018 年 1 月):与往常一样,谷歌将改变一切。根据下面的评论,上述GeoInfo*标签已被弃用,并已替换为GeoDataAltitudeGeoDataLatitudeGeoDataLongitude

编辑(2020 年 10 月):更新 2020 JSON 格式的命令

Exiftool 可以读取 Json 文件,因此如果有其他更改,运行该命令exiftool -s FILE.Json将列出所有可以复制的标签和可用数据。

于 2017-03-20T21:11:48.047 回答
4

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

但是,这并不能解决其他答案(PHOTO_NAME(1).jpg与 混淆PHOTO_NAME.jpg(1).json)以及时区中提到的问题。更重要的是,这里的答案都没有覆盖 QuickTime 和 PNG 特定的标签。

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

于 2020-12-09T03:15:47.163 回答
2

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

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

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

very_large_file_name_..._foo-edited.jpg -> very_large_file_name_..._foo-edi.json
于 2021-02-18T13:42:56.457 回答
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

于 2020-11-18T07:40:56.403 回答