Wie kann ich mit FFmpeg eine Schleife (Loop) für ein Video oder Audio erstellen?
Einführung
FFmpeg ist ein mächtiges Kommandozeilen-Tool zur Verarbeitung von Audio- und Videodateien. Unter anderem kann man mit FFmpeg eine Schleife (Loop) erzeugen, also ein Video oder eine Audiodatei mehrfach hintereinander abspielen lassen. Dies ist besonders nützlich, wenn man kurze Clips verlängern oder eine Audiospur nahtlos wiederholen möchte.
Video-Schleife erzeugen
Wenn Sie ein Video mehrfach hintereinander abspielen möchten, gibt es unterschiedliche Methoden. Eine einfache Möglichkeit ist es, den Input mehrfach neu zu laden. Dabei wird die Option -stream_loop verwendet, die vor dem Input-Dateinamen platziert wird. Zum Beispiel:
ffmpeg -stream_loop 2 -i input.mp4 -c copy output.mp4Dieser Befehl legt fest, dass das input.mp4 zwei Mal zusätzlich wiederholt wird. Das Ergebnis ist ein Video, das insgesamt dreimal hintereinander abgespielt wird. Die Option -c copy sorgt dafür, dass keine Neukodierung erfolgt, sondern die Video- und Audiodaten unverändert kopiert werden. Das sorgt für Schnelligkeit und Qualitätserhalt.
Ein wichtiger Punkt ist, dass -stream_loop nur mit bestimmten Formaten und Encodern zuverlässig funktioniert. Sollte es zu Problemen kommen, ist es möglich, die Schleife manuell zu erzeugen, indem man das Video mit concat filtert:
ffmpeg -i input.mp4 -filter_complex "loop=loop=2:size=150:start=0" output.mp4Dieser Befehl ist aber für Video-Dateien meist nicht ideal, da der loop Filter in erster Linie für Einzelbilder gedacht ist. Besser ist es, mehrere Clips zusammenzufügen:
ffmpeg -i input.mp4 -i input.mp4 -i input.mp4 -filter_complex " concat=n=3:v=1:a=1 " -map " " -map " " output.mp4Dabei wird das Video dreimal hintereinander gehängt.
Audio-Schleife erzeugen
Für Audio kann man ebenfalls die Option -stream_loop verwenden:
ffmpeg -stream_loop 4 -i input.mp3 -c copy output.mp3Damit wird das Audio fünf Mal abgespielt (ursprüngliches Mal plus vier Wiederholungen). Auch hier wird keine Neukodierung durchgeführt, was schnell und effizient ist.
Alternativ kann man beim Audio die Dauer der Ausgabedatei mit -t oder -to anpassen und mit -stream_loop -1 eine Endlosschleife erzeugen (wobei diese nur bei Streaming oder Playern Sinn ergibt, da das Ergebnis eine sehr lange Datei sein kann).
Schleife ohne Neukodierung
Es ist vorteilhaft, die Schleife ohne Neukodierung zu erzeugen, damit Qualität erhalten bleibt und es schnell geht. Die Verwendung von -stream_loop zusammen mit -c copy ist die beste Methode dafür. Sollte -c copy nicht funktionieren (z.B. wenn Container oder Codecs nicht kompatibel sind), ist eine Neukodierung notwendig, etwa so:
ffmpeg -stream_loop 2 -i input.mp4 -filter_complex "concat=n=3:v=1:a=1" output.mp4Oder Sie verwenden den concat Demuxer mit einer Textdatei, die die Dateien hintereinander auflistet, was bei mehreren Quellvideos gut funktioniert.
Zusammenfassung
Die meist einfache und effiziente Methode zum Erstellen einer Schleife zum Wiederholen von Video oder Audio ist die Verwendung von -stream_loop vor der Eingabedatei. Dies erzeugt eine Datei, die den Inhalt mehrfach aneinanderreiht, ohne Neukodierung wenn möglich. Für komplexere Fälle kann man die concat-Filter oder den Textdatei-Concat-Demuxer verwenden, um mehrere Kopien manuell anzuhängen.
Beispiel für Video Wiederholung ohne Neukodierung:
ffmpeg -stream_loop 3 -i video.mp4 -c copy output.mp4Beispiel für Audio Wiederholung ohne Neukodierung:
ffmpeg -stream_loop 2 -i audio.mp3 -c copy output_looped.mp3So kann man mit FFmpeg schnell und effektiv Loops für Video und Audio erzeugen.
