Я проводил некоторые эксперименты с ffmpeg
и фильтром mpdecimate
.
Вывод - это видео только с "активными" частями, и я использовал некоторые приемы с FPS.
Выход будет воспроизводиться для игрока со скоростью 25 кадров в секунду, но в действительности он будет со скоростью 5 кадров в секунду (отрегулируйте число 5 в обоих setpts
и первых фильтрах fps
для регулировки скорости. Если вам подходит 25fps (мое тестовое видео показало слишком быстрые изменения для меня), удалите последний фильтр и используйте -map [c]
.
Если вам нужно настроить порог, посмотрите здесь: (например: mpdecimate=hi=64*12:lo=64*8:frac=0.33
)
mpdecimate
отбрасывает кадры, но длина сохраняется. С помощью setpts
вы заставляете его вычислять фиксированную длительность для каждого кадра, и первый fps
заставляет его соответствовать "текущей" скорости, определенной setpts
. Последние кадры в fps
делают его "воспроизводимым" (вставляет дублированные кадры для заполнения в видео со скоростью 25 кадров в секунду), (видео со скоростью 5 кадров в секунду на моем VLC воспроизводится не очень хорошо, время от времени зависая)
ffmpeg -y -i input.mp4 -filter_complex "[0:v] mpdecimate [a] ; [a] setpts='N/(5*TB)' [b] ; [b] fps=5 [c] ; [c] fps=25 [d]" -map "[d]" -c:v libx264 ouput.mp4