我希望留下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命令行中执行此操作。 有没有办法做到这一点?
答案 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'
,Title
或ObjectDescription
人:不确定,但我猜测如果文件中有人在Picasa等程序中加了标记,这就是名单列表,很可能来自PreservedFileName
。
网址:这是可以从中下载图片的网址。警告:这是一个公开共享的网址,即使图片标记为私有,也可以使用此网址下载
GeoInfoAltitude _ , GeoInfoLatitude _ 和 GeoInfoLongitude _ :如果上传的文件已进行地理标记,则这些文件将是图片的海拔高度,纬度和经度。最好将这些内容复制到RegionPersonDisplayName
,GPSAltitude
,GPSLatitude
,GPSLatitudeRef
和GPSLongitude
。由于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找不到这些文件)
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