Film To Avi: Dalla Pellicola al Video

Ultimo Aggiornamento 6 Marzo 2014

Per ulteriori Approfondimenti : FilmToAviDettagli.
- Versione SoftWare corrente 2.5.2

FilmToAvi DownLoad

Funzionamento del Programma

Se avete letto l'articolo che riguarda la creazione di una maschera per acquisire fotogrammi: maschera per scanner con uno scanner, ora siete sul punto di aver bisogno di un SW che faccia il lavoro forse ancora più noioso della cattura di spezzoni di pellicola, cioè l'estrazione per ogni spezzone di pellicola scannerizzata, dei singoli fotogrammi, creando una sequenza di immagini numerate da dare in pasto ai più comuni programmi di montaggio digitale.

Vi ricordo infatti che tali programmi "vedono" una sequenza di immagini, come se fosse un vero file AVI non compresso.

Il programma che vi propongo, di cui l'immagine sottostante rappresenta la maschera principale durante la fase di elaborazione, e il soggetto inquadrato il sottoscritto una quarantina di anni fa, è al momento in versione 2.4, anche se alcune delle immagini che seguono sono state tratte dalla versione 1.1.

 

Film To Avi: START

 

 

Il Sw che potete scaricare gratuitamente è stato realizzato in DOT.NET, quindi per poter funzionare necessita del FrameWork 1.1 (o superiore) generalmente già presente nei S.O. windows più recenti, ma che in ogni caso è scaricabile gratuitamente dal sito della Microsoft qui:

http://www.microsoft.com/downloads/details.aspx?FamilyID=262d25e3-f589-4842-8157-034d1e7cf3a3&DisplayLang=it

Il vantaggio di averlo scritto con questo linguaggio e il modo con cui è stato sviluppato, ha permesso di non richiedere ulteriori librerie esterne, che avrebbero richiesto un programma di istallazione.

Questo eseguibile invece non viene istallato, quindi non sono possibili conflitti con altri programmi già istallati. Per lanciarlo è infatti sufficiente scaricarlo e "unzipparlo" dove si desidera. Un doppio click sul file e verrà automaticamente lanciato.

Ma come funziona?

L'idea nasce dalla pigrizia di voler recuperare i fotogrammi dagli spezzoni di pellicola scannerizzata tutto in automatico.

Perchè infatti preoccuparci di fare qualcosa che il computer può fare per noi?

Partendo dal funzionamento meccanico della cinepresa, che apre l'ottoratore nel momento che il dentino si trova in corrispondenza di un punto prefissato, si può affermare che la posizione del fotogramma e quello del dentino sono strettamente correlati.

Questa correlazione sia verticale che orizzontale può variare da cinepresa a cinepresa, ma entro tolleranze che comunque possiamo modificare a piacimento, partendo dal fatto che una sola pellicola, sicuramente impressa con la stessa cinepresa, le coordinate del dentino e quello del fotogramma restano uguali per tutto il film.

Sono partito dall'idea che catturare super 8, Regular 8 (Normal 8) o 16 mm cambi poco, basta aggiornare le coordinate che comunque vengono fornite con valori di default aggiornabili per la massima precisione.

Film To Avi: Parametri Configurazione

Come si vede in figura ho immaginato una situazione in cui la pellicola è disposta orizzontalmente con i dentini sopra.

La versione attuale del SW non permette di modificare tale vincolo.

Al momento in figura si vede un esempio di un fotogramma Regular 8 in cui sono segnati con due crocette i riferimenti del dentino e del fotogramma. Entrambe sono poste nell'angolo a sinistra in alto e se si vuole "aggiustare" le distanze indicate con le lettere A e B occorre modificare i valori che sulla maschera (è solo un esempio) sono posti rispettivamente a 290 e 180 centesimi di millimetro (cioè 2,9 e 1,8 mm).

Ho preferito lavorare con misure di lunghezzainvece di pixel perchè se il vostro scanner non arriva a 4800 dpi, oppure usate valori diversi durante la scannerizzazione, le misure vengono automaticamente ricalcolate nei corretti punti.

Se fate due conti vi accorgete che a 4800 dpi corrispondono circa 189 punti per millimetro. Se potete vi consiglio 4800 dpi perchè una risoluzione maggiore risulta inutile per il passaggio in video, minore vi perdete un po di definizione. Se infatti il fotogramma è largo poco meno di 5 mm, il video finale diventa largo poco più di 900 punti sufficienti anche per un piccolo ritaglio.

In Super 8 o in 16 mm, le cose cambiano poco, se non i valori che sono sensibilmente diversi.

Film To Avi: Super8

Come si può notare il super 8 fornisce un fotogramma più grande.

I campi "from" e "To" servono per dire al programma, dove cercare i dentini e nell'esempio gli dico di cercarli a 8 decimi dal bordo in alto della pellicola in modo perfettamente orizzontale. Nel caso l'immagine sia molto obliqua, posso impostare il campo "To" con un valore diverso. Il programma effetterebbe in questo caso una scansione obliqua, ma in genere questi due valori è corretto impostarli allo stesso valore. Anche se l'immagine fosse infatti leggermente obliqua, il programma individuerebbe correttamente i fotogrammi in funzione del dentino trovato.

Dalla versione 2.4 è stato inttrodotto anche il campo "Step". Questo valore serve per indicare al programma che dopo aver individuato un dentino e quindi il relativo fotogramma, di saltare la scnsione di enne centesimi di millimetro.

Film To Avi: Super8

Questa possibilità è utile per più motivi. Impedisce al programma di cercare inutili nuovi dentini immediatamente vicini a quello appena individuato, ma soprattutto nel caso ci fossero particolari formati di pellicola, in cui ad ogni dentino non corrisponde un fotogramma, ma c'è una situazione in cui un fotogramma è legato (ad esempio) solo ai dentini pari, di poter saltare il dentino non utile ad individuare il fotogramma corrispondente.

Prima di procedere occorre settare i valori di default delle directory da usare e del nome dei file delle immagini delle varie scansioni numerate.

Film To Avi: Configurazione File

Dalla versione 2.xx è possibile creare le directory di lavoro e impostare il nome dei file di ingresso e uscita delle immagini JPEG di lavoro.

I nomi dei file di ingresso hanno un prefisso e un numero come normalmente generati in automatico dagli scanner.

Nel campo "From" mettete il primo spezzone di pellicola da catturare nel secondo l'ultima, ma aggiungendo comunque gli eventuali zeri non significativi. Cioè se ad esempio il vostro scanner crea file del tipo

Immag0001, Immag0002, ... Immag5000 e voi volete catturare solo quelli che vanno dal numero 11 al 13 dovete scrivere:

nel campo Prefix: "Immag"

nel campo From: "11"

nel campo To: "0013"

Il file di log lo potete mettere e chiamare come volete. Ricordatevi che deve essere comunque scelta una directory su cui avete i permessi di scrittura.

Con il tasto "Save" potete rendere definitive le vostre modifiche al prossimo avvio del pogramma.

 

Dopo che avete copiato gli spezzoni di pellicola scannerizzati (o quelli che avete scaricato di esempio) nella directory di input, conviene effettuare qualche prova di taratura. Vi ricordo che l'esempio allegato è in formato Regular 8.

Mettete nei campi i valori corretti (se usate l'esempio scaricato dovete mettere nei tre campi rispettivamente i valori: "img", "95" e "096".

Tornate quindi sul tab dei parametri di confiigurazione selezionando regular 8 poi premere il tasto test.

Il programma vi porterà direttamente sul primo tab e comincerà a leggere il file (img095) cercando i dentini e recuperando il fotogramma legato. Se tale fotogramma esce dai limiti il relativo dentino verrà ignorato e procederà oltre.

Alla fine vi comparirà a tutto schermo lo spezzone elaborato in cui compariranno i dentini identificati da un rettangolo blu e i fotogrammi contornati da un bordo giallo. Avrete anche la possibilità di salvare lo spezzone elaborato.

In ogni caso le immagini di input non saranno modificate.

 

Film To Avi: Scansione Super8

In figura un esempio fatto su un formato super 8.

Nell'immagine (che è ridotta della metà rispetto all'originale e tagliata di parecchi fotogrammi per esigenze di spazio) si notano delle linee artificiali create dal programma (quelle rosse all'interno dei rettangoli blu sono poco definite perchè l'immagine allegata è compressa, ma nella realtà sono definite come le altre.

Volendo spiegare come funziona il programma FilmToAvi, e in particolare il riconoscimento dei dentini, comincerò dalla linea verdina che attraversa i dentini stessi

Tale linea è quella che attraverso il campo "from" (posizione y dell'immagine da voi specificata sulla maschera di configurazione) scansiona orizzontalmente lo spezzone di filmato da sinistra a destra.

Dunque ad un primo esame sembrerebbe banale riconoscere un dentino (che è bianco), in realtà all'atto pratico la cosa non è stupidissima.
Infatti il primo problema è che i bordi di una scannerizzazione non sono certo netti, si passa da un quasi nero ad un quasi bianco, ma non necessariamente in modo uniforme, quindi come fare il sw?

Un'idea era quella di cominciare a contare quanti punti bianchi si trovano a parire dal primo.

Ma se poi in mezzo si fosse trovato un capello finito per caso li in mezzo?

Viiceversa se c'è un graffio sulla pellicola?

Oppure avrei potuto fare più scansioni orizzontali... ma quante...?

Insomma alla fine l'idea è stata quella di cercarmi il perimetro del dentino...

Praticamente funziona così....
Si "cammina" orizzontalmente fino a trovare un pixel abbastanza bianco da poter essere identificato come inizio area dentino.

Nelle prime versioni del programma questa soglia era fissa all'80%, poi questo valore è stato spostato sul tab <Advanced> per poter permettere a chiunque di cambiarlo a piacimento, nel caso ci siano pellicole in cui l'area dei dentini è molto chiara.

Quando la scansione trova un punto bianco parte una sottoprocedura che cerca il perimetro; Per sommi casi questa procedura funziona in questo modo:

Partendo dal pixel bianco trovato cerco a Nord se c'è un punto bianco ci vado altrimenti provo a Nord Est e così via...
In pratica cerco preferibilmente di rimanere attaccato al bordo cercando di girare in senso antiorario ma procedendo in senso orario...
Ogni volta che il tratto è trovato lo coloro di rosso...(il tratto rosso lo notate nel dentino colorato di blu...)

Quando il percorso è chiuso (o quasi) lo "rettangolizzo" con un bel blu che mi serve per escludere questo percorso da ulteriori analisi e memorizzo le coordinate della posizione in alto a sinistra
La sottoprocedura continua alla ricerca del prossimo dentino fino a raggiungere l'estrema destra dello spezzone di pellicola.

Terminato controllo che i dentini abbiamo un area sufficiente a non essere confusi con graffi o scritte sulla pellicola, estraggo i singoli frame come clone dell'immagine principale e dimensioni e posizione secondo quanto messo nella maschera di configurazione.

L'immagine che si presenta è quella che voi guardate quando andate in test, per vedere se tutto funziona.

Nel funzionamento normale di estrazione, quello che succede è simile solo che dispongo di due immagini, una (cosiddetta) di lavoro dove ci faccio i quadrettozzi blu e una pulita che mi serve per recuperare i fotogrammi singoli.

In sostanza uso sempre l'immagine di lavoro, poi quando salvo i vari fotogrammi uso l'immagine pulita.
Infatti terminato di scansionare la pellicola alla ricerca di dentini, ho un vettore di coordinate x y che mi indicano la posizione del dentino. (angolo alto a sinistra).

Mi si potrebbe obiettare che in realtà visto che la pellicola ha dentini equidistanti basterebbe trovare un unico dentino, gli altri basterebbe calcolarli in funzione della pellicola scannerizzata. In realtà cercandoli tutti ho il vantaggio che se la pellicola fosse stata scannerizzata leggermente storta, i fotogrammi vengono cmq presi correttamente.

Certo si poteva anche prendere il primo e l'ultimo e trovare gli altri per interpolazione, magari nelle successive release verrà presa in considerazione questa idea.

In realtà l'interpolazione potrebbe servire per rimediare nel caso alcuni dentini siano danneggiati o slabrati... al momento infatti per come funziona il programma il relativo fotogramma viene preso in maniera scorretta.

L'unica soluzione al momento è usare photoshop o programmi simili e "riparare" il dentino difettoso....

Con una prossima release del prodotto, si potrebbe pensare di "aggiustare" artificialmente qualche dentino difettoso...

Tornando al nostro vettore, cioè alla nostra lista della spesa che indica dove sono tutti i dentini trovati, me la scorro e salvo il pezzo di immagine secondo le dimensioni e coordinate che avete messo sulla maschera di configurazione. Uso un contatore globale che mi tiene il numero di frame salvati che viene incrementato ad ogni salvataggio.

Terminato di recuperare l'ultimo fotogramma associato all'ultimo spezzone di pellicola, un altro contatore mi dice il nome del successivo file di pellicola. Se non ci fosse (perchè magari uno mi è saltato durante la scannerizzazione) intercetto l'errore lo scrivo nel file di LOG (che potete sempre consultare per vedere che cosa sta facendo il programma) e passa allo spezzone successivo, ripetendo il procedimento.

La numerazione dei frame parte sempre dall'ultimo salvataggio corretto eseguito in modo che alla fine del programma li avete tutti numerati senza buchi, indipendentemente da eventali buchi presenti sugli spezzoni di pellicola in ingresso.

Terminato l'ultimo spezzone (ricordate lo avevate messo nel campo "To") il programma si chiude da solo.

I dettagli sono sempre presenti sul file di log, anche se ad ogni avvio il file viene sovrascritto, quindi se vi serve salvatelo da un'altra parte o cambiategli nome.

 

Esempi Scansioni Pellicola

Per un esempio qui: Normal 8 ci sono due spezzoni di pellicola scannerizzate a 4800 DPI con cui fare prove. Sono due spezzoni di una pellicola Normal 8 ciascuna composta da 18 fotogrammi.
I due fotogrammi sono numerati rispettivamente in img095, img096.
Creiamo una directory chiamata (ad esempio C:\FilmToAvi) e copiamoci dentro il file del programma FilmToAvi.exe, poi creiamo altre due directory per metterci i file di input (ovvero quelli ottenuti dallo scanner) e quella di output, chiamandole (ad esempio) rispettivamente:

 "C:\FilmToAvi\Input"
 "C:\FilmToAvi\Output"

Nella prima ci copiamo i due spezzoni di esempio che abbiamo scaricato: img095.jpg e img096.jpg.
Ora lanciamo il programma e andiamo sul Tab [File Config] e impostare le corrette directory nelle Path di input e di output. Sul campo prefix dovrete invece impostare "img" ovvero il prefisso dei file scaricati e su "from" e "to" rispettvamente "95" e "096".

Nel Tab [Parameter Config] va invece imposto "Regular 8" con i dati e le distanze preimpostate. Premendo il bottone [Test] si potrà vedere se tutto funziona bene, ovvero il programma cercherà i dentini e catturerà i fotogrammi associati. E' probabile che un messaggio finale indicherà che uno dei fotogrammi non è stato "catturato2 perché esce dallo spezzone di pellicola acquisita.

Al termine viene visualizzato lo spezzone di pellicola con i dentini individuati e i fotogrammi catturati bordati in giallo. Nel caso si volessero fare nuove prove cambiando i parametri nel tab [Parameter Config] si potrà vedere come sia molto flessibile spostarci o modificare l'area del fotogramma che si vuole acquisire.

La creazione dei singoli fotogrammi nella directory di output, basta andare sul Tab [Start] e premere l'omonimo bottone. se si vuole ottenere un avi (non compresso) è sufficiente su menu File scegliere [Create AVI].

Il fimato normal 8 da cui sono stati ripresi gli spezzoni di pellicola ha circa 45 anni.

 

Esempi Video prodotti

 A beneficio di chi volesse verificare la qualità o meno del video prodotto è possibile scaricare due esempi realizzati partendo da pellicola Super 8 e Normal 8.

 I file sono in mpeg creati con premiere dopo aver importato i singoli frame creati dal Sw FilmToAvi.

  File di esempio per pellicola Normal 8 risalente al 1965

  File di esempio per pellicola Super 8 risalente al 1975

 I due video sono stati creando un progetto con un Sw di montaggio video, in progressivo e per rendere più corretta la valutazione non sono state apportate alcuna correzione colore e nessun altro effetto come stabilizzatori di immagine e simili.
 Sono stati solamente apportati dei rallenty al 75% dato che gli originali sono a 18ft/sec e il video è un 24p.

 

La Versione 1.1

Le immagini del programma (se non diversamente indicato), si riferiscono alla versione 1.0 Beta Test. Già con la versione 1.1 si ottenevano sensibili vantaggi.

I principali sono:

  • Miglioramento del riconoscimento dei dentini
  • Maggiore possibilità di personalizzare i parametri di scansione
  • Lettura del file di log direttamente a programma
  • Maggiore Robustezza del SW

Per il punto uno, si è cercato di ottenere un sistema capace di entrare meno in crisi nel caso di presenza di polvere o graffi, anche se si raccomanda di essere rigorosi con la pulizia del piano dello scanner vista la alta risoluzione a cui si lavora.

Presenza di un tab in più in cui è possibile modificare parametri avanzati relativi al riconoscimento dei dentini della pellicola.

Attivazione del tab che permette di visualizzare il file di log.

La Versione 2.2

La principale innovazione di questa versione è stata la possibilità di poter direttamente costruire un file avi non compresso.

Con questa versione infatti non è possibile selezionare un codec, anche perchè molti non sarebbero utilizzabili visto il formato non standard del video (altezza/larghezza). Inoltre anche se le dimensioni di un file avi non compresso sono molto grandi, è anche vero che la durata di solito è limitata a pochi minuti.

Ringraziando per l'attenzione vi ricordo che sono disponibile per ulteriori chiarimenti e sono gradite proposte per la nuova release.

Download del SW 2.2 qui : Film To Avi. L'uso del SW è Free.

La Versione 2.3

La principale innovazione di questa versione, è stata quella di aver introdotto un sistema autocorrettore di errore che permette in caso di dentini slabrati o rotti, di non mettere in crisi il programma, che corregge la posizione grazie ad un sistema che ricalcola la posizione corretta rispetto alla posizione relativa dei dentini vicini.

Inoltre sono stati esternalizzati alcuni parametri di scansione della pellicola in modo che i più esperti possano fare delle ottimizzazione dei parametri in funzione del tipo e della qualità dei propri film scannerizzati.

Un completo Help in linea spiega tutti i dettagli.

Download del SW 2.3 qui : Film To Avi. L'uso del SW è Free.

La Versione 2.4

La principale innovazione di questa versione, è stata l'introduzione di un nuovo formato di pellicola, la 9,5 mm detta anche Pathè Baby il cui contributo è stato fornito da un affezionato lettore: Massimo Renzi e la possibilità di inserire valori negativi nei campi <Frame Position> in modo da poter leggere altre tipologie di pellicola, come appunto il formato 9,5

Inoltre è stato introdotto un altro parametro Step all'interno di Scan Y Position in modo da ottimizzare il modo in cui i dentini vengono intercettati.

Un completo Help in linea spiega tutti i dettagli.

Download del SW 2.4 qui : Download FilmToAvi. L'uso del SW è Free.

Di seguito alcuni approfondimenti, che riguardano il modo con cui il SW funziona, anche se non sono indispensabili per il normale uso.

La Versione 2.5

La principale innovazione di questa versione, è stata la modifica del sistema autocorrettore d'errore, passato utilizzando lo scarto medio lineare allo scarto quadratico medio che è risultato più efficace e preciso. Sono stati inoltre rimossi i parametri che servivano per tarare il sistema autocorrettore, ritenuti non più necessari.

Su suggerimento di un utente è stata fatta una piccola modifica correttiva sul SW. Ora i singoli fotogrammi estratti non contengono la "Colorazione blu" che serviva al programma per identificare il dentino della pellicola e che talvolta trasbordava sul fotogramma.

Download del SW 2.5.2 qui : Download FilmToAvi. L'uso del SW è Free.

Approfondimenti: Pagina Successiva >>>

 

A solo scopo di sperimentazione, disponendo di una traccia audio ottica su una pellicola 16mm, è nata l'idea di provare ad estrarre l'audio da tale filmato. Di seguito il dettaglio di questa sperimentazione: Film To Wav