Убрать события движения из файла

1116
BluGeni

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

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

2

1 ответ на вопрос

2
NuTTyX

Я делал некоторые эксперименты с ffmpegи mpdecimateфильтр.

Вывод - это видео только с «активными» частями, и я использовал некоторые приемы с FPS.

Выход будет воспроизводиться для игрока со скоростью 25 к / с, но в действительности он будет со скоростью 5 к / с (отрегулируйте число 5 в обоих setptsи первых fpsфильтрах, чтобы отрегулировать скорость. Если вам подходит 25 к / с (мое тестовое видео показало слишком быстрые изменения для меня), отбросьте последний фильтруйте и используйте -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 
Я получаю] Нет такого фильтра: 'mpdecimate' Ошибка разделения списка аргументов: опция не найдена, что мне нужно сделать, чтобы это исправить? BluGeni 10 лет назад 0
Я пропустил кавычки вокруг `[d]` в `-map`. Что касается фильтра, то я использовал и текущую версию ffmpeg. Не могли бы вы попробовать обновить свой? NuTTyX 10 лет назад 0
Отлично, теперь он работает, похоже, на завершение потребуется время. Я доложу после того, как это будет сделано. BluGeni 10 лет назад 0
Если вы используете `-vsync 2`, вы можете создать выходной файл VFR. (По умолчанию ffmpeg - режим CFR для mp4, VFR для mkv). Тогда вам не нужно дублировать кадры с помощью фильтра fps. Хорошая идея с использованием setpts для пропуска секций без движения. Peter Cordes 9 лет назад 2
Кроме того, все эти фильтры 1 вход, 1 выход. В этом случае вам на самом деле не нужен фильтр_комплекс или именованные входы / выходы. Просто `ffmpeg in.mkv -vf" mpdecimate, setpts = 'N / (5 * TB)' -preset slow out.mkv` должен работать (вам не нужен -map, потому что ffmpeg отображает выходные данные вашего видеофильтра по умолчанию.) Peter Cordes 9 лет назад 1
@PeterCordes Спасибо за информацию. Я пытался удалить дублирующиеся кадры из снимка экрана веб-фильма (чертовски проприетарные плагины с DRM!). Я не мог понять, почему «mpdecimate» не работает для меня. Оказывается, он работал все время, но я использовал вывод mp4, а ffmpeg воссоздает дублирующиеся кадры! Я обратился к MKV, и результат идеально. Tobia 9 лет назад 0
Да, значение по умолчанию `-vsync` равно 2 для mkv, но что-то еще для mp4, из-за ошибки в угловом регистре для mp4. `-vsync 2` обычно работает с mp4, чтобы сделать вывод VFR. Peter Cordes 9 лет назад 0

Похожие вопросы