>> Tecnologia elettronica >  >> Telecamere >> Action cam

Guida Screenshot FFmpeg: Estrai Fotogrammi da Video come un Professionista

FFmpeg è il coltellino svizzero per l'estrazione programmata di fotogrammi. Che tu abbia bisogno di un'unica anteprima perfetta, uno sprite sheet, o 1 fotogramma al secondo per una time-lapse, questi comandi collaudati coprono ogni scenario.

Prerequisiti

1. Singolo Fotogramma a Timestamp Esatto (Più Comune)

# Seek veloce (decodifica da keyframe vicino a 00:01:30.500) - usa per velocità ffmpeg -ss 00:01:30.500 -i input.mp4 -frames:v 1 -q:v 2 output.jpg # Seek accurato (decodifica dall'inizio fino a 00:01:30.500) - usa per precisione ffmpeg -i input.mp4 -ss 00:01:30.500 -frames:v 1 -q:v 2 output.jpg 

2. Singolo Fotogramma per Numero di Fotogramma

# Fotogramma 1500 (indicizzato da 0) ffmpeg -i input.mp4 -vf "select='eq(n,1500)'" -frames:v 1 -q:v 2 frame_1500.png 

Usa `select='gte(n,1500)*lt(n,1510)'` per un intervallo (fotogrammi 1500–1509).

3. Anteprima a Percentuale / Miglior Fotogramma Rappresentativo

# Fotogramma centrale (buono per anteprima generica) ffmpeg -i input.mp4 -vf "thumbnail" -frames:v 1 thumb.jpg # Al 10% della durata ffmpeg -i input.mp4 -vf "select='gte(t,0.1*duration)'" -frames:v 1 thumb_10pct.jpg 

4. Molti Fotogrammi: Intervallo / Frequenza Fotogrammi

# 1 fotogramma ogni 5 secondi (1/5 fps) ffmpeg -i input.mp4 -vf "fps=1/5" -q:v 2 "frame_%04d.jpg" # Output: frame_0001.jpg, frame_0002.jpg... # 1 fotogramma al secondo ffmpeg -i input.mp4 -vf "fps=1" "frame_%04d.jpg" # Ogni 10° fotogramma (decimate) ffmpeg -i input.mp4 -vf "select='not(mod(n,10))'" -vsync vfr "frame_%04d.jpg" 

5. Sprite Sheet / Contact Sheet (Un'Immagine, Molti Fotogrammi)

# griglia 10x10, 1 fotogramma ogni 1% del video ffmpeg -i input.mp4 -vf "fps=1/100,scale=320:-1,tile=10x10" -q:v 2 sprite.jpg 

6. PNG Alta Qualità (Senza Perdita) / Risoluzione Specifica

# PNG senza perdita, scalato a larghezza 1920 (mantieni proporzioni) ffmpeg -i input.mp4 -ss 00:00:10 -vf "scale=1920:-1" -frames:v 1 output.png # Forza esattamente 1920x1080 (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. Estrazione in Batch Solo Keyframe (I-frame)

ffmpeg -i input.mp4 -vf "select='eq(pict_type,I)'" -vsync vfr -q:v 2 "keyframe_%04d.jpg" 

Utile per rilevamento scene / marcatori capitolo.

Consigli Professionali

  • Spazio Colore: Aggiungi `-pix_fmt yuvj420p` per JPEG (evita viraggio colore su alcuni lettori).
  • 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`
  • Accelerazione Hardware: `-hwaccel cuda -hwaccel_output_format cuda` (decodifica) + `-c:v h264_nvenc` (codifica) — ma per estrazione singolo fotogramma, la CPU è solitamente più veloce a causa dell'overhead di inizializzazione.