Вы можете использовать фильтр setpts для постепенного изменения fps.
Более полезно думать об этом с точки зрения длительности кадра, а не fps, поскольку именно это setpts может напрямую изменять. Значение 5 кадров в секунду указывает длительность кадра 200 мс, тогда как значение 90 кадров в секунду указывает длительность кадра 11 мс (после округления). Таким образом, кадр 0 начинается в момент времени 0 и имеет продолжительность 200 мс, поэтому кадр 1 показывает 200 мс и имеет эту временную метку. Кадр 808 имеет длительность 11 мс. Таким образом, для каждого кадра expr метки времени равен 200ms-189ms*N/809
, где N - индекс кадра. Поскольку мы не уменьшаем длительность кадра после 809, мы должны ограничить N до 809. 200ms-189ms*min(N,809)/809
Команда тогда равна
ffmpeg -start_number 1 -i %03d.tif -vf "settb=1/1000,setpts='if(eq(N,0),0,PREV_OUTPTS+200-189*(min(N,809)/809))'" -vsync vfr -enc_time_base 1/1000 -c:v libx264 -pix_fmt yuv420p output.mp4
. шкала времени до 1 миллисекунды. Как и enc_time_base
для другой части конвейера обработки.