Можно ли с помощью FFMPEG создать серию изображений с постепенно уменьшающейся продолжительностью?

Можно ли с помощью FFMPEG создать серию изображений с постепенно уменьшающейся продолжительностью?

Самое простое слайд-шоу — это просто последовательность изображений, каждое из которых отображается в течение одинакового количества времени.

Я бы тоже хотел сделать последовательность, но более сложную по длительности:

Я хочу, чтобы первая картинка длилась 1 секунду, следующая — чуть меньше секунды, следующая — еще немного короче, чтобы последовательность начиналась медленно и ускорялась к концу.

Я не знаю, как это сделать, единственное, что я могу предположить, это то, что длительность каждой картинки можно рассчитать с помощью функции типа

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

или в сценарии:

duration=1
while [duration > 0]
do
duration=duration*0.99
done

решение1

Это можно сделать одной командой. Основной метод — начать со слайд-шоу, где каждое изображение имеет одинаковую продолжительность, а затем использовать фильтр выбора, чтобы обрезать большее количество времени показа каждого последующего изображения.

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--> это контролирует, как быстро изначально меняются изображения.

fps=25--> устанавливаем финальную частоту кадров. Также это нужно сделать, чтобы были кадры для работы.

select='lt(mod(t,1),1-floor(t/1)/25)'--> С каждой секунды оставляйте на один кадр меньше.

setpts=N/25/TB--> сделайте временные метки выбранных кадров непрерывными, иначе ffmpeg будет дублировать кадры, чтобы заполнить пробелы, и наша цель будет нарушена.

Чтобы начать с начальной продолжительности в 3 секунды, вам нужно изменить частоту кадров на 1/3и выбрать на lt(mod(t,3),3-floor(t/3)/25). Вам нужно будет изменить 25, чтобы контролировать скорость, с которой уменьшается длительность. Более высокие значения уменьшат длительность с меньшей скоростью.

Связанный контент