Я проводил некоторые эксперименты с 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