Come trasformiamo una parata a scatti in un movimento fluido

Quaderno di restauro · Interpolazione CrossFrame di FilmFix

FilmFix offre ai clienti la possibilità di utilizzare una tecnologia all’avanguardia per portare la vecchia pellicola nel XXI secolo! Siamo convinti che i risultati vi impressioneranno.

In sostanza, l’interpolazione prende un’immagine a scatti e la rende più fluida. Ci riusciamo “prendendo in prestito” una certa quantità di informazioni d’immagine da due fotogrammi successivi e inserendo in mezzo altri due fotogrammi appena creati. In questo modo otteniamo quattro fotogrammi a partire da quei due originali, e quindi un’esperienza visiva più scorrevole. Comincia quasi a sembrare video!

Ecco una spiegazione fotogramma per fotogramma del nostro approccio di interpolazione ×3. Vedremo le due sotto-varianti che creiamo: la tecnica incrociata che evita l’effetto di grana ribollente e il motivo per cui non lasciamo mai che l’interpolazione dipinga attraverso uno stacco.

Il filmato della parata in Double 8 ripreso a mano libera, qui sotto, è un caso di prova perfetto. La maggior parte delle pellicole in questo formato veniva girata a 16 fotogrammi al secondo (fps), ma questa bobina è stata quasi certamente girata più lentamente — più vicino a 14 fps. Girare a una frequenza di fotogrammi inferiore era noto come “undercranking” ed era una pratica comune fra gli appassionati di cinema amatoriale. Far funzionare la cinepresa sotto la sua velocità standard permetteva di allungare in più secondi di registrazione un costoso rullo di pellicola e, come effetto collaterale spesso trascurato, comportava una leggera sovraesposizione se non compensata. L’undercranking lasciava entrare più luce su ogni fotogramma, e infatti noterete che questa bobina della parata è leggermente sovraesposta. Tuttavia, riprodotta a 16 fps, sembra accelerata. Con l’interpolazione la riportiamo ai suoi reali 14 fps!

Nel suo stato originale a 14 fps, fra un fotogramma e l’altro viene campionato pochissimo movimento. I partecipanti alla parata avanzano a scatti ben visibili, le bandiere sobbalzano invece di ondeggiare, e una lenta panoramica sulla folla crea un effetto stroboscopico quasi da discoteca. È proprio qui che la nostra tecnica crea il tipo di filmato in cui l’interpolazione ×3 dimostra il suo valore!

Perché usiamo 42 fps, e non 50 o 60

Non interpoliamo verso un numero tondo standard televisivo; triplichiamo invece la vera frequenza di ripresa del filmato. Una bobina a 14 fps diventa 14 × 3 = 42 fps (una bobina a 16 fps arriverebbe a 48 e una a 18 fps a 54 fps). Moltiplicare la frequenza reale significa che ogni fotogramma originale conserva una posizione esatta e uniformemente distanziata, con due fotogrammi generati tra lui e il successivo — nessun ricampionamento, nessuna deriva, originali intatti.

Qui sotto c’è la pipeline reale che abbiamo usato per questa bobina, nell’ordine, con immagini estratte direttamente dalle cartelle di lavorazione. Le immagini fisse su cui basiamo l’interpolazione sono non ritagliate, a pieno fotogramma (cliccate su un’immagine per visualizzare l’overscan). Questo overscan mostra l’area dei fori di trascinamento e informazioni d’immagine aggiuntive lungo i lati — dettagli che favoriscono l’interpolazione. Questi file sono già stati corretti nel colore e stabilizzati, e sono file master 8 bit privi di compressione.

fotogramma master con overscan
fotogrammi master consecutivi — gli originali, intatti

I master. Il nostro punto di partenza conserva l’overscan originale della pellicola, i residui e la grana. Qui non viene modificato nulla; questi elementi arrivano nel montaggio finale esattamente come sono stati scansionati.

Esplorate la sequenza finale

Ogni terzo fotogramma è un master intatto; i due in mezzo non sono mai esistiti sulla pellicola. Avanzate con le frecce (tenete premuto per scorrere), cliccate sull’immagine per avanzare, oppure premete play per una lettura lenta a circa 8 fps.

MASTER · 000251

1 / 70

JS-viewer

100% · pixel reali — le tre finestre sul fotogramma sopra, pixel per pixel dal file originale. I riquadri numerati sul fotogramma indicano ogni finestra — trascinate un riquadro (oppure spostatevi dentro una finestra) per osservare qualsiasi punto dell’inquadratura. Li abbiamo posizionati sulle custodie rigide, sui bordi a movimento rapido (la mano e il braccio che compaiono da dietro il vestito) e sullo sfondo subito dietro di lei, dove un’interpolazione ingenua lascerebbe una “scia fantasma” dietro il movimento. Passate da un fotogramma all’altro e controllate — la grana si legge come grana, con molto meno trascinamento di quanto produrrebbe uno strumento video con “Optical Flow”. Il contrassegno oro = fotogramma reale su pellicola · ruggine = fotogramma intermedio generato.

01Due sotto-varianti da un solo fotogramma

estrazione → nitido · senza grana

Prima di calcolare qualsiasi movimento, ogni fotogramma master viene elaborato in due sotto-varianti pulite. Non sono file di consegna — sono un’impalcatura per la fase di interpolazione.

Nitido ha solo i residui rimossi: polvere, graffi e segni di giunta scompaiono, ma la grana della pellicola e il dettaglio fine restano pienamente presenti.

derivato da fotogramma master
Prima sotto-variante derivata dal fotogramma master: nitido · residui rimossi

Senza grana va un passo oltre e rimuove anche la grana, lasciando un’immagine liscia, leggermente più morbida, che conserva il contenuto della scena senza il suo rumore.

derivato da fotogramma master
Seconda sotto-variante derivata dal fotogramma master: senza grana · residui + grana rimossi. Notate che questa variante “senza grana” è ancora molto granulosa (stiamo ancora cercando il livello giusto).

Lo stesso fotogramma, due letture!

La prima variante (sopra) conserva ogni granello di dettaglio reale. La seconda variante (sotto) conserva movimento e contenuto ma elimina il rumore. La fase successiva mette queste due varianti una contro l’altra.

02Il trucco della variante incrociata

interpolare · mantenere la metà orientata al nitido

Questa è la parte di cui siamo discretamente orgogliosi. Invece di interpolare nitido-su-nitido (che ribolle) o senza-grana-su-senza-grana (che perde dettaglio), interpoliamo attraverso le due varianti — e lo facciamo due volte, in configurazioni opposte.

Per un risultato ×3 ci servono due nuovi fotogrammi tra ogni coppia di master: uno a un terzo del percorso, uno a due terzi. Ognuno viene generato da una coppia in cui l’estremità nitida è il master a cui si trova più vicino e l’estremità opposta è senza grana. Poiché un’estremità di ogni interpolazione non contiene grana, il modello non trova falsi movimenti del pulviscolo — ma il fotogramma mantenuto resta ancorato a un master nitido, così il dettaglio reale viene preservato.

una coppia di master · due fotogrammi intermedi, ciascuno orientato verso il master nitido più vicino

Da ogni passaggio scartiamo la metà che si trova più vicina all’estremità senza grana e conserviamo solo la metà orientata al nitido. Cucendo insieme le due metà conservate, ogni fotogramma intermedio mantiene dettaglio dove conta e stabilità della grana ovunque altrove — lungo l’intera sequenza, la grana si legge come grana invece di ribollire come una tempesta di neve.

un fotogramma che non è mai esistito sulla pellicola originale

Un fotogramma che non è mai stato girato. Generato tra due master, nitido dove il partecipante alla parata si muove, calmo dove vive la grana.

Rendere invisibile la giuntura

Gestire la grana da sola non basta del tutto. Un fotogramma generato può ancora tradirsi se porta più — o meno — dettaglio di bordo rispetto ai fotogrammi originali che lo circondano. Quando accade, ogni terzo fotogramma sembra “saltare” leggermente mentre l’immagine alterna ripresa e calcolo, un tremolio sottile lungo i bordi che l’occhio coglie anche quando ogni singolo fotogramma appare corretto da solo.

Il colpevole di solito è un’eccessiva nitidezza nella variante. Se si aumenta troppo la nitidezza, ogni bordo netto viene esagerato — e poiché la grana si trova proprio lungo quei bordi, la grana sembra strisciare e riposizionarsi attorno ad essi da un fotogramma al successivo. La soluzione è semplice: riduciamo la nitidezza della variante finché corrisponde al livello di dettaglio del master invece di superarlo. Quando i due si trovano allo stesso livello non c’è alcun bordo che possa spostarsi, i fotogrammi ⅓ e ⅔ si inseriscono senza una giuntura visibile e — come vedremo nelle fasi successive — l’intera sequenza diventa sufficientemente coerente da poter essere pulita come un tutt’uno.

03Dove l’interpolazione fallisce

Un modello sensibile al movimento interpola trovando dove ogni parte dell’immagine si è spostata fra due fotogrammi, poi disegna la posizione intermedia. Questo funziona abbastanza bene per il braccio di un partecipante o per un carro che passa. Ma fallisce in tre modi caratteristici.

1. Grana. La grana della pellicola è essenzialmente rumore casuale — un diverso disegno di puntinatura su ogni singolo fotogramma. Se si chiede al modello di interpolazione di seguire il movimento tra due fotogrammi granulosi, esso cerca diligentemente di associare puntino a puntino, inventando minuscoli “movimenti” incoerenti in tutta l’immagine. Il risultato è una grana ribollente: un artefatto simile a una tempesta di neve fatto di movimento inventato, che si spalma e striscia attraverso l’immagine; il suo flusso mutevole a volte ricorda uno stormo di uccelli o un banco di pesci che cambia direzione — così una porzione immobile di cielo o pavimentazione non resta mai davvero ferma. Questa specifica bobina della parata non è quella ideale per mostrarlo. Le riprese sono troppo brevi e contengono troppo movimento di macchina e troppi partecipanti che si muovono rapidamente. La grana ribollente è più facile da individuare in una ripresa più lunga con poco movimento di camera e una grande superficie uniforme come il cielo.

2. Aree rivelate da dietro un oggetto in movimento: quando qualcosa si muove, scopre una parte dell’immagine che nel fotogramma precedente non era visibile — il modello non dispone di informazioni precedenti da cui attingere, quindi spalma invece l’area appena esposta. Questo filmato della parata mostra perfettamente il problema. Concentrate lo sguardo sul muro e sul marciapiede dietro ai bambini con le bandiere che sfilano e vedrete come l’interpolazione standard crolla rapidamente. Il passaggio con optical flow aggiunge una scia sfocata, quasi fantasma, che segue il movimento dei bambini. Anche il nostro approccio con sotto-varianti incrociate comincia qui a cedere — ma regge molto meglio del filtro optical flow.

3. Interpolazione attraverso gli stacchi. Questa bobina della parata è una catena di riprese separate. A ogni montaggio, due fotogrammi vicini mostrano scene completamente non correlate. Un interpolatore che non sa dove si trovano gli stacchi interpreta quel salto come un unico movimento enorme e cerca di trasformare una ripresa nell’altra. Per alcuni fotogrammi, le due scene si sciolgono l’una nell’altra in una dissolvenza sporca che nessuno ha mai filmato. Potete osservarlo nel lettore di confronto: passate a “EDIUS optical flow” e riducete la velocità a ¼×, poi tenete d’occhio qualsiasi stacco. Il nostro passaggio CrossFrame rileva ogni stacco in anticipo e mantiene invece il fotogramma, cosicché ogni transizione resta uno stacco netto e pulito — esattamente come intendeva la pellicola! (la sezione 04 mostra come)

Riproduzione a metà velocità per cogliere più facilmente le differenze

A 1× i due lati durano lo stesso tempo reale, mentre i fotogrammi extra rendono il movimento più fluido. Non lo rallentano. Trascinate il cursore di separazione per passare da uno all’altro e osservate il muro e il marciapiede dietro ai partecipanti.






Prima · grezzo 14 fps
FilmFix · CrossFrame

Sorgente video non impostata. Nel codice, puntate ASSET_BASE all’URL pubblico della cartella web/ per caricare le clip.


0:00 / 1:06





Confronta con:



Separatore:



Il problema che aggiriamo con metodo. Se si segue il movimento tra due fotogrammi granulosi, la grana stessa viene letta come movimento — e striscia.

La soluzione in una riga

Come spiegato sopra: non interpolate mai tra due fotogrammi granulosi; fate sempre in modo che un’estremità di ogni interpolazione sia senza grana.

04STACCHI – eventi che il modello non può attraversare

rilevare ogni montaggio · sopprimere l’interpolazione

Una bobina di parata non è un’unica ripresa continua. È composta da decine di riprese separate. Per esempio, un campo largo della strada, un primo piano sulla banda, poi di nuovo la folla. A ogni nuova ripresa (stacco), due fotogrammi adiacenti mostrano scene completamente non correlate.

Per un interpolatore, quel divario appare come un movimento enorme e istantaneo, quindi cerca di “ammorbidirlo”, trasformando una ripresa nella successiva e lasciando un fotogramma sbavato e difettoso a ogni nuova inquadratura. Perciò, prima di interpolare, rileviamo ogni stacco nella bobina e impediamo al modello di disegnare attraverso di esso. In corrispondenza di uno stacco manteniamo semplicemente il fotogramma successivo invece di inventare una transizione. Il risultato è un montaggio netto e pulito, esattamente come voleva la pellicola.

La matematica dei fotogrammi, per i curiosi

Per N fotogrammi master con fattore ×3, la sequenza finale è di 3N − 2 fotogrammi. Ogni master, poi i suoi due intermedi generati, poi il master successivo. A 14 fps l’uscita arriva quindi a 42 fps. A uno stacco rilevato, quei due intermedi vengono sostituiti da un fermo immagine, così nulla si trasforma attraverso il montaggio.

quello che NON vedrete … osservate questa transizione sbavata

MASTER



1 / 4

05La migliore sorgente di partenza: un trasferimento con overscan

margini laterali extra in ingresso → interpolazione → ritaglio alla fine

C’è ancora un altro punto in cui l’interpolazione arriva al limite: il bordo del fotogramma. Un modello sensibile al movimento lavora associando ogni parte di un fotogramma al punto in cui atterra nel successivo. Al bordo, questa corrispondenza si rompe molto più rapidamente in un fotogramma “pulito” (un overscan ritagliato) — ciò che entra o esce dal campo non ha una controparte nel fotogramma vicino, perché in quel fotogramma semplicemente non c’è. Il modello è costretto a indovinare, e le sue supposizioni fanno sì che i pixel lungo il bordo si allunghino, si sbavino o ondeggino come se il margine dell’immagine fosse di gomma.

Il filmato a mano libera peggiora questo problema ovunque contemporaneamente. Ogni piccolo tremolio sposta l’intero fotogramma, così che a ogni singolo fotogramma nuovo contenuto entra da un bordo ed esce dall’altro — un continuo ricambio di pixel a cui il modello non riesce mai ad ancorarsi.

La cura è dare al modello più immagine di quella che il film finale mostrerà mai. Scansioniamo con overscan. L’acquisizione si estende oltre l’area d’immagine prevista, raccogliendo tutto ciò che la pellicola offre sia a sinistra sia a destra. Così un partecipante che scivola dentro da destra non appare dal nulla — il modello lo sta già seguendo nel margine prima che entri nell’immagine finale. Le supposizioni continuano a esserci, ma avvengono nel bordo sacrificabile, non nell’immagine che si conserva.

Perché il ritaglio arriva per ultimo

Il margine overscan resta nell’immagine durante ogni fase di lavorazione — interpolazione, assemblaggio, pulizia temporale finale — e viene ritagliato solo alla fine. Se lo si ritaglia prima, ogni fase successiva eredita un bordo nuovo e incline agli artefatti. Se lo si ritaglia per ultimo, il bordo del fotogramma finale non è mai stato davvero un bordo mentre si lavorava.

Un fotogramma con overscan (nessun ritaglio laterale in questa fase)

Più pellicola di quanta ne vedrete mai

La scansione si estende oltre l’immagine consegnata sui lati sinistro e destro. Gli artefatti di interpolazione si aggrappano al margine esterno — che non sopravvive mai al ritaglio finale.

06Un unico passaggio di pulizia su una sequenza coerente

assemblaggio → filtraggio finale · raggio temporale 4

Una volta rispettati gli stacchi, la bobina viene assemblata — originali e fotogrammi generati vengono intercalati in una clip continua — e facciamo un unico passaggio finale di restauro sull’insieme. Questo passaggio è possibile solo grazie al lavoro di corrispondenza precedente. Un filtro temporale valuta ogni fotogramma in rapporto ai suoi vicini; se fotogrammi ripresi e fotogrammi generati non coincidessero in nitidezza o grana, leggerebbe quella differenza come movimento e finirebbe per sbavare il dettaglio oppure rifiutarsi di pulire.

Poiché ora ogni fotogramma sembra appartenere alla stessa sequenza, possiamo spingere questo passaggio con decisione. Usiamo un ampio raggio temporale — impostazione 4 — combinando più fotogrammi vicini contemporaneamente per separare il dettaglio autentico dal rumore residuo e dai residui, in modo molto più aggressivo di quanto potrebbe tollerare la scansione originale incoerente. Qui la frequenza triplicata gioca a nostro favore: più immagini vicine che concordano, separazione più pulita tra segnale e rumore.

Questo passaggio finale è approfondito — tanto approfondito da lasciare l’immagine con un aspetto lievemente digitale. Perciò l’ultimissimo passaggio consiste nel restituirle una texture fine e uniforme da pellicola. Questo non serve solo a renderla visivamente corretta: un po’ di grana ripristinata fa apparire l’immagine più nitida e la tiene insieme nel movimento, dando all’occhio bordi stabili a cui agganciarsi da un fotogramma all’altro. Più sotto spieghiamo meglio che cos’è — e che cosa non è — questa texture.

07Guardatelo con i vostri occhi

prima · dopo

Ecco la stessa clip della parata, intatta da un lato e interpolata ×3 dall’altro. Guardate le gambe dei partecipanti e la panoramica sulla folla. Lo scatto che viene letto come “vecchia pellicola” scompare, mentre la grana continua ad apparire come pellicola.

Tutti e tre insieme — originale 14 fps (sopra), optical flow 42 fps
(in basso a sinistra), FilmFix CrossFrame 42 fps (in basso a destra). Stesso istante,
stessa velocità.

08Ciò che non può correggere: il mosso già impresso

limiti

C’è un problema che nessuna quantità di interpolazione può annullare. Quando è la cinepresa stessa a tremare — non il soggetto a muoversi, ma l’intero fotogramma a sobbalzare nella mano dell’operatore — ogni fotogramma colpito viene acquisito con un mosso direttamente impresso nell’immagine. Quel mosso non è grana o rumore appoggiato sopra l’immagine; è l’immagine, registrata morbida nell’istante in cui l’otturatore era aperto.

La stabilizzazione aiuta il filmato a stare fermo, ma si limita a riposizionare i fotogrammi. Non può rendere nitido un fotogramma che era già sfocato al momento della ripresa. Così una sequenza traballante stabilizzata può risultare fermissima e continuare comunque ad alternare fotogrammi incisivi e fotogrammi morbidi e sbavati. Il mosso lampeggia dentro e fuori seguendo il ritmo con cui la camera ha tremato.

L’interpolazione può perfino peggiorare la situazione. Il modello presume che i fotogrammi su cui lavora siano obiettivi puliti fra cui muoversi. Se gli si dà un fotogramma sfocato, porterà fedelmente quella sfocatura nei nuovi fotogrammi che genera, a volte rafforzando la sbavatura invece di diluirla. Quando una ripresa contiene un forte mosso già incorporato, possiamo rendere il movimento più fluido ma non recuperare la nitidezza che la cinepresa non ha mai catturato. È importante saperlo fin dall’inizio.

09Quello che non faremo

grana artificiale = artificio

Vale la pena essere precisi riguardo a quella texture finale, perché le pratiche variano fra i laboratori di trasferimento. Alcuni applicano una grana pesante per mascherare gli artefatti dell’interpolazione o per simulare una risoluzione che una scansione morbida non ha mai realmente catturato. Noi questo non lo facciamo! La nostra texture è leggera e uniforme. Migliora la tenuta dell’immagine nel movimento, ma non inventa mai dettagli che la vostra pellicola non possiede e non copre mai una giuntura tra un fotogramma ripreso e uno generato. Dove un fotogramma appare nitido, il dettaglio sottostante è reale.

Nessuno dei singoli passaggi qui descritti è esotico preso da solo. Ciò che rende insolito questo approccio è la combinazione: far corrispondere le varianti affinché i fotogrammi generati non lascino alcuna giuntura, aggirare la grana interpolando attraverso una coppia nitido / senza grana, trattare ogni stacco come un confine che il modello non può attraversare e solo allora pulire la bobina assemblata come un unico pezzo coerente. Parti semplici, montate insieme — ed è proprio questa combinazione che rende davvero possibile un’interpolazione pulita della pellicola d’archivio granulosa!

Perché costa quello che costa

Tutto questo non è un filtro a un clic. Ogni stacco della bobina viene verificato a mano prima dell’interpolazione, così il modello non può mai sbavare attraverso un montaggio. Ogni fotogramma passa più volte nella pipeline, con riduzione dei residui e riduzione della grana per costruire le due sotto-varianti, poi con l’interpolazione incrociata vera e propria — e infine con una pulizia temporale finale sull’intera sequenza assemblata. È un lavoro deliberato, stratificato — e il prezzo riflette proprio quel lavoro e quel tempo di elaborazione.

Che cosa ha reso possibile tutto questo?

FilmFix ha sviluppato un proprio software chiamato CrossFrame. Maggiori dettagli su ciò che offre questo software proprietario arriveranno presto.

· · ·

Un grande grazie al nostro cliente svizzero Steven Ganter, che ci ha dato il permesso di usare questo filmato — e che, dopo aver discusso a lungo del processo e di dove si trovi oggi l’IA (ha anche lui una formazione nella programmazione), mi ha incalzato con un semplice: “Offrite l’interpolazione?” Ora sì!

Un grazie anche a Tom Huebner per il suo contributo a questo blog.