我刚刚从 Google 外卖中获取了数千张照片,但我似乎无法按正确的时间顺序将它们导入到其他地方。我还找到了一些使用 exiftool 的教程,但我无法正确获取不同的时区?知道如何检索正确时区的时间吗?时区也不在 JSON 中。
现在有许多可用的脚本和工具可以从 JSON 文件中提取元数据并将其应用于照片和视频:
但是,这些脚本在时区方面以及某些名称与 JSON 文件名称略有不同的图片方面存在限制,例如PHOTO_NAME(1).jpg与PHOTO_NAME.jpg(1).json. QuickTime 和 PNG 特定的标签也不会更新。
如果您对这些限制感到满意,
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 $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)