FFMPEG: Loop-Video auf die Länge von Audio

Beispiel: Video dauert 1 Minute, Audio jedoch 1 Stunde. Machen Sie eine durchgehende Videoschleife für 1 Stunde der Audiospur.

Ich verwende diese Lösung, um das Bild durch die Länge des Audios zu schleifen

ffmpeg -y -loop 1 -r 6 -i image.jpg -i audio.mp3 -shortest -c:v libx264 -preset ultrafast -tune stillimage -pix_fmt yuv420p -c:a copy output.mp4

Aber es funktioniert nicht für Videos, wenn Sie image.jpg durch video.mp4 ersetzen, wird der Fehler ausgegeben no loop found.

Antworten (2)

Für Video sollte die Option stream_loop verwendet werden.

ffmpeg -y -stream_loop -1 -i video -i audio.mp3 -fflags +shortest -max_interleave_delta 50000 -c copy output.mp4

Sie müssen eine sehr aktuelle Version von ffmpeg (> Nov '17) verwenden, da stream_loop einen Fehler hatte, der erst kürzlich behoben wurde.

Da die Videocodierung zeit- und CPU-intensiv ist, habe ich Streamcopy verwendet. Für die meisten Videos ist dies in Ordnung. Andernfalls müssen Sie neu codieren.


Bearbeiten : Ein weiterer Fehler im Zusammenhang mit stream_loop, siehe Problemumgehung unten

ffmpeg  -stream_loop -1 -i 1.mp4 -c copy -v 0 -f nut - | ffmpeg -thread_queue_size 10K -i - -i 1.mp3 -c copy -map 0:v -map 1:a -shortest -y out.mp4
Hallo. Dies streift nur das Audio auf die Länge des Videos, ich meinte das Gegenteil. Schleifen Sie das Video durchgehend auf die Länge des Audios. Im Moment verwende ich die Lösung unter video.stackexchange.com/questions/12905/…
Bearbeiteten Befehl verwenden.
Ich setze den videoTeil auf video.mp4, das Video wird bis zur ursprünglichen Länge abgespielt und stoppt, während der Ton weiterläuft, das Video bleibt durchgehend im letzten Bild stehen.
Vollständiges Protokoll teilen.
pastebin.com/nEcsD7H7 enthält MediaInfo, da Sie sehen können, dass Video- und Audiolängen unterschiedlich sind.
Siehe neuer Befehl am Ende
Der erste Befehl erstellte ein audioloses Video von über 44 Stunden Länge (aus einem 3-Minuten-Song), bevor ich es bemerkte und stoppte, und der zweite Befehl erstellt ein audioloses Loop-Video der richtigen Länge
Die erste wird für immer wiederholt und macht eine unendliche Videolänge, bis ich sie abbreche, die zweite gibt kein Audio aus

Nun, jetzt das Standardverhalten des aktuellen/neuesten ffmpeg über:

c:\sbin\ffmpeg.exe -i "D:\video.m4s" -i "\audio.m4s" -c:v copy -c:a copy "D:\combined.mp4"

füllt /schleift den letzten Frame des Videos bis audio.length=== video.length.

Sehen Sie, ob dies für Sie akzeptabel ist.

Für Details Verhalten:

  • if ( audio.length< video.length), dann füllen Sie das Audio mit still auf, so dassaudio.length === video.length
  • if ( audio.length> v ideo.length), dann füllen Sie das Video mit dem letzten Frame dieses Videos auf, so dassaudio.length === video.length