>> Tecnologia Eletrônica >  >> Câmeras >> Câmeras de Vídeo

Guia de Screenshots no FFmpeg: Extraia Frames de Vídeo como Profissional

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.

Pré-requisitos

  • FFmpeg no PATH (`ffmpeg -version` funciona).
  • Arquivo de entrada: `input.mp4` (substitua pelo seu).

1. Frame Único em Timestamp Exato (Mais Comum)

# 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 
  • `-ss` antes de `-i` = busca rápida (precisão de keyframe, ~1-2 seg fora).
  • `-ss` depois de `-i` = busca precisa (frame perfeito, mais lento em vídeos longos).
  • `-frames:v 1` = extrai exatamente 1 frame.
  • `-q:v 2` = qualidade JPEG (1=melhor, 31=pior). 2–5 é visualmente lossless.

2. Frame Único por Número do Frame

# 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).

3. Thumbnail em Porcentagem / Melhor Frame Representativo

# 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 

4. Múltiplos Frames: Intervalo / Taxa de Frames

# 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" 

5. Sprite Sheet / Contact Sheet (Uma Imagem, Muitos Frames)

# 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 

6. PNG Alta Qualidade (Lossless) / Resolução Específica

# 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 

7. Extraia Todos Keyframes (Apenas I-frames) em Lote

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.

Dicas Profissionais

  • Espaço de Cor: Adicione `-pix_fmt yuvj420p` para JPEG (evita shift de cor em alguns players).
  • HDR → SDR Tonemap: `ffmpeg -i hdr.mp4 -vf "zscale=t=linear:npl=100,format=gbrpf32le,zscale=p=bt709,tonemap=hable,zscale=t=bt709:m=bt709:r=tv,format=yuv420p" -frames:v 1 sdr.jpg`
  • Aceleração Hardware: `-hwaccel cuda -hwaccel_output_format cuda` (decode) + `-c:v h264_nvenc` (encode) — mas para extração de frame único, CPU geralmente é mais rápido devido overhead de init.