Time lapse astronomici con GNU/Linux e una DSLR Canon 20DA (parte prima)

Astronomia Fotografia Informatica

In questo articolo mostro come ho realizzato il mio primo video time lapse (che vedete qui sotto) con l'aiuto di Gianni Passalacqua dell'AIDA di Ragusa. Di solito questi video sono realizzati con hardware dedicato e soprattutto con software impegnativo e costoso, esistente solo per Windows (per esempio, il popolare Sony Vegas).

Quello che intendo mostrarvi è che si possono ottenere più o meno gli stessi risultati usando software libero in ambiente GNU/Linux, senza spendere un centesimo e anzi guadagnando una maggiore flessibilità e automazione grazie alle possibilità di scripting del sistema. E no, non è difficile come pensate, anzi forse dopo aver iniziato è anche più facile!

Il video time lapse, realizzato a partire da 251 scatti ripresi tra le 23:43 del 12 giugno e le 3:51 del 13, mostra la levata ad Est delle stelle dell'Aquila, del Delfino, del Capricorno, del Pegaso e dei Pesci, insieme a Giove. Durante le riprese, inoltre, ho avuto la fortuna di catturare anche una meteora, come si vede nell'immagine di apertura.

Hardware usato e preparativi

L'equipaggiamento usato per la ripresa è stato:

  • Reflex DSLR Canon 20D senza filtro infrarosso, dell'O.R.S.A., con l'obiettivo zoom 18-55 di corredo, impostato alla focale minima. La macchina era in modalità "M".
  • Treppiedi stabile (per aumentare la stabilità, abbiamo incastrato i piedi nel terreno ed abbiamo accorciato le gambe).
  • Computer portatile con Kubuntu 10.04 (va bene qualsiasi pc su cui possa essere installata una qualsiasi recente distribuzione GNU/Linux, io ho usato un MacBook Pro).
  • Cavo USB mini-B per collegare la macchina fotografica al computer.
  • Coppia di batterie cariche per la reflex.
  • Scheda di memoria di capacità adeguata (noi abbiamo ne usata una da 512 MB).

Essendo piuttosto difficile trovare il fuoco osservando nel mirino di notte, abbiamo impostato il fuoco in manuale e l'abbiamo regolato di giorno, prima del tramonto, sul profilo lontano delle montagne, senza toccarlo fino al termine delle riprese.

Abbiamo fissato il diaframma a f/ 5.6, per limitare aberrazioni e guadagnare un po' di profondità di campo, che limitasse eventuali piccoli errori di messa a fuoco. La sensibilità era (forse esagerando) a 1600 ISO; probabilmente avremmo ripreso le stesse stelle ottenendo meno rumore se avessimo lavorato a 800 ISO.

Il tempo di esposizione scelto era di 20 secondi (così che non fosse evidente alcun mosso), con l'intenzione di scattare foto ogni 30 secondi (vedremo nel seguito che per un errore alla fine abbiamo fatto scatti ogni 56 sec circa). Volevamo riprendere immagini per almeno 4 ore, e abbiamo calcolato che con il passo temporale scelto (30 sec) ci serviva riprendere circa 500 scatti.

Inizialmente abbiamo anche deciso che il video time lapse finale avrebbe avuto il formato 702p (1280x720), per cui abbiamo impostato sulla reflex la risoluzione minima possibile (JPEG 1728x1152). File più grandi avrebbero soltanto riempito inutilmente la scheda di memoria e rallentato l'elaborazione successiva, almeno per quelle che erano le nostre intenzioni iniziali.

Software usato

Tutto il software usato è disponibile "di serie" nei depositi predefiniti di tutte le maggiori distribuzioni GNU/Linux. In quanto segue, io farò riferimento a Ubuntu/Kubuntu.

Questo è il software strettamente necessario per creare video time lapse:

  • gphoto2 per pilotare in remoto la reflex e per scaricare le foto dalla reflex.
  • imagemagick per ritoccare in blocco le immagini (useremo il comando convert).
  • ffmpeg per combinare le immaigni in un video. Come vedete, i programmi più importanti sono da riga di comando, e si prestano facilmente ad essere automatizzati tramite "ricette" o script, riutilizzabili in più e più occasioni.

Utili e molto comodi, anche se non essenziali, sono stati:

  • Un visualizzatore di immagini veloce, per sfogliare le foto scaricate e controllare i risultati; io ho usato Gwenview.
  • Gimp per elaborare in modo interattivo le immagini; ci permette di stabilire facilmente quali saranno le modifiche che dovremo applicare a tutte le immagini usando imagemagick.
  • Kdenlive per montare il video in modo gradevole, aggiungendo musica, transizioni, ed altro; qualcuno preferisce PiTiVi.
  • VLC o un qualsiasi altro media player per visualizzare il video time lapse risultante.

Acquisizione dei frame

Scattare una foto ogni 30 secondi manualmente, per 500 volte, non è cosa proponibile ad alcun essere umano sano di mente. Per queste cose sono molto più brave le macchine ed i computer, con il vantaggio che ci lasciano liberi di fare altre cose nel frattempo. gphoto2 ci permette di controllare in remoto la macchina fotografica, ed è facile automatizzare i comandi necessari (per un tutorial di base su come usare gphoto2 per questi scopi vedete Fotografia time lapse con Linux).

Per questo abbiamo realizzato un semplice script bash per scattare 500 esposizioni da 20 secondi (come impostato nella macchina fotografica), con intervalli di 30 secondi, e per stampare a video l'ora della ripresa (utile per rilevare anomalie, per esempio scatti persi a causa di batterie scariche):

#!/bin/bash
# cattura-sequenza.sh - versione provvisoria
# data: 12/06/2010
# autore: gerlos - gerlos@altervista.org
#   Questo script cattura una foto dalla Canon 20DA ogni 30 secondi,
# per un totale di 500 scatti
#
#   Richiede: gphoto2
for i in `seq 1 500`
do
    # stampa la data e l'ora
    echo ' **** ' `date` ' **** '
    # si ferma per 30 secondi
    sleep 30s
    # esegue uno scatto
    gphoto2 --capture-image
done
echo
echo ACQUISIZIONE COMPLETETATA, SCARICO LE FOTO
# scarica tutte le foto sulla scheda di memoria
gphoto2 --get-all-files
echo TUTTO COMPLETATO
exit

Quando ho scritto questo script mi sono convinto che avrebbe acquisito una foto ogni trenta secondi... solo il giorno dopo mi sono accorto di essermi sbagliato: la pausa tra uno scatto e l'altro è sì di 30 secondi, ma la distanza di tempo tra l'inizio di una foto e l'inizio della successiva è di almeno 50 secondi (30 di pausa + 20 di esposizione)! Se a questo tempo si aggiunge il tempo necessario a gphoto2 e alla reflex per comunicare (~7 sec), ci ritroviamo con un intervallo di tempo medio di circa 57 sec, che è l'intervallo medio tra uno scatto e l'altro nella sequenza che abbiamo acquisito.

Lo script corretto è questo, che effettivamente esegue uno scatto da 20 sec ogni 30 sec (visto il tempo necessario alla reflex, consiglio di prevedere sempre un "tempo morto" di almeno 10 sec):

#!/bin/bash
# cattura-sequenza.sh - versione definitiva
# data: 13/06/2010
# autore: gerlos - gerlos@altervista.org
#   Questo script cattura una foto dalla Canon 20DA ogni 30 secondi,
# per un totale di 500 scatti
#
#   Richiede: gphoto2
echo COMINCIAMO
for i in `seq 1 500`
do
    # aspetta per 30 secondi
    sleep 30s
    # stampa la data e l'ora
    echo ' **** ' `date` ' **** '
    # esegue uno scatto in background
    gphoto2 --capture-image &
done
echo
echo ACQUISIZIONE COMPLETETATA, SCARICO LE FOTO
# scarica tutte le foto dalla scheda di memoria
gphoto2 --get-all-files
echo TUTTO COMPLETATO
exit

È consigliabile infine riprendere una decina di dark frame. Potete farlo coprendo l'obiettivo con il tappo e dando il comando:

gphoto2 --interval 30 --frames 10

Possibili problemi in fase di ripresa

Per essere pilotabile da gphoto2 la Canon 20D deve essere in modalità di comunicazione "Normale", e non deve essere attivo nulla sul display (revisione foto, menu di configurazione, nulla). Inoltre il tempo morto di ~7 sec che ho misurato potrebbe essere più lungo se salvate immagini in formati più grandi (in RAW ci sono tempi molto più lunghi di salvataggio). Notate infine che nello script non c'è alcun comando che dica alla macchina la durata dell'espozione: questo parametro dobbiamo averlo impostato in precedenza sulla reflex.

Oltre a controllare che sul PC funzioni tutto correttamente, sorvegliate anche la reflex, soprattutto se è alimentata a batteria. In caso di problemi di comunicazione, gphoto2 ci restituirà sempre lo stesso messaggio generico, a prescindere dal problema specifico (batteria scarica, scheda di memoria piena, display attivo...):

Individuata una "Canon:EOS 20D (normal mode)".

*** Errore ***
Errore nella cattura dell'immagine
ERRORE: Impossibile catturare.
*** Errore (-113: "La fotocamera non ha potuto completare l'operazione") ***

Per ottenere messaggi di debug, usare l'opzione --debug.
I messaggi di debug possono aiutare a risolvere i problemi incontrati.
Se si ha intenzione di inviare errori o messaggi alla mailing list degli
sviluppatori di gphoto <gphoto-devel@lists.sourceforge.net>, eseguire
gphoto2 come segue:

    env LANG=C gphoto2 --debug --debug-logfile=my-logfile.txt --capture-image

Please make sure there is sufficient quoting around the arguments.

Fate prima qualche prova a casa, per verificare quanti scatti riuscite a fare con una batteria carica con il vostro setup. Io sono rimasto stupito quando ho constatato che dopo appena 180 scatti l'energia era finita! Se ne avete la possiblità, montate un pacco batterie più grande o collegate la macchina fotografica alla corrente elettrica. Se dovete cambiare le batterie durante una ripresa, fatelo senza spostare la macchina e il treppiedi!

È possibile che di tanto in tanto la comunicazione tra il PC e la relfex fallisca, anche se non ci sono problemi di batterie o di memoria piena. Onestamente non ho capito perché questo accada, ho notato che si verifica nel 1-2% degli scatti, e per questo invece di tenere aperta la connessione con la Canon 20D, il mio script apre una nuova connessione per ogni scatto. Il più delle volte il problema è innocuo, e non si presenta allo scatto successivo; in ogni caso si può risolvere spegnendo e riaccendendo la camera.

Fate sempre un po' di prove con gphoto2 e la vostra reflex, per cercare di rendervi conto di cosa potete controllare. gphoto2 supporta moltissime camere e non tutte allo stesso livello, le vostre possibilità potrebbero variare (anche se io ho avuto sempre molta fortuna con le SLR Canon e Nikon).

Questo articolo continua con la seconda parte

Trackback URL for this post:

http://gerlos.altervista.org/trackback/473

commenti

ritratto di Ivan

Salve, ho letto con piacere

Salve, ho letto con piacere l'articolo. Provando con la mia nikon d90 (supportata da gphoto2) fallisce il salvataggio delle foto se sono più di tre. Accade sia con il suo script che con il comando gphoto2 -I 5 -F 4 --capture-image --get-all-files. Saprebbe aiutarmi?
Grazie. Cordiali saluti.

Invia nuovo commento

Il contenuto di questo campo è privato e non verrà mostrato pubblicamente.
  • Allowed HTML tags: <a> <em> <strong> <del> <cite> <code> <img> <ul> <ol> <li> <dl> <dt> <dd> <pre>
  • Linee e paragrafi vanno a capo automaticamente.
  • Insert Flickr images: [flickr-photo:id=230452326,size=s] or [flickr-photoset:id=72157594262419167,size=m].
  • Indirizzi web o e-mail vengono trasformati in link automaticamente

Maggiori informazioni sulle opzioni di formattazione.

CAPTCHA
Per provare che sei un visitatore umano, rispondi a questa domanda. È per evitare l'inserimento di messaggi spam.
Image CAPTCHA
Enter the characters shown in the image without spaces, also respect upper and lower case.