3

У меня огромное количество видеофайлов в формате mp4, для увеличения громкости. Мне нужен способ выполнить аудиофильтр ffmpeg для всех файлов в указанном базовом каталоге (и в подкаталогах также). Моя проблема в том, что я работаю на компьютере с Windows и не знаю синтаксиса оболочки.

Я хотел бы сделать эквивалент того, что делает этот скрипт bash:

TARGET_FILES=$(find /path/to/dir -type f -name *.mp4)
for f in $TARGET_FILES
do
  ffmpeg -i $f -af 'volume=4.0' output.$f
done

Сегодня я потратил довольно много времени на поиски решения, но рекурсивный характер того, что мне нужно (это так просто с find!) не слишком понятно

Любая помощь будет принята с благодарностью!

2 ответа2

2

Короче говоря, ваш скрипт преобразуется в однострочную строку командной строки:

for /r "C:\path\to\file" %f in (*.mp4) do ffmpeg -i %f -af 'volume=4.0' output.%f

Объяснено:for циклов команд над всеми файлами, которые соответствуют определенным критериям и выполняют команду после do . /r означает рекурсивный (то есть поиск в подпапках); %f - произвольная переменная, аналогичная $f в вашем скрипте. Другие части должны быть понятны.

1

Переполнение стека имеет аналогичный сценарий PowerShell для использования ffmpeg и рекурсивного просмотра папок, но предназначен для изменения типа файла.

Кто-то исправит меня, если я ошибаюсь (я не знаю ffmpeg), но взятие этой статьи и вашей команды выдает что-то подобное в PowerShell:

$oldvids = Get-ChildItem *.mp4 -Recurse
foreach ($oldvid in $oldvids) {
     .\ffmpeg.exe -i $oldvid.FullName -af 'volume=4.0' $oldvid
}

Вам необходимо установить PowerShell в вашей системе, встроенной в Windows 8, но доступной для загрузки для предыдущих версий Windows в составе Windows Management Framework

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