【问题标题】:Increment Serial Number using EXIF使用 EXIF 增加序列号
【发布时间】:2015-06-15 18:44:39
【问题描述】:

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

序列号采用###-###-####-#### 格式,其中最后四位数字是要递增的数字。对于我运行的每个批次,前三组数字都不会改变。我只需要增加最后一组数字。

示例 如果我在第一批中有 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 序列号标签,但尚未成功添加到此标签以使其为每个图像递增。

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

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

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

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

只是想看看我是否可以让它增加一个基本的单位数。这也没有奏效。

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

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

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

感谢您的帮助和指导!

【问题讨论】:

    标签: windows powershell command-line exif exiftool


    【解决方案1】:

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

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

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

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

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

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

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

    【讨论】:

    • 我从命令行运行它,但序列号没有任何反应。它保持不变。下面是我运行的确切命令。 ExifTool.exe 与 16 个测试图像一样位于 TIFF 目录中。运行后,它显示“已扫描 1 个目录”和“已更新 16 个图像文件”。 exiftool "-SerialNumber
    • 嗯,奇怪。我在一些 tiffs 上尝试过,效果很好。你用什么来读取序列号?尝试在其中一个文件上使用ExifTool -a -G1 -serialnumber 并查看是否有多个序列号标签。我看到的一个可能的问题是某些 MakerNotes 序列号标签,例如 Canon,必须是数字,而不是字符串,并且不会因此而改变。但是 Exif 和 XMP 中的 SerialNumber 标签(没有 IPTC SerialNumber 标签)以及 Nikon 和 Leica MakerNotes 应该正确更改。
    • 在运行您提供的命令后,我很尴尬地说我正在查看主文件。当我把头拉出来并实际查看测试文件夹时,序列号确实已正确填充和递增。你很摇滚,很抱歉浪费你的时间! :-)
    • Exiftool 在标签名称上不区分大小写。对于 IPTC 的困惑,我们深表歉意。 IPTCcore 在技术上是 XMP,我说的是传统的 IPTC。我没有 Bridge,但是当我使用 Lightroom 4.4 检查时,作业标识符会转换为 TransmissionReference 标签。
    • tl;dr:只需将 $_+1 更改为 $_+NewStartingNumber。 sprintf 只是用前导零填充数字并且不进行任何递增。关键是 FileSequence 标签。这是 ExifTool 内部的一个标签,用于跟踪它在运行中处理的文件数量。它从零开始,并且由于高级格式的性质(基本上运行一些 perl 命令),$_ 变量分配了这个数字。由于您想从 1 开始,我只是将 1 添加到变量中。要从其他号码开始,只需将该号码添加到 $_
    【解决方案2】:

    如果我正确理解你的问题,这样的事情应该可以工作:

    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++
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-15
      • 1970-01-01
      • 1970-01-01
      • 2019-09-20
      • 2011-12-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多