1

Я использую FFmpeg для извлечения ключевого кадра на 3-й минуте. Это означает, что это 3 * 60 * 25-й кадр (при условии 25 FPS). Теперь часто этот кадр не является ключевым кадром.

Я хочу извлечь кадр, ближайший к указанному выше кадру, но убедитесь, что это ключевой кадр. Это означает, что кадр может происходить за несколько секунд до или после третьей минуты видео.

Я смотрел везде без всякой удачи! Я делаю это на Linux, поэтому, если вы используете FFmpeg с чем-то специально установленным или в комплекте, дайте мне знать!

2 ответа2

4

Использование параметра -ss с фильтром select будет работать.

Что-то похожее:

ffmpeg -ss 180 -i yourvideo.mp4 -vf select="eq(pict_type\,I)" -vframes 1 thumbnails.jpeg
2

Если вы предполагаете, что ближайший I-кадр к 00:03:00 появляется до этой отметки времени, вам придется угадать, так как длина GOP (количество кадров между каждым I-кадром) не одинакова для каждое видео. Если вы знаете длину GOP, например, 125 кадров, то начните за 5 секунд до этого, например, в 00:02:55.

Обратите внимание, что это не должно быть фиксированной длины. Хорошие кодеры будут размещать I-кадр в кадрированных сценах, а не в фиксированных точках для достижения лучшего сжатия и надежности.

Итак, давайте сместим ввод на количество времени, которое мы рассчитали раньше, используя -itsoffset .

Мы указываем фильтр select чтобы получить только I-кадры, и -vframes чтобы получить только один кадр. Наконец, запишите это в файл .jpg .

ffmpeg -itsoffset -00:02:55 -i in.mp4 -filter:v select='eq(pict_type\,I)' -vframes 1 out.jpg

Я протестировал это с видео, в котором изначально был P-кадр, в 00:03:00, и после этого я получил 13-й кадр, который является началом новой сцены - I-кадра.

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