У меня есть набор файлов mp3 в подкаталоге ( mayor
), и я хочу преобразовать каждый из них с помощью ffmpeg (вроде этого: ffmpeg -i <input_file> -ar 44100 -ab 128k -f mp3 <output_file>
), с сохранением файла результата в папке-брате mayor_out
в последовательном шаблоне. Я пробовал с некоторыми вопросами стека FOR
, но никто не объяснил, как сделать это в итерации файла/каталога, поэтому я задаю новый вопрос.
решение1
Ну, мне удалось сделать это с помощью этого .bat-скрипта (вдохновленногоэтот ответ)
@echo off
cd /D mayor
set _num=1
FOR /R %%X IN (*.mp3) DO call :body %%X
goto :eof
:body
ffmpeg -i %1 -ar 44100 -ab 128k -f mp3 ../mayor_out/YAL_m%_num%.mp3
set /a "_num=_num+1"
goto :eof
pause
решение2
Следующая оболочка Powershell должна выполнить необходимые вам команды, при необходимости измените пути:
Создайте файл в «родительском» каталоге (например, C:\parent\) с именем «ProcessMp3.ps1» и добавьте в него приведенный ниже код.
ForEach($i in Get-ChildItem -filter "*.mp3" -Path "C:\parent" ){ ffmpeg -i $i -ar 44100 -ab 128k -f mp3 ".\sibling\$i" }
Создайте каталог с именем «sibling» в родительском каталоге, например «C:\parent\sibling\".
В командной строке выполните:
Powershell ./ProcessMp3.ps1
Если последовательный означает просто добавление 1,2,3 и т.д. в качестве префикса к имени файла, то скрипт может выглядеть следующим образом:
$c=1
ForEach($i in Get-ChildItem -filter "*.mp3" -Path "C:\parent" ){
ffmpeg -i $i -ar 44100 -ab 128k -f mp3 ".\sib\$c-$i"
$c++
}