EXIFTOOL - 从文件名设置日期时间

问题描述 投票:0回答:3

我有很多以日期格式命名的照片,但 EXIF 日期不匹配。

例如

2016-12-16_20-20-29.jpg

运行它们

EXIFTOOL
我几乎可以覆盖日期,但它与确切的日期格式不匹配。

exiftool "-datetimeoriginal<filename" ./

这会将日期设置为正确的日历日,但忽略时间。

exiftool "-datetimeoriginal<filename" -d "%Y-%M-%D_%H-%M-%S.%%e" ./

我相信

-d
参数设置了数据格式,但这会返回
Warning: Error parsing time in ExifIFD:DateTimeOriginal (PrintConvInv)

的错误

这是正确的使用方法吗?

exif exiftool
3个回答
12
投票

您的第一个命令应该可以正常工作。 来自Exiftool常见问题解答5

ExifTool 在写入时对于输入日期/时间值的实际格式非常灵活,并且除非使用 -n 选项,否则将尝试将任何值重新格式化为标准格式。可以使用任何分隔符(或者事实上根本不使用)。值中找到的前 4 个连续数字被解释为年份,然后接下来的 2 位数字是月份,依此类推。 [年份必须是 4 位数字。其他字段预计为 2 位数字,但如果后续字符为非数字,则允许使用单个数字。] "

该段落后面给出的示例与您的第一个命令几乎相同。

此类操作不需要

-d
选项。

输出示例

C:\>exiftool -datetimeoriginal "X:\!temp\2016-12-16_20-20-29.jpg"

C:\>exiftool "-datetimeoriginal<filename" "X:\!temp\2016-12-16_20-20-29.jpg"
    1 image files updated

C:\>exiftool -datetimeoriginal "X:\!temp\2016-12-16_20-20-29.jpg"
Date/Time Original              : 2016:12:16 20:20:29

10
投票

跟进 StarGeek 的好答案。

事实证明我损坏了我的 exif 数据,这就是命令失败的原因。

为了解决这个问题,我首先清除了数据

exiftool -all= −overwrite_original ./

然后我可以再次运行该命令来设置文件名中的日期。额外的好处是我发现了属性

-alldates
,它更新了元数据中的每个日期(不包括文件写入/修改日期)。

exiftool "-alldates<filename" −overwrite_original ./

.n.b

−overwrite_original
防止创建备份文件


1
投票

设置为 Exif 元或文件名中最旧的日期

第 0 步 - 从下面安装 exiftool

安装ExifTool

👉步骤0.1

oldest_datetime_config 保存在主文件夹

C:\Users\YOURUSERNAME
或主目录
~
或安装 exiftool 的同一文件夹中。这一步对于后续步骤的成功很重要。

您可以在此处的脚本中找到这些内容,但我发现运行我在下面的选项中提到的 pic 文件夹中的命令比通过 python 脚本 exif-scripts/setToOldestDate.py 运行这些命令要快得多。为了更快地处理,您可以运行这些命令直接在您计划的 pic 文件夹中的 powershell 中。

如果您正在运行 WSL,则从 poweshell 运行这些命令,而不是 WSL,因为 Windows 虚拟化的文件系统读写会耗尽您的 ram 并减慢进程直至停止。

🦺 请注意,这些脚本是递归的,并且会影响所有子文件夹。

好吧……现在——选择你的选项:

选项 1 - 如果您需要从文件名中选择日期。

这是来自 exiftool 的非常灵活和模糊的解析器,但如果您希望它绝对确定,那么您可以重新管理文件以包含 yyyymmdd_hhmmss 并删除其之前的所有其他数字(之后就可以了)。

exiftool "-FileModifyDate<filename" −overwrite_original -S -m -progress -ee -q -q ./

选项 2 - 将所有日期设置为最早的日期

exiftool -overwrite_original "-FileModifyDate<OldestDateTime" "-ModifyDate<OldestDateTime" "-DateTimeOriginal<OldestDateTime" "-CreateDate<OldestDateTime" "-GPSDateTime<OldestDateTime" -S -m -progress -ee -q -q ./

选项 3 - 在 PXL_yyyymmdd_hhmmss-[number-if-conflict].extension 中设置文件名

exiftool "-filename<OldestDateTime" -d PXL_%Y%m%d_%H%M%S%%-c.%%e -S -m -ee -progress -q -q ./

推送当前目录中的所有文件使用

adb push -a . /sdcard/DCIM/Camera/

-a 是保留属性。

⌛ 刷新 Android 媒体商店

最后一步,您需要刷新 Android 媒体存储数据库,让 Google 照片知道要备份哪些新文件。目前它并不总是自动检测,所以为什么要等待呢。安装Refresh MediaStore并在手机上的adb推送完成后运行它。然后您可以打开 Google Photos 并看到备份正在开始。

© www.soinside.com 2019 - 2024. All rights reserved.