如何合并 JSON 和 Google Takeout Photos 以获取正确的日期?

Eva*_*vaS 9 exiftool

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

Bat*_*mos 8

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

但是,这些脚本在时区方面以及某些名称与 JSON 文件名称略有不同的图片方面存在限制,例如PHOTO_NAME(1).jpgPHOTO_NAME.jpg(1).json. QuickTime 和 PNG 特定的标签也不会更新。

如果您对这些限制感到满意,

  • 安装Exif工具
  • 替换要处理的目录并运行命令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/

  • 这太棒了!自动化工具完美地完成了这项工作,因为我无法使用 Exiftool 找出时区。谢谢! (2认同)

sza*_*mil 6

我为我的 QNAP NAS 设备做了类似的事情。使用简单的文本提取并使用 .json 中找到的最旧日期触摸文件。

编辑: 只需调整触摸拼写,使其符合您的时间格式。

find . -name '*.json' | while read filename; do

    imgfile="$(echo "${filename}" | sed 's/\.json$//')" ;
    ts="$(cat "${filename}" | grep timestamp | awk -F'"' '{ print $4}' | 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
Run Code Online (Sandbox Code Playgroud)

正如评论中所述,在某些 Linux 版本上,touch 需要 [[CC]YY]MMDDhhmm[.ss] 格式,因此将日期行替换为:

ts="$(date -d "@${ts}" +"%Y%m%d%H%M.%S")" 
Run Code Online (Sandbox Code Playgroud)