如何合并 JSON 和 Google 外卖照片以获得正确的日期?

How to merge JSON and Google Takeout Photos to get the right dates back?

我刚刚从 Google 外卖中取出了数千张照片,但我似乎无法按正确的时间顺序将它们导入其他地方。我还找到了一些使用 exiftool 的教程,但我无法正确获取不同的时区?知道如何使用正确的时区检索时间吗?时区也不在 JSON 中。

现在有许多可用的脚本和工具可以从 JSON 文件中提取元数据并将其应用于照片和视频:

但是,这些脚本在时区方面有限制,而且某些图片的名称与 JSON 文件的名称略有不同,例如PHOTO_NAME(1).jpgPHOTO_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")"