Извлечь первый не черный ключевой кадр с FFMPEG - PullRequest
4 голосов
/ 12 марта 2012

Я пытаюсь извлечь миниатюру изображения из ключевых кадров видео с помощью ffmpeg, моя командная строка:

ffmpeg -i video.mp4 -vframes 1 -s 200x200 -vf select="eq(pict_type\,PICT_TYPE_I)" -vsync 0 -f image2 video.jpg

Но ключевой кадр, который он извлекает, полностью черный (видео начинается с черной рамки, я думаю) ... есть ли способ автоматически извлечь первый не черный ключевой кадр из видео, без поиска определенного времени (мне нужно управлять несколькими видео различной продолжительности)?

Спасибо

Ответы [ 2 ]

1 голос
/ 04 сентября 2013

Я не могу придумать решение, использующее только ffmpeg.Но если вы извлечете первые несколько ключевых кадров (например, включив -vframes 20), они могут быть проанализированы с помощью ImageMagic.При уменьшении изображения до одного оттенка серого будет выбрано среднее значение серого на изображении.Командная строка, такая как

convert avatar.jpeg -colors 1 -type grayscale -format '%c' histogram:info:

, которая будет выдавать результат, подобный

16384: ( 80, 80, 80) #505050 gray(80)

(я использовал картинку аватара Симона в качестве примера.) Последнее число наиболее интересно для вашего случая.Он выражает, насколько темное изображение, с 0 для идеального черного и 255 для чистого белого.Сценарий sed может легко извлечь его

convert ... | sed 's/^.*(\(.*\))$/\1/'

. Смешать его с некоторыми сценариями оболочки, чтобы найти первое изображение со значением серого, превышающим заданный порог, и использовать его в качестве эскиза.

0 голосов
/ 14 марта 2012

С опцией thumbnail = num_frame вы можете выбирать, когда извлекаете кадр, но я не знаю, возможно ли извлечь первый небалковый ключевой кадр. http://ffmpeg.org/ffmpeg.html#thumbnail

...