Wie konvertiert man ein ganzes Verzeichnis / Ordner mit ffmpeg über die Kommandozeile oder mit einem Batch-Skript?
ffmpeg
batch-processing
Eugene
quelle
quelle
i was unexpected at this time.
do name=`echo "${i%.*}"`;
arbeitet mit Dateinamen mit Punkten (und Leerzeichen)..bat
in Windows?Unter Linux und MacOS kann dies in einer Zeile erfolgen, indem die Dateinamenerweiterung der Ausgabedatei mithilfe der Parametererweiterung geändert wird:
quelle
ffmpeg
keine Eingabe und Ausgabe in dieselbe Datei möglich ist. 2) Ich bin nicht sicher, ob Bash-Befehle unter Windows 10 nativ funktionieren. Vielleicht sollte ich der Antwort hinzufügen, dass sie sich an Systeme richtet, die Bash nativ verwenden können, wie Linux und MacOS. lxs gab eine Windows-Antwort auf diese Frage.for f in *.mkv; do ffmpeg -i "$f" -map 0 -movflags faststart -c:v libx264 -c:a copy -c:s copy "${f/x265/x264}"; done
Und unter Windows:
quelle
FOR /F "tokens=*" %G IN ('dir /b *.mp3') DO ffmpeg -i "%G" -map_metadata -1 -c:v copy -c:a copy "%~nG .mp3"
Ein einzeiliges Bash-Skript wäre einfach zu erstellen - durch
*.avi
Ihren Dateityp ersetzen :quelle
-qscale
. Entfernen Sie es und verwenden Sie die Standardeinstellungen oder verwenden Sie-crf
stattdessen (Standard ist-crf 23
).basename
schlägt der Befehl fehl, da die Backshick- Unterschale nicht in Anführungszeichen gesetzt wird. Genau aus diesem Grund hat bash stattdessen eine Shell-Erweiterung: für i in * .avi; do ffmpeg -i "$ i" -qscale 0 "$ (Basisname" $ i ".avi)". mov; fertigVerwenden Sie zum Konvertieren mit Unterverzeichnissen z
quelle
find -name "*.vtt" -exec ffmpeg -i {} {}.srt \;
find *.mp4 -exec ffmpeg -i {} {}.mp3 \;
find . -name *.ogg -or -name *.wma -exec ffmpeg -i {} {}.mp3 \;
find . -name *.wma -exec ffmpeg -i {} {}.mp3 \; -exec rm {} \;
Für Windows:
Hier konvertiere ich alle (.mp4) Dateien in (.mp3) Dateien.
Öffnen Sie einfach cmd, gehen Sie zum gewünschten Ordner und geben Sie den Befehl ein.
Verknüpfung: (optional)
1. Wechseln Sie zu dem Ordner, in dem sich Ihre (.mp4) -Dateien befinden.
2. Drücken Sie die Umschalttaste und klicken Sie mit der linken Maustaste und wählen Sie "PowerShell-Fenster hier
öffnen " oder "Eingabeaufforderungsfenster hier öffnen".
3. Geben Sie "cmd" ein [HINWEIS : Überspringen Sie diesen Schritt, wenn cmd anstelle von PowerShell direkt geöffnet wird.]
4. Führen Sie den Befehl aus
Wenn Sie dies unter Windows 10 in eine Batchdatei einfügen möchten, müssen Sie %% i verwenden.
quelle
Für alle, die etwas mit ffmpeg stapelweise konvertieren möchten, aber eine praktische Windows-Oberfläche wünschen, habe ich dieses Front-End entwickelt:
https://sourceforge.net/projects/ffmpeg-batch
Es fügt ffmpeg eine Fenstermode-Oberfläche, Fortschrittsbalken und verbleibende Informationen hinzu, Funktionen, die ich bei der Verwendung von ffmpeg immer vermisst habe.
quelle
Wenn Sie GNU parallel haben, können Sie alle .avi-Dateien unten
vid_dir
parallel in mp4 konvertieren , wobei Sie alle außer einem Ihrer CPU-Kerne mit verwendenUm von / in verschiedene Formate zu konvertieren, ändern Sie
'*.avi'
oder.mp4
nach Bedarf. GNU parallel ist in den Repositorys der meisten Linux-Distributionen in einem Paket aufgeführt, das normalerweise aufgerufen wirdparallel
.quelle
!
am Ende eines der Bash-Einzeiler hinzufügen ?Ich weiß, dass dies möglicherweise redundant ist, aber ich verwende dieses Skript, um Dateien stapelweise zu konvertieren.
Es sind zwei Argumente erforderlich, um es flexibler zu machen:
Ich erstelle einen Alias dafür, aber Sie können ihn auch manuell wie folgt verwenden:
Dies würde alle
mkv
Dateien inmp4
Dateien konvertieren .Wie Sie sehen können, ist es etwas vielseitiger. Solange
ffmpeg
es konvertiert werden kann, können Sie zwei beliebige Erweiterungen angeben.quelle
Hier ein bisschen wie Code Golf, aber da fast alle Antworten bisher Bash sind (abgesehen von einem einsamen cmd), ist hier ein plattformübergreifender
Windows- Befehl, der Powershell verwendet (weil fantastisch):Sie können * .avi so ändern, dass es zu Ihrem Quellmaterial passt.
quelle
Batch-Prozessdateien
flac
inmp3
(sicher für Dateinamen mit Leerzeichen) mit [1] [2]quelle
Fenster:
Dies ist eine variable Bitrate der Qualität 2, Sie können sie auf 0 setzen, wenn Sie möchten, aber wenn Sie kein wirklich gutes Lautsprechersystem haben, ist es imo wertlos
quelle
Natürlich ist jetzt PowerShell hinzugekommen, das speziell dafür entwickelt wurde, so etwas extrem einfach zu machen.
Und ja, PowerShell ist auch auf anderen Betriebssystemen als nur Windows verfügbar , ist jedoch unter Windows vorinstalliert, sodass dies für alle nützlich sein sollte.
Zunächst möchten Sie alle Dateien im aktuellen Verzeichnis auflisten. Beginnen wir also mit:
Sie können auch verwenden,
ls -Recurse
wenn Sie alle Dateien in Unterverzeichnissen rekursiv konvertieren möchten.Dann filtern wir diese nur nach dem Dateityp, den wir konvertieren möchten - z. B. "avi".
Danach geben wir diese Informationen über a an FFmpeg weiter
ForEach
.Für die Eingabe von FFmpeg verwenden wir das
FullName
- das ist der gesamte Pfad zur Datei. Und für die Ausgabe von FFmpeg werden wir das verwendenName
- aber das am Ende durch ersetzen . Es wird also ungefähr so aussehen:.avi
.mp3
Lassen Sie uns das alles zusammenfassen und das ist das Ergebnis:
Dadurch werden alle ".avi" -Dateien über FFmpeg in ".mp3" -Dateien konvertiert. Ersetzen Sie einfach die drei Punkte in Anführungszeichen, um zu entscheiden, welche Art von Konvertierung Sie möchten, und fügen Sie FFmpeg innerhalb von Dateien weitere Argumente hinzu
ForEach
.Sie können noch einen Schritt weiter gehen und
Remove-Item
am Ende hinzufügen , um die alten Dateien automatisch zu löschen.Wenn
ffmpeg
es sich nicht in Ihrem Pfad befindet und sich tatsächlich in dem Verzeichnis befindet, in dem Sie sich gerade befinden, schreiben Sie./ffmpeg
dort statt nurffmpeg
.Hoffe das hilft jedem.
quelle
.ps1
Datei ein, nicht in eine.bat
Datei. Sie müssenSet-ExecutionPolicy RemoteSigned
als Administrator ausgeführt werden, wenn Sie noch nie zuvor ein PS-Skript ausgeführt haben.Wenn Sie möchten, dass eine grafische Oberfläche mit ffmpegX stapelweise verarbeitet wird, versuchen Sie es mit Quick Batcher . Es ist kostenlos und verwendet Ihre letzten ffmpegX-Einstellungen, um Dateien zu konvertieren, die Sie darin ablegen.
Beachten Sie, dass Sie keine Ordner per Drag & Drop auf Quick Batcher ziehen können. Wählen Sie also Dateien aus und stellen Sie sie dann in Quick Batcher.
quelle
Nur dieser hat für mich funktioniert. Bitte beachten Sie, dass Sie den Ordner "newfiles" manuell erstellen müssen, in dem sich die Datei ffmpeg.exe befindet.
Konvertieren . Dateien zu .wav Audio Code:
dh wenn Sie alle .mp3-Dateien in .wav konvertieren möchten, ändern Sie
("*.*")
in("*.mp3")
.Der Autor dieses Skripts ist:
https://forum.videohelp.com/threads/356314-How-to-batch-convert-multiplex-any-files-with-ffmpeg
hoffe es hat geholfen 🙏.
quelle
Dadurch wird ein MP3-Video aus allen JPG-Dateien aus dem aktuellen Verzeichnis erstellt.
quelle
Und für Windows funktioniert dies nicht
selbst wenn ich das verdopple
%
.Ich würde sogar vorschlagen:
ebenfalls:
quelle
Dies ist, was ich verwende, um AVI stapelweise in 1280x mp4 zu konvertieren
Funktioniert gut als Cmd-Datei, führen Sie es aus, die Schleife findet alle AVI-Dateien in diesem Ordner.
ruft MY (für Sie ändern) ffmpeg auf, übergibt den Eingabenamen, die Einstellungen dienen zum erneuten Skalieren mit Schärfen. Ich probs brauche kein CNI und "
-b:v 1024k
" ...Die Ausgabedatei ist die Eingabedatei abzüglich der Erweiterung, wobei mp4 als neue ext.
quelle
Ich verwende diesen Einzeiler unter Linux, um Dateien (normalerweise H265) in etwas zu konvertieren, das ich ohne Probleme auf Kodi abspielen kann:
Dies wird in eine temporäre Datei konvertiert und ersetzt dann das Original, sodass die Namen nach der Konvertierung gleich bleiben.
quelle
Auch wenn Sie die gleiche Konvertierung in Unterordnern wünschen. Hier ist der rekursive Code.
quelle
kleines PHP-Skript dafür:
quelle
escapeshellarg()
und funktioniert sowohl unter Windows als auch unter Linux. Ich bin damit einverstanden, dass es ein Randfall ist.Eine andere einfache Lösung, die noch nicht vorgeschlagen wurde, wäre
xargs
:ls *.avi | xargs -i -n1 ffmpeg -i {} "{}.mp4"
Eine kleine Gefahr ist die umständliche Benennung von Ausgabedateien (z
input.avi.mp4
. B. ). Eine mögliche Problemumgehung hierfür könnte sein:ls *.avi | xargs -i -n1 bash -c "i={}; ffmpeg -i {} "\${i%.*}.mp4"
""quelle
ls
mitprintf '%s\n'
hier.