2010-04-27 10:05:36 +0000 2010-04-27 10:05:36 +0000
72
72

Как извлекать один кадр из видео каждые N секунд к изображению?

Как я могу преобразовать видеофайл в последовательность изображений, например, один кадр каждые N секунд. Может ли это сделать mplayer или ffmpeg? Я использовал MPlayer, чтобы захватить скриншоты вручную, но я хотел бы автоматизировать это для длительного видео.

Ответы (8)

73
73
73
2014-03-15 09:47:20 +0000

Это очень просто с ffmpeg, и он can выводит по одному кадру каждые N секунд без дополнительного скриптинга. Для экспорта в виде последовательности изображений просто используйте myimage_%04d.png или аналогичный вывод. Бит %0xd преобразуется в нулевое целое число x цифр длиной - в приведенном мною примере выводится

  • myimage_0000.png,
  • myimage_0001.png,
  • myimage_0002.png Вы можете использовать множество форматов неподвижных изображений, png, jpeg, tga, что угодно (полный список смотрите в разделе ffmpeg -formats).

Хорошо, теперь мы знаем, как экспортировать фильм как последовательность изображений, но скажем, что мы не хотим экспортировать каждый отдельный кадр?

Хитрость заключается в том, чтобы просто изменить частоту кадров на выходе на то, что мы хотим, используя опцию -r n, где n - это количество кадров в секунду. 1 кадр в секунду будет -r 1, один кадр каждые четыре секунды будет -r 0.25, один кадр каждые десять секунд будет -r 0.1 и так далее.

Таким образом, чтобы сложить все вместе, так будет выглядеть сохранение одного кадра input.mov каждые четыре секунды до output_0000.png, output_0001.png и т.д.:

ffmpeg -i input.mov -r 0.25 output_%04d.png

Обратите внимание, что опция -r 0.25 идет после части -i input.mov, потому что она контролирует частоту смены кадров выхода. Если вы поставите его перед, то он будет обрабатывать входной файл так, как если бы он имел указанную частоту кадров.

Измените %xd на столько цифр, сколько вам нужно, например, если команда создаст более 10,000 кадров, измените %04d на %05d. Это также работает для входных файлов, которые являются последовательностью изображений. Читайте подробнее здесь .

Пользователи Windows : В командной строке используйте %

пример: ffmpeg -i inputFile.mp4 -r 1 outputFile_%02d.png В CMD и BAT сценариях используйте %%

пример: ffmpeg -i inputFile.mp4 -r 1 outputFile %%02d.png

Так что удвойте %% в сценариях, и один % в интерактивной командной строке. Ошибка в любой из этих ситуаций спровоцирует ошибку.

28
28
28
2010-04-28 10:08:07 +0000
mplayer -vo jpeg -sstep 5 file.avi

каждые 5 секунд будет сохранять кадр в формате jpeg.

Однако, он не останавливается в конце файла, а продолжает создавать копии последнего кадра. Чтобы избежать этого, найдите длительность видео в секундах, с помощью другого плеера или с помощью mplayer:

mplayer -vo null -ao null -frames 0 -identify file.avi

ищите строку типа “ID_LENGTH=147.00”.

Вычитайте 2 из длины, и используйте это значение для опции -endpos. Например, для видео продолжительностью 147 секунд:

mplayer -vo jpeg -sstep 5 -endpos 145 file.avi
11
11
11
2010-04-27 11:41:07 +0000

С помощью ffmpeg вы можете сделать следующее:

ffmpeg -ss 4 -i input.avi -s 320x240 -frames:v 1 output.jpg

Эта команда генерирует JPG эскиз размером 320×240 на 4-й секунде в видео. Поместите это в сценарий, который изменяет время и имя файла, и все готово.

Дополнительная информация: Создавайте эскизы каждые X секунд видео

8
8
8
2013-06-04 08:15:55 +0000

Если вам нужен своего рода контактный лист, и если вы работаете с Unix-подобной ОС, вы можете использовать этот сложный сценарий, называемый по адресу Video Contact Sheet *NIX , короткий vcs .

В фоновом режиме он также использует ffmpeg (по умолчанию) или mplayer, следовательно, может работать с большим количеством видеоформатов. Он автоматизирует процесс захвата фотографий из фильма и компоновки их в изображение с некоторым заголовком и нижним колонтитулом. Вы можете выбрать, например, сколько снимков вы хотите или разницу во времени между ними.

Для интервала в 10 минут, вызов такой:

vcs -i 10m input.avi

Проверьте полный список опций командной строки на наличие других настроек.

Вот пример листа контактов, взятого с главной страницы :

7
7
7
2012-09-11 03:17:14 +0000

С помощью VLC 1.1.0 и выше можно использовать фильтр сценического видео:

vlc C:\video\to\process.mp4 --rate=1 --video-filter=scene --vout=dummy --start-time=10 --stop-time=11 --scene-format=png --scene-ratio=24 --scene-prefix=snap --scene-path=C:\path\for\snapshots\ vlc://quit

Вышеуказанное сохраняет 1 из каждых 24 кадров (–scene-ratio=24), начиная с 00:00:10 и заканчивая 00:00:11.

Только что протестировано и подтверждено, что это работает с VLC 2.0.3 на свежей установке Windows 8 (у меня нет дополнительных видеоплагинов или программного обеспечения).

Полная документация: _COPY9_to\create_thumbnails

2
2
2
2010-04-27 10:13:07 +0000

VirtualDub может сделать это для вас

File -> Export -> Image sequence

1
1
1
2010-04-27 16:22:46 +0000

Вы также можете попробовать это

из командной строки VLC…

vlc “C:\YOUR\file\path\file.avi” -V изображение –image-out-prefix=capname –image-out-ratio=60

file. avi - видео, из которого вы хотите сделать снимок, capname - префикс сохранённых изображений, возможно, вы захотите поиграть с коэффициентом (60 означает, что захватывается 1 из 60 изображений) Вы можете добавить дополнительные команды, например –image-out-format jpeg сохранит ваши колпачки как jpegs вместо pngs, –snapshot-path - путь снимка позволяет вам выбрать, где сохранить колпачки. Источник выше

1
1
1
2011-11-30 22:06:24 +0000

Вы можете пропускать кадры в VirtualDub. Просто воспользуйтесь опцией “Decimate By”, расположенной в меню Video -> Частота кадров. Например, если вы установили “Падение на 100”, то используйте Файл -> Экспорт -> Последовательность кадров, она сохранит только каждый 100-й кадр.

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

8
12
3
5
4