Почему я не могу уменьшить 4-секундный клип 60 кадров в секунду до ровно 1 секунды? - PullRequest
0 голосов
/ 20 мая 2018

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

1 Ответ

0 голосов
/ 20 мая 2018

Источник составляет 60 кадров в секунду, а его временная база, входящая и выходящая из фильтра setpts, составляет 1/60.Это должно быть установлено равным 1/240, прежде чем PTS будет изменен.

ffmpeg -y -i clip_4sec.avi -filter:v "settb=1/240,setpts=(1/240)*N/TB" -r 240/1 clip_4sec_scaled_to_1sec.avi

Вероятно, здесь есть ошибка с реализацией -r по сравнению с VFR-мультиплексорами, такими как AVI.

...