ffmpeg / ffplay -loop 0 : "Hüpfer" in Schleife vermeiden

Du hast Probleme mit Deinem eMail-Programm, Webbrowser oder Textprogramm? Dein Lieblingsprogramm streikt?
Antworten
Benutzeravatar
MartinV
Beiträge: 788
Registriert: 31.07.2015 19:38:52
Wohnort: Hyperion
Kontaktdaten:

ffmpeg / ffplay -loop 0 : "Hüpfer" in Schleife vermeiden

Beitrag von MartinV » 22.12.2019 13:40:06

Ich generiere einige Videos, die wie ein animiertes GIF endlos wiederholt werden sollen.
Die Framerate ist bei 10 fps.

Wenn ich mit "ffplay -loop 0 video.mp4" das Video abspiele, ist beim Wechsel vom letzten Frame zum ersten Frame ein zu schneller "Hüpfer".

Kann ich irgendwie dafür Sorgen, daß beim Sprung zum Videoanfang die Framerate beibehalten wird? Oder anders gesagt, daß eine Pause eingehalten wird, die der Framerate entspricht?

Ob die Einstellung in ffplay geschieht, oder schon bei der Videoerzeugung mit ffmpeg, wäre fast egal. Tendenziell lieber schon bei der Videoerzeugung.

Das Video erzeuge ich aus Einzelbildern mit:

Code: Alles auswählen

ffmpeg -y -r $Framerate -f concat -safe 0 -i $Imagelistfile $Destinationfile
Die Vernunft kann einem schon leidtun. Sie verliert eigentlich immer.

MaGe
Beiträge: 1714
Registriert: 01.06.2014 17:12:16

Re: ffmpeg / ffplay -loop 0 : "Hüpfer" in Schleife vermeiden

Beitrag von MaGe » 22.12.2019 14:26:19

@ MartinV

Keine Ahnung, ob ich dir helfen kann
also das läuft bei mir rund

Code: Alles auswählen

 ffmpeg -safe 0 -f concat -i <(printf "file '$PWD/%s'\n" *.JPG) -r 10 output.mp4 
Da es etwas nervig sein kann jedesmal eine extra Datei anzulegen kann man die mylist.txt Inputdatei auch dynamisch erzeugen.
Es ist darauf zu achten das man sich im selben Verzeichnis befindet wie die .JPG Dateien


gruss MaGe
Wir müssen uns vor der Klimaerwärmung nicht fürchten.
Uns rottet die soziale Kälte viel früher aus.

Benutzeravatar
MartinV
Beiträge: 788
Registriert: 31.07.2015 19:38:52
Wohnort: Hyperion
Kontaktdaten:

Re: ffmpeg / ffplay -loop 0 : "Hüpfer" in Schleife vermeiden

Beitrag von MartinV » 22.12.2019 19:34:50

MaGe hat geschrieben: ↑ zum Beitrag ↑
22.12.2019 14:26:19
also das läuft bei mir rund
Bei mir leider nicht ...
Zudem ist es wichtig "-r 10" vor die Input Files zu setzen, ansonsten wird eine input framerate von 25 angenommen. Aber das nur am Rande.
MaGe hat geschrieben: ↑ zum Beitrag ↑
22.12.2019 14:26:19
Da es etwas nervig sein kann jedesmal eine extra Datei anzulegen kann man die mylist.txt Inputdatei auch dynamisch erzeugen.
Für mich ist eine Liste in Datei praktischer, da meine Quelldateien nicht linear sortiert sind. Aber danke für den Hinweis.


Ich habe mir jetzt beholfen, indem ich das erste Frame des Videos noch einmal an das Ende anhänge. Das macht den Übergang von Ende zu Anfang unmerklich und zeigt mir noch einmal deutlich, daß die Framerate an dieser Stelle ignoriert wird und keine Pause zwischen letztem und erstem Frame gemacht wird.

Diese Lösung funktioniert soweit, ist aber etwas unelegant; der Fehler wird eigentlich nur versteckt, nicht behoben. Hat vielleicht noch jemand eine Idee?

Zur Veranschaulichung hier ein Beispielvideo: https://github.com/mviereck/x11docker/r ... k.4.30.mp4

Code: Alles auswählen

ffplay -loop 0 np.test2.square_quick.4.30.mp4
Die Vernunft kann einem schon leidtun. Sie verliert eigentlich immer.

MaGe
Beiträge: 1714
Registriert: 01.06.2014 17:12:16

Re: ffmpeg / ffplay -loop 0 : "Hüpfer" in Schleife vermeiden

Beitrag von MaGe » 22.12.2019 19:43:53

würdest du das noch probieren wollen? zeile deinen Bedürfnissen anpassen.

Code: Alles auswählen

 ffmpeg -safe 0 -r 1 -f concat -i <(printf "file '$PWD/%s'\n" *.JPG) -r 25 output.mp4 
Dies -r 1 würde dazu führen, dass jedes Bild für eine Sekunde angezeigt
wird. -r 0.5 würde 2 Sekunden und so weiter bedeuten. Versuche 1 - 10


gruss MaGe
Wir müssen uns vor der Klimaerwärmung nicht fürchten.
Uns rottet die soziale Kälte viel früher aus.

Benutzeravatar
MartinV
Beiträge: 788
Registriert: 31.07.2015 19:38:52
Wohnort: Hyperion
Kontaktdaten:

Re: ffmpeg / ffplay -loop 0 : "Hüpfer" in Schleife vermeiden

Beitrag von MartinV » 22.12.2019 22:07:30

Ein interessanter Ansatz ...
"-r 1 [...] -r 6" führt dazu, daß 5/6 Pause zwischen dem letzten und dem ersten Bild liegen.
Das ist unmerklich und könnte man als Lösung nehmen. Leider wird die Videodatei dadurch auch 6x so groß. Daher ist das leider keine vertretbare Lösung.

Derzeit merke ich, daß meine Kompromißlösung gut ist für geringe Framerates, aber wiederum störend bei hohen Framerates - da bewirkt es eine kurze Verzögerung. Das erste Frame noch einmal an den Schluß zu hängen ist also auch nur ein schlechter Kompromiß.
Zusätzlicher Nachteil: Wandele ich das Video in ein GIF um, hat es 1 Frame zuviel und hängt sehr auffallend.

Kann man irgendwie eine Pause im Video definieren, die vor dem ersten oder nach dem letzten Frame "abgespielt" wird?
Die Vernunft kann einem schon leidtun. Sie verliert eigentlich immer.

MaGe
Beiträge: 1714
Registriert: 01.06.2014 17:12:16

Re: ffmpeg / ffplay -loop 0 : "Hüpfer" in Schleife vermeiden

Beitrag von MaGe » 23.12.2019 10:31:43

MartinV hat geschrieben: Kann man irgendwie eine Pause im Video definieren, die vor dem ersten oder nach dem letzten Frame "abgespielt" wird?
vielleicht so etwas wie

Concat Demuxer

Mit dem Concat-Demuxer können Sie Bilder manuell bestellen und für jedes Bild eine bestimmte Dauer festlegen .
Erstellen Sie zunächst eine Textdatei mit den entsprechenden Informationen:

Datei '/path/to/dog.png'
Dauer 5
Datei '/path/to/cat.png'
Dauer 1
Datei '/path/to/rat.png'
Dauer 3
Datei '/path/to/tapeworm.png'
Dauer 2
Datei '/path/to/tapeworm.png'

(Aufgrund einer Eigenart muss das letzte Bild zweimal angegeben werden - das zweite Mal ohne Angabe der Dauer)

google.com/translate

https://trac.ffmpeg.org/wiki/Slideshow


gruss MaGe
Wir müssen uns vor der Klimaerwärmung nicht fürchten.
Uns rottet die soziale Kälte viel früher aus.

Benutzeravatar
MartinV
Beiträge: 788
Registriert: 31.07.2015 19:38:52
Wohnort: Hyperion
Kontaktdaten:

Re: ffmpeg / ffplay -loop 0 : "Hüpfer" in Schleife vermeiden

Beitrag von MartinV » 23.12.2019 10:40:15

Interessant, danke!

Das schaue ich mir mal genauer an.
(Aufgrund einer Eigenart muss das letzte Bild zweimal angegeben werden - das zweite Mal ohne Angabe der Dauer)
Das klingt jedoch nach dem gleichen Problem und gleichen Workaround, wie ich es jetzt schon habe ...
Die Vernunft kann einem schon leidtun. Sie verliert eigentlich immer.

Benutzeravatar
MartinV
Beiträge: 788
Registriert: 31.07.2015 19:38:52
Wohnort: Hyperion
Kontaktdaten:

Re: ffmpeg / ffplay -loop 0 : "Hüpfer" in Schleife vermeiden

Beitrag von MartinV » 08.01.2020 09:09:12

Zwischenbericht:
Die Pause oder Nicht-Pause beim Loop von Videos hängt stark vom Player ab.

- ffplay -loop, wie gesagt, macht gar keine Pause zwischen letztem und ersten Frame.
- firefox und chromium halten die Framerate exakt ein, wie es sein sollte.
- VLC und SMPlayer bieten keine brauchbare loop-Option, nur ein "Playlist wiederholen", was aber eine große Pause und schwarzen Bildschirm bewirkt.
- Ein paar andere getestete Player gaben auch kein brauchbares Ergebnis. (Namen schon wieder vergessen).

Da firefox und chromium die Framerate sauber einhalten, kommt der Workaround mit einem zusätzlichen Frame nicht in Frage.

Ich werde wohl auf die -loop Option von ffplay verzichten und eher gucken, daß ich eine "ffmpeg | ffplay" Pipe konstruiere, die eine flüssige Wiederholung erlaubt.
Die Vernunft kann einem schon leidtun. Sie verliert eigentlich immer.

Antworten