Definir significativo é difícil, mas se você quiser fazer com que as miniaturas N ocupem todo o arquivo de vídeo, é isso que uso para gerar miniaturas na produção com conteúdo enviado pelo usuário.
Pseudo-código
for X in 1..N
T = integer( (X - 0.5) * D / N )
run 'ffmpeg -ss <T> -i <movie>
-vf select="eq(pict_type\,I)" -vframes 1 image<X>.jpg'
Onde:
- D - duração do vídeo lida de
ffmpeg -i <movie>
sozinho ou ffprobe
que tem um bom escritor de saída JSON btw
- N - número total de miniaturas que você deseja
- X - número da miniatura, de 1 a N
- T - ponto no tempo para a miniatura
Simplesmente, o texto acima anota o quadro-chave central de cada partição do filme.
Por exemplo. se o filme tiver 300s de comprimento e você quiser 3 miniaturas, será necessário um quadro-chave após 50s, 150s e 250s. Para 5 miniaturas, seria 30s, 90s, 150s, 210s, 270s. Você pode ajustar N dependendo da duração do filme D, por exemplo Um filme de 5 minutos terá 3 miniaturas, mas mais de 1 hora terá 20 miniaturas.
Desempenho
Cada chamada do comando ffmpeg
acima leva uma fração de segundo (!) para ~ 1GB H.264. Isso ocorre porque ele salta instantaneamente para <time>
position (mente -ss
before -i
) e obtém o primeiro quadro chave que é praticamente o JPEG completo. Não há tempo perdido para renderizar o filme para corresponder à posição exata do tempo.
Pós-processamento
Você pode misturar acima com scale
ou qualquer outro método de redimensionamento. Você também pode remover quadros de cores sólidas ou tentar misturá-los com outros filtros, como thumbnail
.