Zumindest in FFmpeg 2.8.x (aber Oldie sollte auch funktionieren) können Sie lavfi
als Eingabeformat und komplexes Filterdiagramm movie
und setpts
Filter als Argument für die -i
Option verwenden.
Nächster Befehl, der diese Arbeit für Sie erledigt:
ffmpeg -re -f lavfi -i "movie=filename=input.mp4:loop=0, setpts=N/(FRAME_RATE*TB)" output.mp4
Null loop=
Argumente bedeutet Endlosschleife. Werte größer Null setzen die Wiederholungszahl. setpts
Filter, die für die PTS-Anpassung für zweite und spätere Wiederholungen erforderlich sind, andernfalls schlagen die meisten Ausgangs-Muxer fehl, wenn der nicht-monotone PTS zunimmt: Die Schleife berechnet den PTS nicht neu.
Beachten Sie, dass die Verwendung von Filtern unter der Annahme, dass die Umgehung von Frames ohne Decodierung / Codierung nicht möglich ist: Durch Design-Filter werden nur decodierte Frames behandelt.
Am FFmpeg 2.8.2 wurde eine neue Eingabemöglichkeit -stream_loop
eingeführt. Ich schaue zuerst, es funktioniert einfacher und ermöglicht das Kopieren von Inhalten ohne Umcodierung:
ffmpeg -re -stream_loop -1 -i input.mp4 -c copy -y output.mp4
PTS wird jedoch nicht neu berechnet, und die Ausgabedatei ist falsch. Wenn Sie Filter hinzufügen, um PTS zu reparieren (siehe setpts
), müssen Sie auch entfernen -c copy
. Nur Bitstream-Filter können mit codierten Paketen umgehen, aber es gibt keine Bitstream-Filter, mit denen PTS behoben werden kann (siehe: https://ffmpeg.org/ffmpeg-bitstream-filters.html ).
In jedem Fall schlägt ffmpeg beim zweiten Durchgang mit Fehler fehl:
input.mp4: Resource temporarily unavailable
Bekannte Problemumgehung für mich : Container für Eingabedatei ohne PTS-Limits verwenden (Streaming-Container). Einer von ihnen, der mich kennt, ist MPEG-TS. So können Sie Ihre MP4-Datei einfach in MPEG-TS konvertieren:
ffmpeg -i input.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts input.ts
Verwenden Sie den nächsten Befehl, um eine Infinity-Datei zu erstellen:
ffmpeg -re -stream_loop -1 -i input.ts -c copy -strict -2 -bsf:a aac_adtstoasc -y output.mp4
(Bitstream-Filter sollten nur bei Bedarf verwendet werden, bei meinen Samples ist dies erforderlich)
In diesem Fall ist FFmpeg> = 2.8.2 erforderlich.