2016-03-10 4 views
1

Я пытаюсь извлечь фиксированное количество кадров равномерно из кучи видео (скажем, 50 кадров от каждого видео, всего 10 000 видеороликов).Как извлечь фиксированное количество кадров с помощью ffmpeg?

Поскольку продолжительность варьируется, я рассчитал идеальный выходной сигнал fps для каждого видео и беру его как параметр для извлечения ffmpeg, но не смог получить необходимое количество кадров.

Кто-нибудь знает, как извлечь фиксированное количество кадров с помощью ffmpeg или других инструментов? Благодаря!

ответ

3

Вы можете использовать фильтр миниатюр. Он выбирает один репрезентативный кадр из каждого набора из n кадров (по умолчанию 100)

Итак, если ваше исходное видео длится 10 минут и со скоростью 25 кадров в секунду, то оно имеет всего 15000 кадров. Таким образом, чтобы выбрать 50 кадров, вы должны использовать

ffmpeg -i input.mp4 -vf thumbnail=300,setpts=N/TB -r 1 -vframes 50 inputframes%03d.png 

Это выбирает один репрезентативный кадр из каждого набора из 300 кадров, так что 50 кадров из 15000. Несмотря на название, эскиз просто выбирает кадры, не сокращать их использование миниатюр. setpts и r установлены во избежание дублирования или отбрасывания кадров. Значение vframes установлено так, чтобы выводилось не более 50 изображений.

Если вам нужно выбрать строго каждый nth кадр, используйте

ffmpeg -i input.mp4 -vf select='not(mod(n\,300))',setpts=N/TB -r 1 -vframes 50 inputframes%03d.png 
+0

Это действительно решить эту проблему, но извлеченные кадры были ужасно повреждены. Что-то не так с параметрами? –

+0

Проблема исправлена. Я до сих пор вычислял идеальный выходной сигнал fps для каждого видео, но на этот раз обходил его и устанавливал -frames 50. Спасибо за вашу помощь! –

+0

Мои команды не определяют или не требуют «идеального выхода fps», а параметры по умолчанию для PNG должны «ужасно повреждать» выход. Какую команду вы использовали? – Mulvya

Смежные вопросы