FFmpeg é o canivete suíço para extração programática de frames. Seja uma thumbnail perfeita, uma sprite sheet, ou 1 frame por segundo para timelapse, estes comandos testados em batalha cobrem todos cenários.
# Busca rápida (decodifica do keyframe perto de 00:01:30.500) - use para velocidade ffmpeg -ss 00:01:30.500 -i input.mp4 -frames:v 1 -q:v 2 output.jpg # Busca precisa (decodifica do início até 00:01:30.500) - use para precisão ffmpeg -i input.mp4 -ss 00:01:30.500 -frames:v 1 -q:v 2 output.jpg
# Frame 1500 (0-indexed) ffmpeg -i input.mp4 -vf "select='eq(n,1500)'" -frames:v 1 -q:v 2 frame_1500.png
Use `select='gte(n,1500)*lt(n,1510)'` para faixa (frames 1500–1509).
# Frame do meio (bom para thumbnail genérico) ffmpeg -i input.mp4 -vf "thumbnail" -frames:v 1 thumb.jpg # No 10% da duração ffmpeg -i input.mp4 -vf "select='gte(t,0.1*duration)'" -frames:v 1 thumb_10pct.jpg
# 1 frame a cada 5 segundos (1/5 fps) ffmpeg -i input.mp4 -vf "fps=1/5" -q:v 2 "frame_%04d.jpg" # Saída: frame_0001.jpg, frame_0002.jpg... # 1 frame por segundo ffmpeg -i input.mp4 -vf "fps=1" "frame_%04d.jpg" # A cada 10º frame (decimate) ffmpeg -i input.mp4 -vf "select='not(mod(n,10))'" -vsync vfr "frame_%04d.jpg"
# Grid 10x10, 1 frame por 1% do vídeo ffmpeg -i input.mp4 -vf "fps=1/100,scale=320:-1,tile=10x10" -q:v 2 sprite.jpg
# PNG lossless, escalado para largura 1920 (mantém aspecto) ffmpeg -i input.mp4 -ss 00:00:10 -vf "scale=1920:-1" -frames:v 1 output.png # Força 1920x1080 exato (letterbox/pillarbox) ffmpeg -i input.mp4 -ss 10 -vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2" -frames:v 1 out.png
ffmpeg -i input.mp4 -vf "select='eq(pict_type,I)'" -vsync vfr -q:v 2 "keyframe_%04d.jpg"
Útil para detecção de cena / marcadores de capítulo.
Tecnologia Eletrônica © [www.351231.com]