In molti cassetti riposa una vecchia compatta digitale che funziona ancora benissimo. Qui mettiamo alla prova una Canon PowerShot A2000 IS, un modello di fascia modesta commercializzato nel settembre 2008, con due curiosità: è possibile far comparire nella galleria della fotocamera foto e video preparati su un computer? E che cosa può darci CHDK, il firmware aggiuntivo che trasforma queste compatte in macchine programmabili?
Questo articolo racconta i test fatti, con gli errori compresi. Per le foto la strada è semplice; per i video bisogna capire come la fotocamera legge i propri file, e ne è venuto fuori uno strumento a riga di comando, casoweb video-per-canon, che li prepara. Le prove sul CHDK devono ancora cominciare.
La fotocamera in breve
La A2000 IS è una compatta da 10 megapixel con zoom ottico 6x stabilizzato, processore DIGIC III e schede SD/SDHC. Scatta in JPEG e registra video in formato AVI con codifica Motion JPEG e audio WAVE mono a 8 bit. Collegata via USB, permette di leggere e anche scrivere sulla scheda. Il punto è che i file scritti dall'esterno, di solito, non compaiono nella galleria sul display, mentre quelli ripresi dalla fotocamera sì.
Scheda tecnica essenziale
Nonostante l'età, Canon tiene ancora online manuali, software e specifiche: si trovano sulla pagina di supporto della PowerShot A2000 IS su Canon Italia. La tabella riassume i dati più utili per i nostri esperimenti, ripresi dalla scheda tecnica pubblicata da Canon (in inglese).
| Caratteristica | Dato |
|---|---|
| Sensore | CCD da 1/2,3 pollici, 10,0 megapixel effettivi (10,3 totali) |
| Obiettivo | 6,4-38,4 mm (equivalente a 36-216 mm), luminosità f/3,2-5,9 |
| Stabilizzatore | ottico, a spostamento di lente |
| Zoom digitale | circa 4x |
| Display | TFT a colori da 3,0 pollici, circa 230.000 punti |
| Sensibilità | Auto, High ISO Auto, ISO 80-1600 (ISO 3200 in modalità scena) |
| Tempi di posa | da 15 s a 1/1600 s, a seconda della modalità |
| Scatto continuo | circa 1,3 immagini al secondo (Large/Fine) |
| Foto | JPEG Exif 2.2, conforme a DCF e DPOF; compressione superfine, fine, normale |
| Risoluzioni foto | 3648x2736, 2816x2112, 2272x1704, 1600x1200, 640x480, 3648x2048 (16:9); 1600x1200 con data stampata |
| Video | AVI, Motion JPEG, con quattro modalità (vedi la tabella successiva) |
| Audio (video e memo vocali) | WAVE mono, 8 bit, 11 kHz (in realtà 11024 Hz) |
| Supporti | SD, SDHC, MultiMediaCard, MMCplus, HC MMCplus |
| Interfacce | USB Hi-Speed (mini-B), uscita audio/video (NTSC o PAL), MTP e PTP, PictBridge |
| Riproduzione | singola, indice, ingrandimento, presentazione (slide show), filmati e altre modalità |
| Alimentazione | 2 batterie AA (alcaline o NiMH) |
| Dimensioni e peso | 101,9 x 63,5 x 31,9 mm, circa 185 g (solo corpo macchina) |
Le modalità video
Secondo la guida dell'utente di Canon (pp. 90-91) la fotocamera registra in quattro modalità:
| Modalità | Risoluzione | fps | Durata massima di un clip |
|---|---|---|---|
| Compact | 160x120 | 15 | circa 3 minuti |
| Standard | 320x240 | 30 | circa 1 ora o 4 GB |
| Standard | 640x480 | 30 | circa 1 ora o 4 GB |
| Standard LP | 640x480 | 30 | circa 1 ora o 4 GB, con qualità più bassa e, a parità di spazio, durata doppia |
Come la fotocamera vede i file
L'ipotesi iniziale era che la fotocamera tenesse un indice interno degli scatti. Sulla scheda c'è davvero un catalogo, ma si è visto che per mostrare i file non serve. Nel nostro esemplare la scheda contiene:
- le foto in
DCIM/100CANON/e nelle cartelle successive (si chiamano1NNCANONe, secondo Canon, ne contengono al massimo 2000 immagini), con nomi comeIMG_0001.JPG,IMG_0002.JPG, e così via; - i video, nelle stesse cartelle, come coppie di file con lo stesso numero:
MVI_0001.AVIeMVI_0001.THM, la miniatura. Senza il file THM la fotocamera non mostra il video; - la numerazione va da 0001 a 9999 ed è condivisa tra foto e video: un numero va scelto tra quelli non usati da nessun altro file della cartella;
- in
DCIM/CANONMSC/il fileM0100.CTG, il catalogo della cartella 100CANON. Pesa 7072 byte e contiene un breve record di 6 byte per ogni numero di file: il numero, un codice che sembra una data e un campo che sembra descrivere il tipo. Non contiene miniature e, alla prova dei fatti, non è necessario: un file con il nome giusto compare nella galleria anche se non è nel catalogo; - la cartella
MISC, quando presente, con gli ordini di stampa (DPOF).
Un file con nome o cartella non conformi viene ignorato. Lo standard DCF, a cui Canon dichiara la fotocamera conforme, prevede inoltre che la galleria segua l'ordine dei numeri, ma questo non è stato verificato.
Esperimento 1: le foto
L'obiettivo è produrre sul PC un JPEG che sia indistinguibile, per la fotocamera, da uno scattato da lei. Il metodo più semplice, e quello che ha funzionato, è partire da una foto scattata dalla fotocamera: duplicarla e rinominarla con un numero libero. La fotocamera la trova e la mostra.
Per un'immagine che viene da altrove conviene riprodurre il più possibile le caratteristiche dell'originale:
- Osserva i metadati di una foto della fotocamera:
exiftool -a -G1 IMG_0001.JPGmostra modello, dimensioni, miniatura incorporata e tutto il resto (secondo Canon, i file sono Exif 2.2). - Prepara l'immagine a una delle risoluzioni native, in 4:3, in JPEG baseline (non progressivo):
convert foto.jpg -resize 3648x2736^ -gravity center -extent 3648x2736 -interlace none -quality 92 nuova.jpg - Copia i metadati dall'originale:
exiftool -TagsFromFile IMG_0001.JPG -all:all nuova.jpg(la risoluzione deve essere la stessa dell'originale, altrimenti i campi con le dimensioni risulterebbero incoerenti). - Rinomina il file con un numero libero e copialo in
DCIM/100CANON/.
Se un file non viene riconosciuto, la guida di Canon spiega che il messaggio "Immagine non identificata" è quello che appare per le immagini manipolate su un computer, rinominate o riprese con un'altra fotocamera: la fotocamera non garantisce di mostrare file che non ha prodotto lei.
Esperimento 2: i video
Il primo tentativo
Prima di tutto si guarda cosa produce davvero la fotocamera, con mediainfo o con ffprobe:
mediainfo MVI_0001.AVI
ffprobe -hide_banner MVI_0001.AVI
Su un filmato a 640x480 registrato dalla fotocamera abbiamo rilevato questi valori:
| Elemento | Valore rilevato |
|---|---|
| Contenitore | AVI, scritto dall'applicazione CanonMVI06 |
| Video | Motion JPEG (MJPG), 640x480, 30 fps, progressivo, 4:2:2, 8 bit; circa 14,9 Mb/s (circa 62 KB per fotogramma) |
| Audio | PCM non firmato, 8 bit, mono, 11,024 kHz (circa 88 kb/s) |
| Interleave | blocchi di 1 secondo, pari a 30 fotogrammi |
Con questi dati si può ricodificare un video con ffmpeg e nominarlo MVI_NNNN.AVI. Il risultato è stato deludente: la fotocamera mostrava "Immagine non identificata", e lo stesso succedeva rimontando con ffmpeg -c copy un video Canon perfettamente valido, senza toccare né i fotogrammi né l'audio. Il problema non era la codifica ma il modo in cui ffmpeg scrive il file AVI.
Dentro un AVI Canon
Analizzando i video registrati dalla fotocamera in tutte le modalità si scopre una struttura molto particolare:
- il file comincia con un'intestazione fissa di esattamente 2 KB, con indici OpenDML, la data di registrazione, il tag CanonMVI06 e un riempimento;
- i dati sono in blocchi: un secondo di audio (11024 byte, e l'ultimo blocco può essere più corto), poi tanti fotogrammi quanti sono gli fps, e così via;
- l'indice vero sta in fondo ai dati, mentre l'indice tradizionale (
idx1) contiene solo due voci: il primo blocco audio e il primo fotogramma. ffmpeg fa il contrario; - la durata del fotogramma è troncata e non arrotondata (66666 microsecondi a 15 fps) e l'audio è lungo quanto il video, arrotondato per eccesso al campione;
- i fotogrammi JPEG hanno un marcatore AVI1 al posto di JFIF, le due tabelle di quantizzazione in un solo segmento, nessuna tabella Huffman (si usano quelle standard) e lunghezza sempre pari;
- durante la ripresa la fotocamera regola la compressione: le tabelle di quantizzazione cambiano ogni due fotogrammi, grossolane all'inizio e poi più stabili. A 640x480 i fotogrammi pesano circa 61 KB in Standard e circa 30 KB in LP.
Un modulo che riproduce questa struttura è riuscito a rigenerare un AVI della fotocamera, partendo dai suoi fotogrammi e dal suo audio, identico byte per byte in tutte e quattro le modalità.
Il file THM non è solo una miniatura
Il THM è un JPEG 160x120 con un blocco Exif Canon. Dentro ci sono la data, il numero di fotogrammi, gli fps, le dimensioni del video, un indicatore della qualità (LP) e il numero del file. La durata che il display mostra nella galleria viene da lì.
- Se il THM non concorda con l'AVI (numero di fotogrammi diverso), il video compare ma non parte o si ferma.
- Il numero del file scritto nel THM, invece, non è determinante.
- Durante la riproduzione il display mostra dimensione e fps, per esempio 640/30, 640lp/30, 320/30 o 160/15. Con un THM in cui erano aggiornati solo fotogrammi e fps, i video a 320x240 e 640x480 mostravano 160/30, pur riproducendosi correttamente.
Perché il video aveva strisce verdi
Con il contenitore giusto e il profilo 160x120 tutto funzionava. A 640x480, però, la fotocamera mostrava il video per intero e con l'audio giusto, ma a strisce verdi orizzontali. La ragione sta nel campionamento dei colori. Il 4:2:2 della Canon ha la luminosità campionata 2x1 e il colore 1x1 (blocchi di 16x8 pixel), mentre ffmpeg scrive il 4:2:2 con luminosità 2x2 e colore 1x2 (blocchi di 16x16): un JPEG valido, ma diverso da quello che la fotocamera sa decodificare bene a quella risoluzione. Nessuna opzione di ffmpeg cambia il campionamento, quindi lo strumento usa ffmpeg solo per leggere e ridimensionare il video, e codifica i fotogrammi con Pillow, che produce lo stesso campionamento della Canon. Anche le miniature dei THM sono costruite allo stesso modo.
Lo strumento: casoweb video-per-canon
Tutto questo è confluito in un comando, casoweb video-per-canon, pubblicato con licenza MIT nel repository casoweb-tools su GitHub, con la documentazione tecnica completa. Servono ffmpeg e uv (il programma che installa gli strumenti Python in un ambiente separato); poi:
uv tool install git+https://github.com/titobrasolin/casoweb-tools.git
Un esempio d'uso, con la scheda montata sul PC:
casoweb video-per-canon video.mp4 --numero 1266 --thm-modello MVI_1259.THM --cartella /media/UTENTE/SCHEDA/DCIM/101CANON
--thm-modelloè un file THM qualsiasi prodotto dalla fotocamera, di qualunque modalità: lo strumento ne riusa il blocco Exif e aggiorna date, numero del file e dati del video, così nel codice non c'è nessun dato di una fotocamera specifica;--profilosceglie la modalità:compatto(predefinito),320x240,640x480o640x480-lp;--duratataglia il video ai primi N secondi; un video senza audio riceve una traccia di silenzio;- lo strumento avvisa quando il video supera la durata massima prevista per quella modalità;
- AVI e THM vanno copiati sempre insieme.
| Profilo | Modalità | Qualità JPEG di partenza |
|---|---|---|
compatto | 160x120 a 15 fps | 90, abbassata finché il fotogramma più pesante resta sotto i 5000 byte |
320x240 | 320x240 a 30 fps | 90 |
640x480 | 640x480 a 30 fps | 86 |
640x480-lp | 640x480 a 30 fps, qualità ridotta | 72 |
Le qualità di partenza sono quelle che la fotocamera tiene a regime in ciascuna modalità. Con un THM preso da un clip Compact, lo stesso video convertito con tutti e quattro i profili si riproduce, con immagine e audio corretti, e il display mostra 160/15, 320/30, 640/30 e 640lp/30, come per i clip Canon.
Cosa resta aperto
- Non è stato ancora provato cosa succede con clip più lunghi della durata massima della modalità.
- Nel primo giro di prove, un video di 6 secondi a 160x120 con fotogrammi da 6-7 KB si è fermato dopo 5 secondi: non si sa se per la dimensione dei fotogrammi o per i metadati incoerenti, perché nella prova successiva sono cambiate entrambe le cose. Per prudenza il limite di 5000 byte resta nel profilo compatto.
- Il significato di alcuni valori del THM (un contatore, punti di messa a fuoco, un identificativo dell'immagine) è ancora una deduzione.
I test, con gli esiti
| # | Prova | Esito |
|---|---|---|
| 1 | Foto copiata da un originale e rinominata con un numero libero | Compare nella galleria |
| 2 | Foto con risoluzione non nativa | Da provare |
| 3 | Catalogo M0100.CTG | Non serve né per le foto né per i video |
| 4 | AVI rimontato da ffmpeg senza ricodifica | Rifiutato: Immagine non identificata |
| 5 | Video senza il file THM | Non compare |
| 6 | THM con numero di fotogrammi diverso da quello dell'AVI | Compare ma non parte o si ferma |
| 7 | THM con numero del file non aggiornato | Si riproduce |
| 8 | AVI ricostruito con fotogrammi Canon e THM coerente | Si riproduce |
| 9 | Video convertito a 160x120, JPEG di ffmpeg | Si riproduce |
| 10 | Video convertito a 640x480, JPEG di ffmpeg (blocchi 16x16) | Si riproduce per intero con l'audio, ma a strisce verdi |
| 11 | Video convertito a 640x480, JPEG di Pillow (blocchi 16x8) | Si riproduce correttamente |
| 12 | Lo stesso video nei quattro profili, THM da un clip Compact | Si riproducono tutti, immagine e audio corretti |
| 13 | Clip più lunghi della durata massima | Da provare |
| 14 | Presentazione (FUNC.SET + tasto Print/Share in riproduzione) | Da provare |
CHDK: cos'è e cosa aggiunge
CHDK (Canon Hacker's Development Kit) è un firmware aggiuntivo che si carica in memoria dalla scheda SD all'accensione. Non sostituisce il firmware originale: se si toglie la scheda o non lo si avvia, la fotocamera torna normale.
Per la A2000 IS esiste una versione per il firmware 1.00C, in stato beta, che dovrebbe funzionare anche con il 1.00B. Tra le funzioni che offre, in generale:
- salvataggio in RAW, da sviluppare poi sul computer;
- tempi di posa e ISO estesi, messa a fuoco manuale e bracketing;
- istogramma in tempo reale e segnalazione delle zone sovraesposte;
- script in Lua e uBASIC, per automatizzare scatti e impostazioni;
- controllo dal PC via USB con
chdkptp, disponibile anche per Linux; - piccole curiosità: un file browser, un lettore di testi, qualche gioco.
Alcune funzioni potrebbero comportarsi diversamente, o mancare, nella versione beta per questo modello: vanno provate una per una.
Un timelapse con poche righe
Le compatte di questa generazione non hanno un intervallometro integrato, e con CHDK basta uno script. Un esempio minimo, da verificare sulla build per la A2000 IS:
--[[
@title Timelapse semplice
@param a Intervallo (secondi)
@default a 10
@param b Numero di scatti
@default b 360
]]
for i = 1, b do
shoot()
sleep(a * 1000)
end
Per un buon risultato conviene fissare esposizione, fuoco e bilanciamento del bianco, disattivare lo stabilizzatore se la fotocamera è su treppiede e usare batterie ben cariche. I fotogrammi si assemblano poi in un video con ffmpeg.
Preparare le schede SD
Quale scheda
Per CHDK su questo modello conviene una scheda SDHC da 4 GB: è il limite entro cui è possibile l'avvio automatico. Con schede più grandi CHDK funziona comunque, ma va avviato a mano a ogni accensione dal menu Aggiornamento firmware. Il formato exFAT non è supportato. Ne servono almeno due: una dedicata a CHDK e una per i test sui file esterni, così le prove non si mescolano.
Appena arrivata, ogni scheda va controllata, per esempio con f3write e f3read da Linux, che segnalano capacità falsificate o difetti.
Passo per passo
- Formatta la scheda nella fotocamera, scegliendo la formattazione a basso livello se il menu la offre. Una scheda da 4 GB risulterà un'unica partizione FAT32.
- Controlla la versione del firmware: crea un file vuoto
ver.reqnella radice della scheda, entra in riproduzione e premi insieme FUNC.SET e DISP. - Scarica la build di CHDK per la A2000 IS e per la tua versione di firmware dalla pagina download di CHDK, e decomprimila nella radice della scheda mantenendo tutte le cartelle.
- Avvia CHDK a mano dal menu Canon, con la voce Aggiornamento firmware (la scheda non deve essere bloccata).
- Rendi la scheda avviabile: nel menu di CHDK vai su Miscellaneous stuff, poi SD Card e Make Card Bootable. Il tasto per aprire il menu di CHDK dipende dal modello: la guida del wiki lo indica.
- Spegni, blocca la scheda con l'interruttore laterale e reinseriscila: CHDK parte da solo all'accensione. Per scattare normalmente non serve sbloccarla, perché CHDK ignora il blocco.
Strumenti utili
casoweb video-per-canon, per preparare i video;exiftool, per leggere e copiare i metadati;mediainfo,ffprobeeffmpeg, per analizzare e convertire i video;convert(ImageMagick), per ridimensionare le foto;f3, per controllare le schede;chdkptp, per comandare la fotocamera da PC quando CHDK è attivo.
Per saperne di più
- casoweb-tools su GitHub, con la documentazione tecnica di video-per-canon
- Pagina di supporto Canon Italia: manuali, software e specifiche della PowerShot A2000 IS
- Guida dell'utente della PowerShot A2000 IS (PDF in inglese)
- Specifiche tecniche della PowerShot A2000 IS secondo Canon (in inglese)
- Scheda della PowerShot A2000 IS nel Canon Camera Museum
- Recensione della Canon PowerShot A2000 IS su Photo Review (in inglese)
- Lo standard DCF su Wikipedia, in inglese
- Pagina del wiki CHDK dedicata alla A2000 IS
- Guida del wiki CHDK alla preparazione della scheda SD
L'articolo verrà aggiornato con gli esiti delle prove su CHDK.
