É possível criar com o FFMPEG uma série de imagens com duração continuamente menor?

1

A apresentação de slides mais simples é apenas uma sequência de imagens, cada uma sendo exibida pelo mesmo período de tempo.

Eu também gostaria de fazer uma sequência, mas mais complicada com relação à duração:

Eu quero que a primeira imagem tenha uma duração de 1 segundo, a próxima um pouco menos de um segundo, a próxima até um pouco mais curta, para que a sequência comece devagar e fique mais rápida no final.

Eu não sei como fazer isso, a única coisa que posso imaginar é que a duração de cada imagem pode ser calculada por uma função como

duration = 1/picture_number
duration = 1 - (picture_number/picture_total)

ou em um script:

duration=1
while [duration > 0]
do
duration=duration*0.99
done
    
por sharkant 31.05.2017 / 23:54

1 resposta

2

Isso pode ser feito em um único comando. O método básico é começar com uma apresentação de slides em que cada imagem tenha a mesma duração e, em seguida, use o filtro de seleção para aparar maiores quantidades do tempo de exibição de cada imagem sucessiva.

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 - > isso controla a rapidez com que as imagens aparecem originalmente.

fps=25 - > nós definimos o framerate final. Além disso, é necessário fazer isso para ter quadros para trabalhar.

select='lt(mod(t,1),1-floor(t/1)/25)' - > De cada segundo, mantenha um quadro a menos.

setpts=N/25/TB - > Torne os timestamps dos frames selecionados contínuos, senão o ffmpeg irá duplicar frames para preencher as lacunas e derrotar o nosso objetivo.

Para começar com uma duração inicial de 3 segundos, altere a taxa de quadros para 1/3 e altere a seleção para lt(mod(t,3),3-floor(t/3)/25) . Você precisaria mudar os 25 para controlar a velocidade na qual a duração é reduzida. Valores mais altos reduzirão a duração em uma velocidade menor.

    
por 01.06.2017 / 07:38