11

Я пытаюсь извлечь "ровно 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 ответа3

19

Выберите 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 и т.д.

4

Наиболее важным аспектом в вашем вопросе является тот факт, что видео использует 29,97 кадров в секунду, а не 30. Пески 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 в вашем случае. Я лично не мог установить / попробовать это все же.

0

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

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

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

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

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

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

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