使用 exiftool 重命名:如何处理丢失的标签?

ger*_*los 7 video script bash exif rename

我正在处理一大群无组织的媒体文件,这些文件是使用几种不同的相机和摄像机捕获的,我想在 bash 脚本中使用 exiftool 来重命名每个文件及其创建日期和时间、制造商和型号。

使用此命令,图像将根据需要重命名:

exiftool -m -P '-filename<${DateTimeOriginal}_${Make}_${Model}.%e' myfile.jpg
Run Code Online (Sandbox Code Playgroud)

我已经知道我可以使用 -d FMT 选项格式化日期和时间,但为了清楚起见我省略了它。

这是我在使用 DSLR“*.mov”视频时面临的问题:

  1. exiftool 正在删除 .mov 扩展名,即使它在文件名模型中使用“.mov”而不是“.%e”
  2. 这些文件没有 DateTimeOriginal 标签,我必须使用其他文件没有的 MediaCreateDate 标签

有谁知道如何“强制”exiftool 使用原始的 .mov 扩展名?

有没有办法告诉 exiftool 检查 exif 标签是否存在?如果第一个标签不存在,则使用另一个标签?

我试过类似的东西

if [ -n `exiftool -m -p '$DateTime' filename]
then
...
Run Code Online (Sandbox Code Playgroud)

但是 exiftool 给我一个错误,所以空字符串检查总是失败。任何提示?

ger*_*los 7

感谢 exiftool 的开发者 Phil Harvey 的反馈,他为我的问题找到了一个非常简单的解决方案,它适用于 exiftool 9.30。

菲尔在这里说(http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,5079.msg24483.html#msg24483):

最后一个有效分配取代其他分配。

因此,我们只需一个命令即可完成所有操作。这是最终的代码:

#!/bin/bash
exiftool -P -d '%Y-%m-%d %H.%M.%S' \
    '-filename<${CreateDate}_${Model;}.%e' \
    '-filename<${DateTimeOriginal}_${Make;}.%e' \
    '-filename<${DateTimeOriginal}_${Make;}_${Model;}.%e' \
    $@
Run Code Online (Sandbox Code Playgroud)

分号是解决上述缺失扩展问题的一种方法(实际上,这是因为我的模型标签中的尾随空值)。

这种方法的一个好处是我们没有使用该-m选项,因此我们不会弄乱例如没有 exif 标签的 *.mov 文件,就像可以从网上下载的大多数视频一样(他们只是被忽略)。