Извлечение "одного из каждых 10 кадров" в видео с использованием VLC или FFmpeg

Я пытаюсь извлечь "ровно 1 кадр из каждых 10" кадров видео (т.е. извлечь 1, оставить 9, затем повторить) для научных целей. Видео имеет 105 кадров, 3,5 секунды, 29,97 кадров в секунду (h.264, .mov, производства Nikon D3100).

Я загрузил его здесь.

VLC

Ниже команда должна выдавать 10 кадров, но она выдает только 6 изображений. Я пробовал разные соотношения сцен, и ни один из них не давал правильное количество кадров (даже близко не к правильному).

vlc 1.mov --video-filter=scene --vout=dummy --scene-ratio=10 --scene-prefix=img- --scene-path=. vlc://quit

Кто-нибудь, пожалуйста, скажите мне, в чем проблема?

FFmpeg

У FFmpeg, похоже, нет команды именно для моей цели. Приведенная ниже команда извлекает 3 кадра из каждой секунды, но, поскольку FPS не равен 30 (а точнее 2,97), это не даст для меня правильных результатов.

Кроме того, даже FFmpeg не выдает правильное количество кадров даже этой командой. Для 3,5 секунд видео я ожидаю максимум 10 кадров, но получаю 12 кадров!

ffmpeg -i 1.mov -y -an -sameq  -r 3 -f image2 -vcodec mjpeg %03d.jpg 

Как я могу добиться того, чего хочу?

3 ответа

Решение

Выберите 1 кадр из каждых 10 кадров

Вы можете использовать select видео фильтр в ffmpeg сделать это:

ffmpeg -i input.mov -vf "select=not(mod(n\,10))" -vsync vfr -q:v 2 img_%03d.jpg
  • Для вывода JPG вы можете варьировать качество с -q:v, Эффективный диапазон составляет от 2 (наилучшее качество) до 31 (худшее качество). Вам не нужна эта опция, если вы хотите вместо этого выводить в PNG.

  • Это будет выводить img_001.jpg, img_002.jpg, img_003.jpg, так далее.

Наиболее важным аспектом в вашем вопросе является тот факт, что видео использует 29,97 кадров в секунду, а не 30. Pesky NTSC.

В любом случае, я думаю, что будет проще всего извлечь каждый кадр, а затем удалить те, которые вам не нужны:

ffmpeg -i 1.mov -y -f image2 -c:v mjpeg %03d.jpg

Затем удалите те, которые вам не нужны. Поскольку каждый десятый кадр будет заканчиваться 1.jpg Мы можем просто взять все остальные...

find . -maxdepth 1 -not -iname "*1.jpg"

... и как только вы убедитесь, что это те, которые вы хотите удалить:

find . -maxdepth 1 -not -iname "*1.jpg" -exec rm '{}' \;

Если вы можете использовать mencoder можно попробовать framestep вариант, как объяснено в документации, как framestep=10 в твоем случае. Я лично не мог установить / попробовать это все же.

Если бы вы сначала конвертировали видео в серию необработанных изображений rgb24 или rgb32, возможно, тогда вы могли бы получить правильное количество кадров, поскольку в оригинальной форме, кажется, есть необычные типы кадров, которые могут вообще не быть изображениями???

В оригинальных лазерных дисках все видео состояло из серии изображений с отдельными номерами кадров от 1 до 100000 или более, и, таким образом, это действительно правильный способ установить базовую линию для будущих преобразований или манипуляций.

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

Сначала вы должны извлечь любой звук в виде волнового файла, чтобы полностью не потерять звук. Кажется, что FFMPEG помещает идентификационную информацию в каждое извлеченное изображение, потому что если вы попытаетесь объединить изображения из только что извлеченных и смешать другие изображения из других источников с таким же расширением, ffmpeg будет игнорировать изображения, которые вы пытались вставить в середину всего,

С форматом лазерного диска частота кадров просто определяется тем, какую частоту вы представляете последовательным изображениям, и никак не контролируется самими изображениями.

FFMPEG может извлечь урок из науки вместо искусства для правильной обработки и отображения изображений любого рода. Или, возможно, сама индустрия AV. Индустрия действительно нуждается в улучшении возможностей оборудования и использовании необработанных данных, которые требуют много памяти / хранилища. Ничто не сравнится с необработанными данными для точности и аккуратности.

Другие вопросы по тегам