Создавайте изображение каждые XX секунд видео

Создавайте изображение каждые XX секунд видео

Скриншот:FilmStrip

Я пыталсяffmpeg -i video.mkv -vf fps=1 out%d.png

Но он генерирует одно за другим изображения. Мне нужны все миниатюры в одно изображение. как на скриншоте выше.

решение1

введите описание изображения здесь

ffmpeg -i input -filter_complex \
"select='not(mod(n,30))',scale=120:-1,tile=layout=3x2" \
-vframes 1 -q:v 2 output.jpg
  • выбиратьодин кадр каждые 30 секунд
  • шкалакаждый кадр к меньшему размеру (альтернативно вы можете масштабировать после тайлирования)
  • плиткакаждый кадр в одно изображение. Размер сетки по умолчанию — 6x5, поэтому вам, возможно, придется настроить его в layoutзависимости от того, сколько изображений вы хотите отобразить.

Процесс может занять некоторое время в зависимости от продолжительности и формата введенных данных.

решение2

вы можете использовать что-то вроде

ffmpeg -i video.mkv -filter:v "select=not(mod(n\,10)),setpts=N/((25)*TB)" -qscale:v 2 frame%03d.jpg
  • контролирует select, какие кадры вы захватываете (в данном случае один из каждых 10)
  • управляет setpsчастотой кадров и зависит от источника - 25для видео PAL или 30000/1001NTSC
  • qscaleуправляет качеством (масштабом квантования) выходных кадров от 2 (наилучшее) до 31 (худшее)

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

Затем вам нужно будет объединить изображения в единый актив, используя такой инструмент, какImageMagick

montage -background "transparent" -depth 8 -type TrueColorMatte frame??.jpg \
    -geometry 50x50 -tile 10x10 -matte -transparent "transparent" \
    -type TrueColorMatte -depth 8 allframes.jpg

Связанный контент