繁体   English   中英

exiftool——通过添加/减去另一个标签来编写一个标签

[英]exiftool—writing one tag by adding/subtracting from another

我有一个包含许多.jpg 和.mov 文件的目录。

Every.jpg 的 DateTimeOriginal 比FileModifyDate多三个小时,而 GPSDateTime 比FileModifyDate多八小时。

但是 every.mov 既没有 DateTimeOriginal 也没有 GPSDateTime。

为了支持将来使用这些文件,我想让它们保持一致。 在研究了一段时间的手册页之后,我尝试了

exiftool '-DateTimeOriginal<FileModifyDate+03:00' \
         '-GPSDateTime<FileModifyDate+08:00'        *.MOV

但我收到一条错误消息,说我必须使用 = 而不是 < 所以我尝试了

exiftool '-DateTimeOriginal=FileModifyDate+03:00' \
         '-GPSDateTime=FileModifyDate+08:00'        *.MOV

并收到另一条消息:

Warning: Invalid date/time (use YYYY:mm:dd HH:MM:SS[.ss][+/-HH:MM|Z]) in ExifIFD:DateTimeOriginal (PrintConvInv)

这意味着我必须用文字时间来处理每个标签,而不是从另一个标签开始计算。

我看到我可以将一个标签复制到另一个标签,然后使用 += 或 -= 在另一步骤中更改它。 但是有没有办法在一个命令中完成呢?

首先是答案,但请参阅下文了解一些可能的并发症。

如果两个值的时移相同,那么您将使用GlobalTimeShift选项,但由于情况并非如此,您需要使用ShiftTime助手 function

此外,MOV 文件中的GPSDateTime标签将是一个 XMP 标签(特别是在XMP-exif组中),它允许包含时区并且不需要设置为 UTC。 由于FileModifyDate已经包含一个时区,而且您似乎想将其转换为 UTC,因此您必须去掉时区。 您可以使用-d ( -dateFormat ) 选项(它将全局设置日期格式)或DateFmt帮助程序 function来执行此操作,该选项将对单个标签起作用。 Perl 正则表达式替换也是一个选项,但对于此示例,我将使用DateFmt选项。

你的命令是

exiftool '-DateTimeOriginal<${FileModifyDate;ShiftTime("3")}' '-GPSDateTime<${FileModifyDate;ShiftTime("8");DateFmt("%Y:%m:%d %H:%M:%S")}' *.MOV

对于ShiftTime function,您只需列出要轮班的小时数,因为这是包含日期和时间的标签中的默认值。 有关详细信息,请参阅ExifTool 日期/时间偏移模块

现在,您编写此数据的方式存在一些问题。 在 MOV 文件中,exiftool 将在DateTimeOriginal标签中包含一个时区,除非强制不这样做。 如果不包括时区,则 exiftool 将默认为计算机的本地时区。 因此,如果本地时区不是适用于您的偏移DateTimeOriginal时间的时区,那么您将需要包括它。 您现在还必须像上面那样去掉时区。 上述命令的变化是

'-DateTimeOriginal<${FileModifyDate;ShiftTime("3");DateFmt("%Y:%m:%d %H:%M:%S")}}±##:00'

此外,如果从两个标签复制操作中删除时区,您可以切换到使用-d选项。

exiftool -d '%Y:%m:%d %H:%M:%S' '-DateTimeOriginal<${FileModifyDate;ShiftTime("3")}' '-GPSDateTime<${FileModifyDate;ShiftTime("8")}' *.MOV

虽然规范说视频文件中的DateTimeOriginal标签不需要包含时区,但如果不包含时区,Apple 程序将显示非常不准确的日期/时间(请参阅此 Exiftool 论坛主题)。

除了 Quicktime 标签之外,Exiftool 还将写入XMP-exif:DateTimeOriginal标签。

对于GPSDateTime ,如果文件的其他时间戳是准确的,可能有更好的写法。 在视频文件中, CreateDate应该设置为 UTC。 如果该标签设置正确,那么像这样设置GPSDateTime会更容易

'-GPSDateTime<CreateDate'

应该注意的是, Quicktime:DateTimeOriginal并不被大多数程序读取,Apple 照片应用程序是一个例外。 此外,视频文件中的 XMP 标签(在本例中XMP-exif:DateTimeOriginalXMP-exif:GPSDateTime )通常不会被大多数程序使用,Adobe 程序除外。 Quicktime:CreateDate是使用最广泛的标签,因为它应该使用 UTC,所以它也适用于 GPS 日期/时间。

为了分析为什么您的原始命令不起作用,在第一种情况下,您在标签名称中添加了一个 static 字符串。 这导致 exiftool 将整个事物视为一个字符串,这就是为什么它告诉您使用等号=而不是大于/小于符号< / > ,并且大于/小于符号仅在复制标签时使用。 当您将其更改为等号时,您现在正在编写一个 static 字符串,并且由于DateTimeOriginal标记需要日期/时间格式,您会收到Invalid date/time错误。

将标签名称与 static 字符串组合时,您需要在标签名称前加上美元符号。 有关详细信息,请参阅-TagsFromFile选项下以“强大的重定向功能”开头的段落。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM