3

Мотивация: Я хотел бы искать кадр, а затем делать качественные и точные скриншоты (изображения) из видео.

Длина видео составляет 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 ответ1

3

Фильтр 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"

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