Ich habe eine Reihe von MP3-Dateien in einem Unterverzeichnis ( mayor
) und möchte jede davon mit ffmpeg konvertieren (so: ffmpeg -i <input_file> -ar 44100 -ab 128k -f mp3 <output_file>
), wobei die Ergebnisdatei in einem Schwesterordner mayor_out
in einem sequenziellen Muster gespeichert wird. Ich habe es mit einigen Fragen von Stack versucht FOR
, aber niemand hat erklärt, wie man das in einer Datei-/Verzeichnisiteration macht, also stelle ich eine neue Frage.
Antwort1
Nun, ich habe es geschafft, dies mit diesem .bat-Skript zu tun (inspiriert vondiese Antwort)
@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
Antwort2
Die folgende Powershell sollte die gewünschten Befehle ausführen. Passen Sie die Pfade nach Bedarf an:
Erstellen Sie im „übergeordneten“ Verzeichnis (z. B. C:\parent\) eine Datei mit dem Namen „ProcessMp3.ps1“ und fügen Sie den folgenden Code hinzu.
ForEach($i in Get-ChildItem -filter "*.mp3" -Path "C:\parent" ){ ffmpeg -i $i -ar 44100 -ab 128k -f mp3 ".\sibling\$i" }
Erstellen Sie unter dem übergeordneten Verzeichnis ein Verzeichnis mit dem Namen „Geschwister“, z. B. „C:\übergeordnet\Geschwister\“.
Führen Sie in einer Eingabeaufforderung Folgendes aus:
Powershell ./ProcessMp3.ps1
Wenn „sequenziell“ lediglich das Hinzufügen von 1, 2, 3 usw. als Präfix zum Dateinamen bedeutet, könnte das Skript folgendermaßen aussehen:
$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++
}