328 Stimmen

Wie kann man ein ganzes Verzeichnis mit ffmpeg konvertieren?

Wie konvertiert man ein ganzes Verzeichnis/Ordner mit ffmpeg über die Kommandozeile oder mit einem Batch-Skript?

31voto

user2707001 Punkte 1323

Zum Konvertieren mit Unterverzeichnissen verwenden Sie z. B.

find . -exec ffmpeg -i {} {}.mp3 \;

25voto

JayHawk Punkte 351

@Linux Um einen Haufen zu konvertieren, ist mein One-Liner zum Beispiel dieser (.avi nach .mkv) im gleichen Verzeichnis:

for f in *.avi; do ffmpeg -i "${f}" "${f%%.*}.mkv"; done

bitte beachten Sie das doppelte "%%" in der Ausgabeanweisung. Damit erhalten Sie nicht nur das erste Wort oder den Namen der Eingabedatei, sondern alles vor dem letzten Punkt.

25voto

Eibel Punkte 430

Für alle, die eine Stapelkonvertierung mit ffmpeg durchführen wollen, aber eine bequeme Windows-Oberfläche wünschen, habe ich dieses Front-End entwickelt:

https://sourceforge.net/projects/ffmpeg-batch

Es fügt ffmpeg eine fensterähnliche Oberfläche, Fortschrittsbalken und Informationen über die verbleibende Zeit hinzu, Funktionen, die ich bei der Verwendung von ffmpeg immer vermisst habe.

9voto

ABPerson Punkte 438

Natürlich gibt es jetzt PowerShell, die speziell dafür entwickelt wurde, genau so etwas zu machen extrem einfach.

Und, ja, PowerShell ist auch verfügbar auf anderen Betriebssystemen als nur Windows, aber es ist auf Windows vorinstalliert, so dass dies für jeden nützlich sein sollte.

Zuerst wollen Sie alle Dateien im aktuellen Verzeichnis auflisten, also beginnen wir mit:

ls

Sie können auch Folgendes verwenden ls -Recurse wenn Sie auch alle Dateien in Unterverzeichnissen rekursiv konvertieren wollen.

Dann filtern wir diese nur nach dem Dateityp, den wir konvertieren wollen - z. B. "avi".

ls | Where { $_.Extension -eq ".avi" }

Danach übergeben wir diese Informationen an FFmpeg durch eine ForEach .

Für die Eingabe von FFmpeg verwenden wir die FullName - das ist der gesamte Pfad zur Datei. Und für die Ausgabe von FFmpeg verwenden wir die Name - sondern Ersetzen von die .avi am Ende mit .mp3 . Es wird also in etwa so aussehen:

$_.Name.Replace(".avi", ".mp3")

Fassen wir also all das zusammen, und das ist das Ergebnis:

ls | Where { $_.Extension -eq ".avi" } | ForEach { ffmpeg -i $_.FullName $_.Name.Replace(".avi", ".mp3") }

Damit werden alle ".avi"-Dateien durch FFmpeg in ".mp3"-Dateien umgewandelt. Ersetzen Sie einfach die drei Dinge in Anführungszeichen, um zu entscheiden, welche Art der Umwandlung Sie wünschen, und fügen Sie ruhig weitere Argumente für FFmpeg innerhalb der ForEach .

Sie könnten noch einen Schritt weiter gehen und Folgendes hinzufügen Remove-Item am Ende, um die alten Dateien automatisch zu löschen.

Wenn ffmpeg nicht in Ihrem Pfad ist und es sich in dem Verzeichnis befindet, in dem Sie sich gerade befinden, schreiben Sie ./ffmpeg dort statt nur ffmpeg .

Ich hoffe, das hilft allen.

8voto

sebbit Punkte 101

Wenn Sie GNU parallel Sie können alle folgenden .avi-Dateien konvertieren vid_dir zu mp4 parallel, wobei alle bis auf einen Ihrer CPU-Kerne mit

find vid_dir -type f -name '*.avi' -not -empty -print0 |
    parallel -0 -j -1 ffmpeg -loglevel fatal -i {} {.}.mp4

Zur Konvertierung von/zu anderen Formaten ändern Sie '*.avi' o .mp4 nach Bedarf. GNU parallel ist in den meisten Linux-Distributionen in einem Paket enthalten, das normalerweise parallel .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X