Eu tenho um conjunto de arquivos mp3 em um subdiretório ( mayor
) e quero converter cada um deles usando ffmpeg (como este ffmpeg -i <input_file> -ar 44100 -ab 128k -f mp3 <output_file>
:), com o arquivo de resultado armazenado em uma pasta irmã mayor_out
em um padrão sequencial. Tentei com algumas FOR
perguntas da pilha, mas ninguém explicou como fazer isso em uma iteração de arquivo/diretório, então faço uma nova pergunta.
Responder1
Bem, consegui fazer isso usando este script .bat (inspirado emesta resposta)
@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
Responder2
O Powershell a seguir deve executar os comandos necessários, ajustar os caminhos conforme necessário:
Crie um arquivo no diretório "pai" (por exemplo, C:\parent\) chamado "ProcessMp3.ps1" e adicione o código abaixo a ele.
ForEach($i in Get-ChildItem -filter "*.mp3" -Path "C:\parent" ){ ffmpeg -i $i -ar 44100 -ab 128k -f mp3 ".\sibling\$i" }
Crie um diretório chamado "irmão" no diretório pai, por exemplo, "C:\parent\sibling\".
Em um prompt de comando, execute:
Powershell ./ProcessMp3.ps1
Se sequencial significa apenas adicionar 1,2,3, etc. como prefixo ao nome do arquivo, o script pode ter a seguinte aparência:
$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++
}