В настоящее время я использую фильтр setpts для ускорения или замедления различных клипов, и точность очень важна для меня ( контекст: я объединяю их в окончательный клип, который должен быть идеально синхронизирован с отдельное видео.) Я использовал это как общий подход:
setpts=(targetDuration/totalFrameCount)*N/TB" -r targetDuration/totalFrameCount
Хотя в большинстве случаев это довольно точно, мне интересно, смогу ли я получить лучшие результаты. Например, если я попытаюсь уменьшить 4-секундный клип со скоростью 60 кадров в секунду ровно до 1 секунды, то есть:
ffmpeg -y -i clip_4sec.avi -filter:v "setpts=(1/240)*N/TB" -r 240/1 clip_4sec_scaled_to_1sec.avi
На самом деле я получаю клип 992 мс. Кто-нибудь знает, почему это происходит? Насколько я понимаю, если целевая продолжительность кратна длительности кадра (1/60 секунды), это не должно быть проблемой, верно?
Есть ли лучший подход, который я могу использовать для повышения точности?
Примечание: FWIW я уже дважды проверил, что входной клип имеет фактическое количество кадров 240.