2

Я работаю над проектом с замедленной съемкой, в настоящее время у меня есть пара длинных видео, где есть части, где ничего не происходит, и мне интересно, есть ли программа, которая может вырезать все эти части или убрать все движущиеся части и поместить в один файл, а не я, проходя часы воспроизведения и вручную вырезая их.

Я читал, что VLC может обнаружить движение при воспроизведении, но не уверен, как это использовать. Это может быть решением для Windows или Linux.

1 ответ1

2

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .