Tengo un conjunto de archivos mp3 en un subdirectorio ( mayor
), y quiero convertir cada uno usando ffmpeg (como este ffmpeg -i <input_file> -ar 44100 -ab 128k -f mp3 <output_file>
:), con el archivo de resultados almacenado en una carpeta hermana mayor_out
en un patrón secuencial. Intenté con algunas FOR
preguntas de la pila, pero nadie explicó cómo hacerlo en una iteración de archivo/directorio, así que hago una nueva pregunta.
Respuesta1
Bueno, logré hacer esto usando este script .bat (inspirado enesta respuesta)
@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
Respuesta2
El siguiente Powershell debería ejecutar los comandos que necesita y ajustar las rutas según sea necesario:
Cree un archivo en el directorio "principal" (por ejemplo, C:\parent\) llamado "ProcessMp3.ps1" y agréguele el siguiente código.
ForEach($i in Get-ChildItem -filter "*.mp3" -Path "C:\parent" ){ ffmpeg -i $i -ar 44100 -ab 128k -f mp3 ".\sibling\$i" }
Cree un directorio llamado "hermano" en el directorio principal, por ejemplo, "C:\parent\sibling\".
En un símbolo del sistema, ejecute:
Powershell ./ProcessMp3.ps1
Si secuencial solo significa agregar 1,2,3, etc. como prefijo al nombre del archivo, entonces el script podría verse así:
$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++
}