domenica 15 giugno 2008

Convertire un gruppo di slide in Jpeg

Avevo bisogno di convertire un po' di file PowerPoint (un centinaio) in sequenze di JPEG (una trentina di slide a file) da vedere su un lettore video portatile, ragion per cui mi rimbocco le maniche per trovare una soluzione il più possibile automatizzata. Su Linux, ovviamente.
Non ho molta fortuna nel trovare convertitori da PPT a JPEG, se non con i soliti tool per Windows di cui non mi sono mai fidato. Quindi mi toccherà arrivare alla soluzione da solo (il che, da bravo nerd, è una prospettiva che non mi dispiace affatto...)
Mi rendo conto di essermi dilungato anche troppo e vi risparmio anche la trafila per cercare i vari tool e metterli insieme nel modo giusto come pezzi Lego. La soluzione che vi presento va bene con queste condizioni:
  • il vostro lettore portatile non è in grado di leggere da sé file PowerPoint o PDF (in caso contrario questo articolo è perfettamente inutile!)
  • vi accontentate se qualche slide con caratteri molto piccoli non sarà leggibile
  • avete molti file di presentazioni sparsi su diverse cartelle;
  • avete la pazienza di togliere dai nomi dei file e delle cartelle tutti gli spazi, punti, punti interrogativi e altri simboli che potrebbero dar fastidio alla linea di comando, e sostituirli eventualmente con un innocuo underscore (_);
  • avete già fatto un backup della memoria su cui andrete a mettere le Jpeg.
L'intero procedimento si compone nei seguenti passi:
  1. conversione da .ppt (o .odp) a .pdf;
  2. conversione da .pdf a sequenze di .jpg;
  3. aggiunta degli zeri iniziali nei nomi delle singole immagini;
  4. copia sul medium di destinazione;
  5. eventuale riordino delle directory.

1- conversione da .ppt (o .odp) a .pdf

Questa fase consiste in alcuni sottopassi da effettuare:
  1. Seguite questo tutorial per convertire un singolo file in PDF.
  2. Aprite OpenOffice con un nuovo documento o uno esistente qualsiasi, purché ci sia almeno una finestra aperta.
  3. Aprite il monitor di sistema per tenere d'occhio l'impegno della vostra CPU.
  4. Aprite il terminale, posizionatevi sulla directory del vostro materiale e scrivete il seguente comando:
    find -name '*.ppt' -print -exec ooffice -invisible "macro:///Standard.MyConversions.SaveAsPDF("$PWD/'{}'")" \;
    e lasciate che il computer sudi le prime sette camicie per voi :)
  5. Anche se il prompt dei comandi sarà tornato, aspettate che la CPU sia tornata a riposo prima di andare oltre (a quanto pare l'esecuzione delle script è asincrona).
A questo punto, tutti i vostri file di presentazioni sono stati convertiti in altrettanti file PDF. Al nostro scopo sono solo materiale intermedio, ma possono comunque tornare utili in altre occasioni.

2- conversione da .pdf a sequenze di .jpg

Sempre dal terminale:
find -name '*.pdf' -print -exec sh -c 'convert -resize 320x240 $1 `echo $1 | cut -d. -f-2`.jpg' '{}' '{}' \;
Al "320x240" sostituite la risoluzione del vostro lettore di video/foto per una migliore resa visiva. E qui lo vedrete lavorare ancora un po'.
Se per caso, durante il processo di conversione, leggete degli errori di lettura file è probabilmente dovuto a qualche carattere di spazio che vi siete lasciati scappare. Leggendo attentamente quei messaggi dovreste poter capire dove.
A questo punto vedrete che la directory del materiale si è popolata di molti file, molti di tipo .jpg. Il grosso è già stato fatto.

3- aggiunta degli zeri iniziali nei nomi delle immagini

Questo passo è necessario perché convert numera i file risultanti senza includere uno zero iniziale. Quindi, a meno che le presentazioni non siano composte da meno di 10 slide, l'ordine di lettura nel vostro dispositivo sarà una cosa del tipo: 1, 10, 11, 12..., 2, 3, 4, 5, 6, 7, 8, 9, il che renderebbe la lettura parecchio scomoda.
Ecco il comando per aggiustare le cose:
find -exec rename 's/-([0-9]).jpg/-0$1.jpg/' '{}' \;
Questo è quanto basta se avete meno di 100 slide, in caso contrario scrivete anche questo comando, simile al primo:
find -exec rename 's/-([0-9][0-9]).jpg/-0$1.jpg/' '{}' \;

4- copia sul medium di destinazione

La cartella col materiale può essere così copiata sul vostro lettore, ma restano ancora i file .ppt e .pdf che consumano solo spazio. Per liberarsene, posizionatevi col terminale lì dove avete fatto la copia e date il seguente comando. Attenzione: assicuratevi di essere nella directory di destinazione prima di confermarlo, visto che l'operazione è irreversibile!
find -name '*.ppt' -or -name '*.pdf' -print -delete

5- Riordino delle directory

In una memoria di massa i file non sono quasi mai ordinati secondo uno specifico ordine e vengono memorizzati praticamente alla rinfusa; ci pensa poi il file manager a ordinarceli di volta in volta secondo le nostre preferenze.
Purtroppo non tutti i lettori audio/video hanno un file manager evoluto come quello di un PC e si limitano ad elencare i file così come li trovano nella memoria, alla faccia degli sforzi del punto sopra per ottenere un ordine alfabetico adeguato.
Per vedere se anche questo è il vostro caso, sfogliate l'albero delle directory fatto finora col vostro lettore. Se i file sono tutto fuorché ordinati alfabeticamente, dovreste procedere come segue.
Esiste un'utility, di nome fatsort, che risolve proprio questo problema: ordina i file direttamente nella memoria di massa in modo che i file manager "stupidi" non diano noie. Si tratta di un programma che opera "a basso livello", quindi in questi casi la cautela non è mai troppa e vi consiglio di fare un backup di tutti i dati, sia della memoria del lettore che del computer che state usando.
  1. Innanzitutto installate fatsort:
    sudo apt-get install fatsort
  2. Determinate qual'è il dispositivo "fisico" relativo alla memoria del lettore:
    mount | grep media
    Dovreste trovare un elenco relativo ai vostri dispositivi removibili collegati in questo momento coi rispettivi nomi. Individuate quello di vostro interesse e riportate il primo percorso della riga, del tipo /dev/DISPOSITIVO.
  3. Effettuate l'"unmount" della memoria dove si trova il materiale: potete farlo con l'opzione "Smonta" nel vostro file manager oppure da linea di comando:
    umount /dev/DISPOSITIVO
    , dove DISPOSITIVO è la stringa individuata poc'anzi.
  4. Effettuate un controllo del filesystem affinché non ci siano errori:
    sudo fsck.vfat -a /dev/DISPOSITIVO
  5. Adesso potete eseguire fatsort:
    fatsort /dev/DISPOSITIVO
A questo punto dovreste avere tutte le vostre sequenze di immagini ben ordinate e leggibili dal vostro media player portatile in qualunque momento!

Nessun commento: