如何将 JPEG 文件批量重命名为图像日期,并添加每天重置的计数?

如何将 JPEG 文件批量重命名为图像日期,并添加每天重置的计数?

我正在使用pyrenamer这个功能来处理我的照片集,除了一个问题之外,它运行良好。我希望它根据照片拍摄日期元数据重命名照片,并在末尾添加一个三位数。我的图库中的每个文件夹代表一天,我希望照片以 001-999 之间的数字结尾,每个文件夹都以 001 开头。示例文件名为 2016-01-31-001.jpg。

Shotwell 使用选项中的结构来处理导入时创建目录结构%Y/%m/%d,但是当我在 ~/Pictures 目录中递归使用 pyrenamer 时,我没有看到预期的结果。它按日期重命名,但继续在文件夹中递增,而不是从每个新文件夹的 001 开始。有没有更简单的方法可以做到这一点?

我知道我可以添加更多元数据变量并根据小时、分钟和秒重命名,但这会给出比我想要的更长的文件名。我的相机每秒也可以拍摄多张照片,因此重命名会很麻烦。

请问最简单的方法是什么?我喜欢使用 pyrenamer,但 bash 脚本也可以。

电流输出:

Pictures/
├── Folder 1/
│   ├── YY-MM-DD-001.jpg
│   └── YY-MM-DD-002.jpg
├── Folder 2/
│   ├── YY-MM-DD-003.jpg
│   └── YY-MM-DD-004.jpg
...

期望输出:

Pictures/
├── Folder 1/
│   ├── YY-MM-DD-001.jpg
│   └── YY-MM-DD-002.jpg
├── Folder 2/
│   ├── YY-MM-DD-001.jpg
│   └── YY-MM-DD-002.jpg
...

答案1

要将整个 JPEG 照片库重命名为YYYY-MM-DD-XXX.jpg格式,每天计数并从 -001 开始,使用此命令exiftool

exiftool -fileOrder DateTimeOriginal -recurse -extension jpg -extension jpeg -ignoreMinorErrors '-FileName<CreateDate' -d %Y-%m-%d%%-.3nc.%%e ~/Pictures/

为了完整解释该命令,下面介绍其工作原理。

  1. exiftool启动脚本。
  2. -fileOrder DateTimeOriginal强制 exiftool 处理和被采取的顺序相同. 这对于保留一天内按原始时间顺序排列的图像编号至关重要。
  3. -recurse递归处理子目录,如果您使用 Shotwell 导入,这将很有帮助,因为照片是放在按日期组织的目录中。
  4. -extension jpg -extension jpeg将确保仅处理 JPEG 文件。(请注意,这些文件不区分大小写,并且 jpg=JPG,因此我们会捕获所有内容)
  5. -ignoreMinorErrors忽略任何不影响我们期望结果的错误(通常是读取此操作不必要的无关标签的问题)。
  6. '-FileName<CreateDate'将照片创建日期放入文件名中。
  7. -d %Y-%m-%d%%-.3nc.%%e此处-d设置所需的输出日期格式。我们将使用带连字符的四位数年份,然后是两位数月份和日期 ( %Y-%m-%d),然后是 001 开头的三位数数字 ( %%-.3nc),并保留原始文件扩展名 ( .%%e)。
  8. ~/Pictures/exiftool是最后一项,它只是应该用命令处理的目录。

关于错误的说明,-ignoreMinorErrors有帮助,但您仍然可能会看到消息“警告:PreviewIFD 目录错误”可以安全忽略或者“警告:/path/to/problem/image.jpg 中未设置可写标签”。第二个我无法解决,但我只在几张图片中看到了它,所以我手动在 Nautilus 中重命名它们作为解决方法。

此命令仍有改进空间,但它已在一个大型(40GB,13000 张图像)照片库上测试并运行,速度很快且不会产生错误,只是无法重命名偶尔缺少大多数现代相机都会创建的标签的图像。

相关内容