Как выполнить ffmpeg с помощью Batch For Loop - PullRequest
0 голосов
/ 20 февраля 2020
FOR %%A IN (%*) DO ffmpeg -y -i %%A -c:v prores_ks -profile:v 3 -c:a pcm_s16le "%%~dpA%%~nA.mov"

Этот пакетный файл предназначен для взятия нескольких файлов, которые перетаскиваются на него, и транскодирует их с помощью ffmpeg. В результате выполнения команды получается целая куча распечаток, которые похожи на команду, но не выполняются. Я также пытался использовать start cmd.exe / c, но это приводит к открытию многочисленных windows, что требует перезагрузки компьютера.

Редактировать: squashman дал понять, что это решение не будет работать в любом случае (Спасибо!). Тем не менее, я отредактировал скрипт так, чтобы он действовал только для одного файла одновременно, и он все еще не выполняется должным образом и вызывает циклическую распечатку.

ffmpeg -y -i %%1 -c:v prores_ks -profile:v 3 -c:a pcm_s16le "%%~dp1%%~n1.mov"

Как я могу изменить этот скрипт для правильного выполнения ffmpeg?

Редактировать 2: Решено путем перетаскивания папки в пакетный скрипт.

cd /d %1
md output
FOR /F %%A IN ('dir /B %1') do ffmpeg -y -i %%A -c:v prores_ks -profile:v 3 -c:a pcm_s16le "output/%%~nA.mov"
pause

1 Ответ

1 голос
/ 20 февраля 2020

Ожидается, что все файлы .mov находятся в текущем каталоге. если нет, добавьте путь к "* .mov" и "%% ~ A.mov".

FOR /F "tokens=1,2 delims=." %%A IN ('dir /B *.mov') do ffmpeg -y -i %%A -c:v prores_ks -profile:v 3 -c:a pcm_s16le "%%~A.mov"

другим способом является использование PPX http://www.pirosa.co.uk/demo/wxargs/wxargs.html и ускорение всего процесса за счет использования всех ядер процессора

dir /b *.%required_file_extension% |ppx2 -P 4 -L 1 ffmpeg -y -i %%A -c:v prores_ks -profile:v 3 -c:a pcm_s16le "{}.mov"
...