В настоящее время я использую фильтр 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