
La presentación de diapositivas más simple es solo una secuencia de imágenes y cada una se muestra durante el mismo período de tiempo.
También me gustaría hacer una secuencia, pero más complicada respecto a la duración:
Quiero que la primera imagen tenga una duración de 1 segundo, la siguiente un poco menos de un segundo, la siguiente incluso un poco más corta, para que la secuencia comience lenta y se acelere hacia el final.
No sé cómo hacerlo, lo único que puedo adivinar es que la duración de cada imagen podría calcularse mediante una función como
duration = 1/picture_number
duration = 1 - (picture_number/picture_total)
o en un guión:
duration=1
while [duration > 0]
do
duration=duration*0.99
done
Respuesta1
Esto se puede hacer con un solo comando. El método básico es comenzar con una presentación de diapositivas donde cada imagen tiene la misma duración y luego usar el filtro de selección para recortar mayores cantidades del tiempo de visualización de cada imagen sucesiva.
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
--> esto controla qué tan rápido cambian las imágenes originalmente.
fps=25
--> establecemos la velocidad de fotogramas final. Además, es necesario hacer esto para tener marcos con los que trabajar.
select='lt(mod(t,1),1-floor(t/1)/25)'
--> De cada segundo, mantén un cuadro menos.
setpts=N/25/TB
-> haga que las marcas de tiempo de los cuadros seleccionados sean continuas; de lo contrario, ffmpeg duplicará los cuadros para llenar los espacios y frustrar nuestro objetivo.
Para comenzar con una duración inicial de 3 segundos, cambiaría la velocidad de fotogramas 1/3
y cambiaría la selección a lt(mod(t,3),3-floor(t/3)/25)
. Necesitarías cambiar el 25 para controlar la velocidad a la que se reduce la duración. Los valores más altos reducirán la duración a una velocidad más lenta.