![]() |
|
|||||||||||||
| |
|
|
|
|
|
|
||||||||
| |
|
|||||||||||||
|
Fai da Te FilmToAvi: Il programma che recupera i fotogrammi di un film su pellicola
Ultimo Aggiornamento 28 Settembre 2010 Se avete letto l'articolo che riguarda la creazione di una maschera per acquisire fotogrammi 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.3, anche se le immagini che seguono sono state tratte dalla versione 1.1.
Il Sw che potete scaricare qui è 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: 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.
Come si vede in figura ho immaginato una situazione in cui la pellicola è disposta orizzontalmente con i dentini sopra. Questa versione 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.
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 della pellicola e volendo potrei dirgli di cercarli con una nuova scansione (o con più scansioni) fino al valore indicato con "To". Il programma effetterebbe in guesto caso più scansioni fino a raggiungere questo valore (il passo è fissato ad un decimo di millimetro). Prima di procedere occorre settare i valori di default delle directory da usare e del nome dei file delle immagini delle varie scansioni numerate.
Questa versione del programma essendo un semplice Beta Test non permette di creare le directory che non ci sono e neppure di selezionarle tramite navigazione. Per prima cose createvi quindi due directory di lavoro per i file di ingresso e di uscita dei frame; poi scrivetele nei due campi path Input e Output ricordandovi di terminarle con un contro slash "\". 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" Se non vi piace il metodo datemi un'altra idea che lametterò in pratica con la nuova release del prodotto. Il file di log lo potete mettere e chiamare come volete. 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.
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. 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ì.... Al momento ho messo questa soglia all'80%, poi questo valore lo sposterò (sulla maschera di configurazione) per poter permettere a chiunque di cambiarlo a piacimento. 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...
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 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. 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.
Per un esempio qui
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.
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.
La Versione 1.1 Le immagini del programma si riferiscono alla versione 1.0 Beta Test, mentre è già in linea la versione 1.1 che offre sensibili vantaggi. I principali sono:
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 è 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 : FilmToAvi. 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 : FilmToAvi. L'uso del SW è Free.
In Domande/Risposte alcune domade fatte da utenti che hanno provato questo sistema.
|
|
|||||||||||||
| |
||||||||||||||
| |
||||||||||||||
| |
||||||||||||||
| |
||||||||||||||
| |
||||||||||||||
| |
||||||||||||||
| |
||||||||||||||
| |
||||||||||||||
| |
||||||||||||||
| |
||||||||||||||
| |
|
|
|
|
|
|
|
|
|
|||||