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 %f
Variable 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?
Sie können den Dateinamen direkt aus dem for
Ersetzungsparameter 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")
}
set was unexpected at this time.
%outfile.mp3
. Es läuft, das ist sicherlich näher, aber die Benennung der Ausgabedatei funktioniert nicht.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 outfile
Variable nicht richtig gesetzt oder aufgerufen, oder beides. Oder das ist %f
in diesem Zusammenhang keine Zeichenfolge des Namens, wie wir es versuchen zu verwenden. Es ist ein Zeiger auf die Datei.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 .bat
Datei, 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 %f
Variablen jetzt %%f
. Dies ist eine Stapeldateikonvention und erforderlich. Das Skript wird nicht ausgeführt, wenn dies nicht geändert wird. title
ist genau das: der Titel des Skripts. rem
ist die Abkürzung für "Bemerkung": Es ist ein Kommentar und Sie können das auch ändern. Beide Zeilen sind eigentlich nicht notwendig.
Logan