1

Я пытаюсь выяснить, какая команда PowerShell [или сценарий, если необходимо] может позволить ffmpeg рекурсивно проходить по каталогу, извлекать кадры с помощью флага -vf и помещать все кадры в папку без каких-либо конфликтов имен файлов, которые могут вызвать перезапись.

Итак, я знаю, что это прекрасно работает для отдельного файла:

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

Сгенерированные файлы начинаются с still0001.jpg и считаются до still0002.jpg , still0003.jpg и т.д.

У меня есть каталог, который выглядит так, с видеофайлами на разных уровнях:

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

Я пытаюсь использовать команду PowerShell, которая может извлекать кадры из всех видео video1.mov , video2.mov , video3.mov и video4.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 ответ1

1

Вот пример команды powershell для преобразования всех файлов в каталоге в mp4 и изменения размера до 1280x720:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .