Articolo
Estrarre fotogrammi video per miniature e contact sheet
Un video è una sequenza di immagini fisse. Estrarne una fornisce una miniatura, una copertina o un contact sheet. Il risultato è più nitido e prevedibile quando si capisce come un codec video memorizza i suoi fotogrammi e quali momenti vale la pena catturare.
Fotogrammi e frequenza dei fotogrammi
Un file video è una sequenza di immagini fisse visualizzate abbastanza velocemente da creare l'illusione del movimento. Il numero di immagini mostrate al secondo è il frame rate, espresso in fps. I valori comuni sono 24 fps per il cinema, 25 fps per la trasmissione PAL, 30 fps per il video web e 60 fps per i filmati di giochi. A 24 fps, un film di due ore contiene circa 172.800 fotogrammi individuali. Ogni fotogramma corrisponde a un singolo momento nel tempo; estrarne uno congela quel momento come immagine autonoma. Il frame rate determina anche quanti fotogrammi si ottengono per secondo di filmato quando si estrae un batch: a 30 fps, estrarre ogni fotogramma da un minuto di video dà 1.800 immagini, il che è spesso molto più di quanto necessario. Estrarre a un frame rate più basso, o ogni Nº fotogramma con gli strumenti che lo supportano, è un modo pratico per ridurre quel volume coprendo comunque l'intera durata.

Keyframe e fotogrammi interpolati
I codec video moderni non memorizzano ogni fotogramma come un'immagine completa. Usano tre tipi di fotogramma per risparmiare spazio. Un I-frame, chiamato anche keyframe, è un'immagine completa e autonoma. Un P-frame memorizza solo i pixel cambiati dall'ultimo I-frame o P-frame. Un B-frame memorizza le modifiche relative a un fotogramma precedente e uno futuro, richiedendo fotogrammi su entrambi i lati per ricostruirlo. Poiché un P-frame o B-frame è incompleto da solo, decodificarne uno richiede i fotogrammi di riferimento circostanti. Se quei fotogrammi di riferimento contengono motion blur o una transizione, l'immagine ricostruita eredita quel blur. Un I-frame, al contrario, viene decodificato indipendentemente. È sempre nitido perché non prende nulla dai vicini. Quando si estrae un fotogramma da usare come miniatura, atterrare su un I-frame dà il risultato più pulito possibile. La maggior parte dei codec posiziona gli I-frame ai tagli di scena, che sono naturalmente punti di partenza nitidi.
Scegliere il momento giusto
Anche un I-frame ben decodificato può fare una miniatura scarsa se il momento catturato è poco attraente. Diversi fattori riducono la qualità della miniatura. Il motion blur si verifica quando la fotocamera o il soggetto si muove rapidamente durante l'esposizione del fotogramma; la sfocatura risultante rende un fotogramma morbido anche se la decodifica era pulita. I fotogrammi di transizione catturati a metà dissoluzione o a metà dissolvenza contengono due immagini sovrapposte e raramente funzionano come immagini autonome. I fotogrammi sottoesposti o sovraesposti, comuni all'inizio di una scena prima che l'esposizione automatica si stabilizzi, perdono dettagli nelle ombre o nelle alte luci. I migliori fotogrammi per le miniature provengono da momenti di azione o espressione chiari, buona illuminazione e una fotocamera stabile. Scorrere il video con un player che mostra i timestamp esatti consente di identificare quei momenti prima di estrarli. Un fotogramma che sembra buono in pausa su un player apparirà generalmente buono come esportazione fissa.

Esportazione: risoluzione, formato e ogni Nº fotogramma
Quando si estrae un fotogramma, l'immagine esportata dovrebbe corrispondere alla risoluzione nativa del video. Ingrandirla introduce artefatti di interpolazione; ridurla scarta pixel che potrebbero essere utili. Un video 1080p produce immagini 1920x1080 pixel e un video 4K produce 3840x2160. Per il formato, PNG preserva ogni pixel esattamente ed è la scelta giusta quando si ha bisogno della massima nitidezza per l'editing o ulteriori ridimensionamenti. JPEG è più piccolo e va bene per la visualizzazione o la condivisione, ma introduce artefatti di compressione attorno ai bordi netti. Se si sta costruendo un contact sheet, una griglia di piccoli fotogrammi rappresentativi che coprono l'intera durata, estrarre a un frame rate fisso anziché prelevare ogni fotogramma è l'approccio standard: richiedere 1 fotogramma al secondo da una sorgente a 30 fps dà un'immagine per ogni secondo di filmato, mentre un tasso più alto come 5 o 10 fps dà un insieme più denso per un'ispezione ravvicinata. Il tasso esatto dipende da quanti dettagli sono necessari rispetto a quante immagini si vogliono gestire.
Farlo localmente con video-extract-frames
Lo strumento video-extract-frames su Sunasty decodifica il video interamente nel browser usando FFmpeg compilato in WebAssembly. Si rilascia un file, si sceglie un frame rate da 1 a 30 fotogrammi al secondo, si seleziona PNG o JPEG e lo strumento decodifica i fotogrammi a quel tasso nella memoria del browser e offre i risultati come download separati, con un limite di 300 fotogrammi per esecuzione. Il file video non lascia mai il dispositivo. Nessun byte viene inviato a un server in nessun momento durante il processo. Questo è importante per i filmati contenenti contenuti personali o sensibili: una registrazione familiare, un'intervista o footage grezzo prima del montaggio. Il browser carica il video in un file system virtuale in RAM, esegue la decodifica FFmpeg e restituisce le immagini. Il compromesso è che la decodifica viene eseguita in software sulla CPU piuttosto che da hardware dedicato, quindi un video lungo ad alta risoluzione richiede più tempo rispetto a un'applicazione nativa. Per estrarre una manciata di fotogrammi o produrre un contact sheet da una clip breve, la velocità è pratica.
Strumenti citati in questo articolo
- Estrai fotogrammi videoEstrai fotogrammi fissi da un video come immagini PNG o JPG direttamente nel tuo browser. Nessun upload.
- Taglia videoTaglia un video a un intervallo inizio/fine direttamente nel tuo browser. Copia rapida dello stream o ricodifica precisa. Nessun upload.
- Video in GIFConverti un clip video in una GIF animata direttamente nel tuo browser. Nessun upload.
Domande frequenti
Perché il fotogramma estratto appare sfocato?
La causa più comune è atterrare su un P-frame o B-frame durante un momento di movimento. Questi fotogrammi memorizzano differenze piuttosto che immagini complete e il motion blur nel filmato sorgente si trasferisce nella decodifica. Provare a estrarre il P-frame o I-frame più vicino, che corrisponde a un taglio di scena o a un keyframe periodico, per un risultato più nitido.
Dovrei esportare i fotogrammi come PNG o JPEG?
PNG se si prevede di modificare il fotogramma, ingrandirlo o usarlo in un contesto dove gli artefatti di compressione sarebbero visibili. JPEG se si ha bisogno di un file più piccolo per la condivisione rapida o l'anteprima e la leggera riduzione della qualità è accettabile. Per le miniature che appaiono a una dimensione fissa piccola, JPEG con un'impostazione di qualità ragionevole è di solito adeguato.
Come si crea un contact sheet da un video?
Scegli un frame rate abbastanza basso da darti un numero gestibile di fotogrammi, piuttosto che un singolo timestamp. Per una clip di due minuti, 1 fotogramma al secondo dà circa 120 fotogrammi, un numero denso a sufficienza per scegliere una buona griglia; l'output è comunque limitato a 300 fotogrammi per esecuzione. Oggi non esiste un tasso più basso di 1 fps, quindi per una griglia più diradata, estrai a 1 fps e conserva solo i fotogrammi che vuoi per la griglia finale.