
Скриншот: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/1001
NTSC 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