ffmpeg 的 PowerShell 命令用于递归处理文件夹中的项目

ffmpeg 的 PowerShell 命令用于递归处理文件夹中的项目

我试图弄清楚哪个 PowerShell 命令 [或必要时的脚本] 可能允许ffmpeg递归遍历目录、通过-vf标志提取静止图像并将所有静止图像放入文件夹中,而不会导致任何会导致覆盖的文件名冲突。

所以我知道这对于单个文件来说很好用:

ffmpeg -i input.mov -vf fps=10/60 still%04d.jpg

生成的文件从 开始,still0001.jpg一直到、 等。still0002.jpgstill0003.jpg

我有一个如下所示的目录,其中包含不同级别的视频文件:

  • topFolder1
    • midFolder1
      • video1.mov
      • video2.mov
    • midFolder2
      • video3.mov
      • video4.mov

video1.mov我正在尝试使用 PowerShell 命令从所有视频、、和video2.mov中提取静止图像并将它们放入一个文件夹中。video3.movvideo4.mov

我发现一个 PowerShell 命令,旨在让 ffmpeg 递归遍历目录,但是当我尝试调整它时,它不起作用。

我跑:

PS T:\Exports\1 - Dailies\stills test> for /F "tokens=*" "%G" IN ('dir "T:\Exports\1 - Dailies" *.mov') do ffmpeg -i "%G" -vf fps=10/60 still%05d.jpg

但是我收到此错误:

At line:1 char:4
+ for /F "tokens=*" "%G" IN ('dir "T:\Exports\1 - Dailies" *.mov') do f...
+    ~
Missing opening '(' after keyword 'for'.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : MissingOpenParenthesisAfterKeyword

我哪里做错了?

答案1

下面是将目录中的所有文件转换为 mp4 并调整大小为 1280x720 的 powershell 命令示例:

dir *.* | foreach-object { $newname = $_.Name.Remove($_.Name.Length - $_.Extension.Length) + ".mp4"; .\ffmpeg.exe -i "$_" -s 1280x720 $newname }

相关内容