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
.
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
video
Teil 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.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:
audio.length
< video.length
), dann füllen Sie das Audio mit still auf, so dassaudio.length === video.length
audio.length
> v ideo.length
), dann füllen Sie das Video mit dem letzten Frame dieses Videos auf, so dassaudio.length === video.length
theonlygusti