Извлечение кадра (в формате изображения) ровно каждую минуту (или секунду) из видео (по ffmpeg)
Мотивация: Я хотел бы найти кадр, а затем сделать высококачественные и точные скриншоты (изображения) из видео.
Длина видео составляет 00:48:43.71 и 23,98 к / с (мы можем думать, что это 24 к / с, не так ли?).
Со ссылкой на эту веб-страницу: создавайте уменьшенное изображение каждые X секунд видео
Я написал несколько команд, которые захватывают кадр каждый час, каждую минуту и каждую секунду.
После уничтожения изображений скриншоты фактически делаются из получаса, полминуты и полсекунды. Вы поймете в ближайшее время.
Например, команда захватывать кадр каждую минуту, это фактически извлечение кадра за полминуты, что означает 00:00:30, 00:01:30, 00:02:30 и так далее. Вот почему я называю имя файла следующим образом:
ffmpeg -i "video.mp4" -start_number 0 -vf fps=1/60 "B 00-%02d-30.000.png"
(добавление префикса "B" предотвращает перезапись различными командами.)
Например, чтобы захватить кадр каждую секунду с 00:03:00 до 00:04:00, рекомендуется:
ffmpeg -i "video.mp4" -start_number 0 -vf fps=1 -ss 00:03:00 -to 00:04:00 "C 00-03-%02d.500.png"
Чтобы проверить их, мы можем извлечь все кадры с 00:03:29 до 00:03:31:
ffmpeg -copyts -ss 00:03:29 -i "video.mp4" -start_number 0 -to 00:03:31 "D 00-03-29.%03d.png"
Мы можем проверить идентичность следующих файлов изображений:
D 00:03:29.012.png
идентично C 00:03:29.500.png
,
D 00:03:29.024.png
идентично B 00:03:30.000.png
,
D 00:03:29.036.png
идентично C 00:03:30.500.png
,
Это мои выводы из проб и ошибок сегодня утром. Вот мой вопрос:
Давайте возьмем в качестве примера "извлечение кадра ровно каждую минуту", как мы можем получить / что является командой для получения кадров 00:00:00.000, 00:00:01.000, 00:00:02.000 и так далее?
Я только что слышал о ffmpeg
этим утром. Я до сих пор не знаю, что -copyts
значит (после прочтения документации) и когда мне нужно поставить -ss position
до -i
и когда поставить его на выходной части. Поэтому, пожалуйста , исправьте меня, если я использую неправильные команды.
1 ответ
Фильтр fps предназначен для умного удаления / дублирования кадров в соответствии с выходным fps на основе входного fps. Если вы попросите его выводить один кадр каждую минуту, он выберет один кадр в центре окна 00:00-01:00 и отбросит все остальные, поэтому вы получаете кадры в 00:30, 01:30, так далее..
Рассматривали ли вы сделать сценарий bat/bash, который делает это?
for i in 0..50
ffmpeg -ss %i:oo -i input.mp4 -vframes 1 out-%i.png
Вы также можете сделать следующее, если хотите получить скриншоты в 01:00, 02:00 [..] вместо 00:30, 01:30 [..]:
ffmpeg -ss 00:30 -i input.mp4 -start_number 0 -vf fps=1/60 "B 00-%02d-00.000.png"