Wie ändere ich den Ausgabedateinamen im ffmpeg-Batch?

Ich verwende Windows und ffmpeg, um Video-MP4 in Audio-MP3 zu konvertieren. Ich habe mir die folgende Batch-Zeile ausgedacht, die die Arbeit erledigen wird:

 for %f in (*.mp4); do ffmpeg -i %f -vn -ar 44100 -ac 1 -b:a 32k -f mp3 %f.mp3

Die %fVariable erfasst jedoch den gesamten Dateinamen mit der Erweiterung, sodass meine Ausgabe wie folgt aussieht filename.mp4.mp3. Ich würde es lieber so aussehen filename.mp3.

Ich habe alle Arten von Klammern und Kürzungsmethoden ausprobiert, die ich kenne, aber ich kann nichts zum Laufen bringen.

Wie kann ich die Dateinamen in einer ffmpeg-Stapelkonvertierung unter Windows ändern?

Für Benutzer, die nach einer Linux-Lösung suchen, siehe Stapelkonvertierung in einen neuen Ordner mit ffmpeg .

Antworten (2)

Sie können den Dateinamen direkt aus dem forErsetzungsparameter extrahieren. Es ist überhaupt nicht erforderlich, eine neue Variable festzulegen.

for %f in (*.mp4) do ffmpeg -i "%f" -vn -ar 44100 -ac 1 -b:a 32k -f mp3 "%~nf.mp3"

Wenn Sie kompliziertere String-Munging durchführen möchten, ist dies in Powershell viel intuitiver:

ls *.mp4|foreach{
    ffmpeg -i $_ -vn -ar 44100 -ac 1 -b:a 32k -f mp3 $_.name.replace("mp4", "mp3")
}
Für die erste Lösung heißt esset was unexpected at this time.
Die Powershell-Option scheint zu funktionieren. Vielleicht nutze ich das einfach. Danke schön.
Mist, Tippfehler. Ich war auf meinem Mac, also konnte ich es nicht testen. Jetzt behoben.
Der Name der Ausgabedatei wird jetzt angezeigt %outfile.mp3. Es läuft, das ist sicherlich näher, aber die Benennung der Ausgabedatei funktioniert nicht.
Ein weiterer Tippfehler. Es ist schon eine Weile her, dass ich Batch-Scripting verwendet habe - ich mache alles in zsh und Powershell. Versuch es nochmal wenn du magst, mit etwas Glück sollte es jetzt klappen..
Es tut mir leid, aber es funktioniert immer noch nicht. Ich bin nur auf dem normalen Windows cmd.exe, auch bekannt als "Befehlszeile". Die Datei kommt heraus %outfile%. Sie müssen nicht weiter daran arbeiten, wenn Sie nicht wollen; Ich bin zufrieden mit der Powershell-Lösung. Wenn ich raten sollte, wird die outfileVariable nicht richtig gesetzt oder aufgerufen, oder beides. Oder das ist %fin diesem Zusammenhang keine Zeichenfolge des Namens, wie wir es versuchen zu verwenden. Es ist ein Zeiger auf die Datei.
Die SO-Jungs haben es herausgefunden. Eine elegante Lösung. Ich habe einen Änderungsvorschlag eingefügt. Der Code for %f in (*.mp4) do ffmpeg -i "%f" -vn -ar 44100 -ac 1 -b:a 32k -f mp3 "%~nf.mp3"funktioniert.

Um die Antwort von stib zu ergänzen , können Sie diesen Befehl auch in eine einfache Stapeldatei einfügen. Speichern Sie einfach den folgenden Code in einer .batDatei, verschieben Sie die Datei in den Ordner, an dem Sie arbeiten möchten, und doppelklicken Sie dann darauf, um sie auszuführen. Dies setzt voraus, dass Sie ffmpeg heruntergeladen und eingerichtet haben.

@echo off
title Extract MP3 from MP4 with FFMPEG. 
rem Mono Channel, 32kbps.
for %%f in (*.mp4) do ffmpeg -i "%%f" -vn -ar 44100 -ac 1 -b:a 32k -f mp3 "%%~nf.mp3"
pause

Beachten Sie, dass die %fVariablen jetzt %%f. Dies ist eine Stapeldateikonvention und erforderlich. Das Skript wird nicht ausgeführt, wenn dies nicht geändert wird. titleist genau das: der Titel des Skripts. remist die Abkürzung für "Bemerkung": Es ist ein Kommentar und Sie können das auch ändern. Beide Zeilen sind eigentlich nicht notwendig.