如何迭代特定模式的文件名以在FFMPEG和PowerShell上使用它

如何迭代特定模式的文件名以在FFMPEG和PowerShell上使用它,powershell,video,ffmpeg,iteration,Powershell,Video,Ffmpeg,Iteration,我对PowerShell相当缺乏经验,我在某些需要完全控制所需转换的场合使用它。 所以,我面临一个问题,我收集了20个视频。从1300到1319,所有文件都共享相同的数字模式,我想使用以下命令将整个“MOV”文件集合转换为“MP4”文件: ffmpeg-i my-video-1300.mov-vcodec h264-acodec mp2 my-video-1300.mp4 有没有一种方法可以使用正则表达式、通配符或任何给定的名称来简单地创建单行转换命令。 我对它“应该是什么样子”的看法是: ff

我对PowerShell相当缺乏经验,我在某些需要完全控制所需转换的场合使用它。 所以,我面临一个问题,我收集了20个视频。从1300到1319,所有文件都共享相同的数字模式,我想使用以下命令将整个“MOV”文件集合转换为“MP4”文件:
ffmpeg-i my-video-1300.mov-vcodec h264-acodec mp2 my-video-1300.mp4

有没有一种方法可以使用正则表达式、通配符或任何给定的名称来简单地创建单行转换命令。
我对它“应该是什么样子”的看法是:
ffmpeg-i my-video-13[00-19].mov-vcodec h264-acodec mp2 my-video-13[00-19].mp4

当然,最后一行行不通,但我想学习正确的方法。
谢谢

  • Get ChildItem-过滤我的视频-*.mov
    使用简单的通配符模式高效地预过滤候选文件

  • 然后,
    Where Object
    脚本块通过(正则表达式)和从基本文件名中提取数字,并检查数字是否在感兴趣的范围内

    • 从脚本块(隐式地从布尔范围检查表达式,
      $number-ge…
      )输出
      $true
      )会导致包含手头的文件并沿管道传递
    • 请注意,不生成输出会根据以下情况隐式解释为
      $false
  • 然后只对感兴趣的文件执行
    ForEach对象
    脚本块

    • ($\.FullName-replace'\.mov$,'.mp4')
      使用正则表达式和

很高兴听到这有帮助,@FranciscoLaferrière。是的,通配符模式甚至正则表达式本身对于您的用例来说都不够强大。
Get-ChildItem -Filter my-video-*.mov |
Where-Object {
  if ($_.BaseName -match '-(\d+)$') {     
    $number = [int] $Matches[1]
    $number -ge 1300 -and $number -le 1319    
  }
} | 
ForEach-Object { 
  ffmpeg -i $_.FullName -vcodec h264 -acodec mp2 ($_.FullName -replace '\.mov$', '.mp4')
}