如何迭代特定模式的文件名以在FFMPEG和PowerShell上使用它
我对PowerShell相当缺乏经验,我在某些需要完全控制所需转换的场合使用它。 所以,我面临一个问题,我收集了20个视频。从1300到1319,所有文件都共享相同的数字模式,我想使用以下命令将整个“MOV”文件集合转换为“MP4”文件:如何迭代特定模式的文件名以在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
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')
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')
}