使用 EXIF 增加序列号

Increment Serial Number using EXIF

我正在使用 ExifTool 将相机机身序列号更改为一组数百张图像中每张图像的唯一序列号。除了图像的序列号在 IPTC 中的位置之外,相机机身序列号被用作第二个位置,因为它需要更多的努力才能删除。

序列号的格式为###-###-####-####,其中最后四位数字是要递增的数字。 I运行每批次前三组数字不变。我只需要增加最后一组数字。

示例 如果我的第一批有 100 张图像,它们将被编号:

811-010-5469-0001、811-010-5469-0002、811-010-5469-0003 ... 811-010-5469-0100

我可以成功地将一组图像拖到我的 ExifTool 快捷方式上,其值为

exiftool(-SerialNumber='001-001-0001-0001') 

它会更改图像上的 Exif SerialNumber 标签,但未能成功添加到此标签以使其针对每张图像递增。

我尝试了以下变体但没有成功:

exiftool(-SerialNumber+=001-001-0001-0001)
exiftool(-SerialNumber+='001-001-0001-0001')

我意识到 ExifTool 很可能将这些视为在第一行中减去的数字,并将第二行视为字符串。我也试过:

exiftool(-SerialNumber+='1')
exiftool(-SerialNumber+=1)

只是想看看我是否可以用一个基本的个位数来增加它。这也没有用。

也许这不能以这种方式递增,我需要从命令行使用 ExifTool。如果是这样,我正在学习命令 line/powershell (Windows),但在这方面仍然很薄弱,如果这是我需要采取的路线,我将不胜感激。我不害怕使用命令行,只是需要比正常情况下更多的手来作为起点。我也在学习 Linux 并且可以从那里做这个项目,但同样,不害怕使用它,只是需要更多的手来完成它。

我用 PHP、JavaScript 和其他语言编写程序,所以代码对我来说并不陌生。只是体验为命令行编写它。

如果需要进一步说明,请在评论中告诉我。

感谢您的帮助和指导!

如果我正确理解你的问题,那么这样的事情应该有效:

1..100 | % {
  $sn = '811-010-5469-{0:D4}' -f $_

  # apply $sn
}

或者像这样(如果你遍历文件):

$i = 1
Get-ChildItem 'C:\some\folder' -File | % {
  $sn = '811-010-5469-{0:D4}' -f $i

  # update EXIF data of current file with $sn

  $i++
}

您可能必须转到命令行而不是依赖拖放,因为此命令依赖于 ExifTool 的高级格式设置。

Exiftool "-SerialNumber<001-001-0001-${filesequence;$_=sprintf('%04d', $_+1 )}" <FILE/DIR>

如果你想更通用并使用文件中的原始序列号,你可以使用

Exiftool "-SerialNumber<${SerialNumber}-${filesequence;$_=sprintf('%04d', $_+1 )}" <FILE/DIR>

这只会将文件计数添加到图像中当前序列号的末尾,但如果同一目录中有来自多个相机的图像,则可能会变得混乱。

至于使用命令行,您只需重命名以删除括号中的命令,然后将其移动到命令行路径中的某个位置或使用 ExifTool 的完整路径。

关于您之前尝试的说明,+= 选项与数字和列表一起使用。 SerialNumber 标记通常是一个字符串,但这可能取决于它被写入的位置。