Как я могу преобразовать видеофайл в последовательность изображений, например, один кадр каждые N секунд. Может ли mplayer или ffmpeg сделать это? Я использовал MPlayer для захвата скриншотов вручную, но я хотел бы автоматизировать это для длинного видео.
71
Ответы:
С ffmpeg это очень просто, и он может выводить один кадр каждые 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
т.д .:Обратите внимание , что
-r 0.25
опция идет после на-i input.mov
части, потому что это контролировать частоту кадров вывода . Если вы поместите его перед входом, он будет обрабатывать входной файл так, как если бы он имел указанную частоту кадров.Изменение% к XD однако многие цифры вам нужно, например , если команда будет создавать более 10000 кадров изменить
%04d
к%05d
. Это также работает для входных файлов, которые представляют собой последовательность изображений. Узнайте больше здесь .Пользователи Windows : в командной строке используйте
%
пример:
ffmpeg -i inputFile.mp4 -r 1 outputFile_%02d.png
В CMD и BAT Scripts используют
%%
пример:
ffmpeg -i inputFile.mp4 -r 1 outputFile %%02d.png
Так что дважды
%%
в сценариях и один%
в интерактивной командной строке. Ошибка в любой ситуации приведет к ошибке.источник
-r
если я хочу экспортировать каждый кадр? Если я знаю FPS видео, думаю, я это введу, но что если я не знаю?jpegs
для этого, если вы не увереныpng
, что это то, что вы хотите. В моем случаеjpeg
s составляли около 50 КБ каждый, аpng
s около 2 МБ.-q:v 1
здесь очень полезная опция, как в superuser.com/questions/318845/…будет сохранять кадр в формате JPEG каждые 5 секунд.
Однако, он не остановится в конце файла, он продолжит создавать копии последнего кадра. Чтобы избежать этого, найдите продолжительность видео в секундах, используя другой плеер или с помощью mplayer:
и найдите строку вроде "ID_LENGTH = 147.00".
Вычтите 2 из длины и используйте это значение для
-endpos
опции. Например, для 147-секундного видео:источник
mpv --vo=image --sstep=5 movie.mkv
прекрасно работает без вышеупомянутой ошибки ( mpv - это форк mplayer) с использованием mpv 0.27.0 на Debian.С помощью
ffmpeg
вы можете сделать следующее:Эта команда генерирует миниатюру JPG размером 320 × 240 на 4-й секунде видео. Поместите это в скрипт, который меняет время и имя файла, и все готово.
Дополнительная информация: создание миниатюрного изображения каждые X секунд видео
источник
-ss position
флагом, чтобы искать дальше в файле?-ss Seek to given time position in seconds. hh:mm:ss[.xxx] syntax is also supported
-ss
перед,-i
чтобы поиск происходил до декодирования входного видео. это должно ускорить это. источникЕсли вам нужен своего рода контактный лист и вы работаете с Unix-подобной ОС, вы можете использовать этот сложный сценарий, называемый в виде Video Contact Sheet * NIX , short vcs .
В фоновом режиме он также использует
ffmpeg
(по умолчанию) илиmplayer
, следовательно, может обрабатывать множество видеоформатов. Он автоматизирует процесс захвата неподвижных изображений из фильма и объединения их в изображение с некоторым верхним и нижним колонтитулом. Вы можете выбрать, например, сколько снимков вы хотите, или, альтернативно, разницу во времени между ними.В течение 10 минут вызов выглядит так:
Проверьте полный список параметров командной строки для некоторых других настроек.
Вот пример контактного листа, взятого с домашней страницы :
источник
С VLC 1.1.0 и выше, вы можете использовать видео фильтр сцены:
Вышеуказанное сохраняет 1 из каждых 24 кадров (--scene-ratio = 24), начиная с 00:00:10 и заканчивая в 00:00:11.
Только что проверил и подтвердил, что это работает с VLC 2.0.3 на новой установке Windows 8 (у меня нет дополнительных видео плагинов или программного обеспечения).
Полная документация: http://wiki.videolan.org/How_to_create_thumbnails
источник
VirtualDub может сделать это для вас
File
->Export
->Image sequence
источник
Вы также можете попробовать это
Источник выше
источник
Вы можете пропустить кадры в VirtualDub. Просто используйте опцию «Decimate By», расположенную в меню «Видео -> Частота кадров». Например, если вы установите «Decimate By 100», затем используйте File -> Export -> последовательность изображений, он будет сохранять только каждый сотый кадр.
источник