如何合并 JSON 和 Google 外卖照片以获得正确的日期?
How to merge JSON and Google Takeout Photos to get the right dates back?
我刚刚从 Google 外卖中取出了数千张照片,但我似乎无法按正确的时间顺序将它们导入其他地方。我还找到了一些使用 exiftool 的教程,但我无法正确获取不同的时区?知道如何使用正确的时区检索时间吗?时区也不在 JSON 中。
现在有许多可用的脚本和工具可以从 JSON 文件中提取元数据并将其应用于照片和视频:
- https://github.com/mattwilson1024/google-photos-exif
- ExifTool(有教程here)
但是,这些脚本在时区方面有限制,而且某些图片的名称与 JSON 文件的名称略有不同,例如PHOTO_NAME(1).jpg
与 PHOTO_NAME.jpg(1).json
混淆。
QuickTime 和 PNG 特定标签也未更新。
如果您对这些限制感到满意,
- 安装ExifTool
- 替换要处理的目录和运行命令
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 "*" -overwrite_original -progress --ext json <DirToProcess>
否则,请考虑使用付费自动化工具,例如 https://metadatafixer.com/
我为我的 QNAP NAS 设备做了类似的事情。使用简单的文本提取并触摸在 .json.
中找到的最旧日期的文件
编辑:
只需调整触摸法术使其与您的时间格式相匹配。
find . -name '*.json' | while read filename; do
imgfile="$(echo "${filename}" | sed 's/\.json$//')" ;
ts="$(cat "${filename}" | grep timestamp | awk -F'"' '{ print }' | sort | head -n 1)" ;
ts="$(date -d "@${ts}" +"%Y-%m-%d %T")" ;
if [ -f "${imgfile}" ];then
echo Touching ${imgfile} ${ts}
touch -t "${ts}" "${imgfile}"
fi
done
如评论中所述,在某些 Linux 版本上,触摸需要 [[CC]YY]MMDDhhmm[.ss] 格式,因此将日期行替换为:
ts="$(date -d "@${ts}" +"%Y%m%d%H%M.%S")"
我刚刚从 Google 外卖中取出了数千张照片,但我似乎无法按正确的时间顺序将它们导入其他地方。我还找到了一些使用 exiftool 的教程,但我无法正确获取不同的时区?知道如何使用正确的时区检索时间吗?时区也不在 JSON 中。
现在有许多可用的脚本和工具可以从 JSON 文件中提取元数据并将其应用于照片和视频:
- https://github.com/mattwilson1024/google-photos-exif
- ExifTool(有教程here)
但是,这些脚本在时区方面有限制,而且某些图片的名称与 JSON 文件的名称略有不同,例如PHOTO_NAME(1).jpg
与 PHOTO_NAME.jpg(1).json
混淆。
QuickTime 和 PNG 特定标签也未更新。
如果您对这些限制感到满意,
- 安装ExifTool
- 替换要处理的目录和运行命令
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 "*" -overwrite_original -progress --ext json <DirToProcess>
否则,请考虑使用付费自动化工具,例如 https://metadatafixer.com/
我为我的 QNAP NAS 设备做了类似的事情。使用简单的文本提取并触摸在 .json.
中找到的最旧日期的文件编辑: 只需调整触摸法术使其与您的时间格式相匹配。
find . -name '*.json' | while read filename; do
imgfile="$(echo "${filename}" | sed 's/\.json$//')" ;
ts="$(cat "${filename}" | grep timestamp | awk -F'"' '{ print }' | sort | head -n 1)" ;
ts="$(date -d "@${ts}" +"%Y-%m-%d %T")" ;
if [ -f "${imgfile}" ];then
echo Touching ${imgfile} ${ts}
touch -t "${ts}" "${imgfile}"
fi
done
如评论中所述,在某些 Linux 版本上,触摸需要 [[CC]YY]MMDDhhmm[.ss] 格式,因此将日期行替换为:
ts="$(date -d "@${ts}" +"%Y%m%d%H%M.%S")"