
Die einfachste Diashow ist lediglich eine Abfolge von Bildern, die jeweils gleich lange angezeigt werden.
Ich würde auch gerne eine Sequenz machen, allerdings etwas komplizierter was die Dauer angeht:
Ich möchte, dass das erste Bild eine Dauer von 1 Sekunde hat, das nächste etwas weniger als eine Sekunde, das nächste noch etwas kürzer, sodass die Sequenz langsam beginnt und zum Ende hin schneller wird.
Ich weiß nicht, wie das geht, ich kann nur vermuten, dass die Dauer für jedes Bild mit einer Funktion wie dieser berechnet werden könnte
duration = 1/picture_number
duration = 1 - (picture_number/picture_total)
oder in einem Skript:
duration=1
while [duration > 0]
do
duration=duration*0.99
done
Antwort1
Dies kann mit einem einzigen Befehl erledigt werden. Die grundlegende Methode besteht darin, mit einer Diashow zu beginnen, bei der jedes Bild die gleiche Dauer hat, und dann mit dem Auswahlfilter größere Mengen aus der Anzeigezeit jedes nachfolgenden Bilds herauszuschneiden.
ffmpeg -framerate 1 -i img%d.jpg \
-vf fps=25,select='lt(mod(t,1),1-floor(t)/25)',setpts=N/25/TB \
out.mp4
-framerate 1
--> hiermit wird gesteuert, wie schnell die Bilder ursprünglich umgeschaltet werden.
fps=25
--> wir legen die endgültige Framerate fest. Dies ist auch notwendig, um Frames zum Arbeiten zu haben.
select='lt(mod(t,1),1-floor(t/1)/25)'
--> Behalten Sie von jeder Sekunde ein Bild weniger.
setpts=N/25/TB
--> Machen Sie die Zeitstempel der ausgewählten Frames kontinuierlich, sonst dupliziert ffmpeg die Frames, um Lücken zu füllen und unser Ziel zu vereiteln.
Um mit einer Anfangsdauer von 3 Sekunden zu beginnen, ändern Sie die Framerate auf 1/3
und die Auswahl auf lt(mod(t,3),3-floor(t/3)/25)
. Sie müssen 25 ändern, um die Geschwindigkeit zu steuern, mit der die Dauer reduziert wird. Höhere Werte reduzieren die Dauer langsamer.