使用 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 标记通常是一个字符串,但这可能取决于它被写入的位置。
我正在使用 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 标记通常是一个字符串,但这可能取决于它被写入的位置。