
Uno script shell per convertire rapidamente immagini e video
Poche righe di codice e qualche comando presente nella maggior parte delle distribuzioni per “trasformare” in un attimo intere collezioni di foto e filmati
(pagina 4 di 4)
ferenza. Alla riga 4 creiamo il
nome del file convertito; non conosciamo a priori l’estensione
del file di ingresso, che potrebbe anche non esserci: pertanto con
un comando sed rimuoviamo un’eventuale estensione (“\..*$” è
un’espressione regolare che significa: tutto ciò che segue il punto
fermo compreso, fino a fine riga), e poi aggiungiamo una nuova
estensione. Questo sistema funziona anche se il comando sed non
trova nulla da sostituire, ovvero se il nome del file di ingresso non
ha un’estensione. Nello script di conversione video supponiamo
che tutti i file terminino con l’estensione .wmv, per cui è
sufficiente una normale sostituzione con il comando sed.
[10-11] Definiamo una stringa che comunica all’utente come utilizzare
il programma: il primo parametro è il formato del file di
output, seguito da uno o più file/directory; nel caso gli oggetti
passati fossero delle directory, lo script convertirà tutti i file che
troverà al loro interno per un solo livello di profondità. È importante
notare che nello script di conversione video la riga di
comando manca del parametro relativo al formato, in quanto lo
script converte i video in formato AVI senza possibilità di scelta.
Alla riga 11 se i parametri passati dall’utente sono in numero
minore di 2 la stringa di utilizzo viene stampata e il programma
viene chiuso.
[12-13] Il primo parametro passato dall’utente è il formato di
destinazione: per maggiore comodità tale parametro viene posto
nella variabile ${formato} e rimosso dalla lista dei parametri con
il comando shift. In questo modo nel resto dello script è possibile
effettuare un ciclo su tutti i parametri passati, con la certezza che
non si stanno processando come file o directory dei parametri
dello script stesso.
[14-29] Questo ciclo rappresenta il cuore dello script, e non fa altro
che analizzare uno ad uno gli oggetti passati dall’utente sulla
riga di comando, passando poi a convertirli nel formato desiderato
tramite la funzione convert_image(). Anche qui è importante
notare che l’esecuzione viene differenziata per i file e per le
directory: nel primo caso (righe 16-19), si procede alla semplice
conversione del file, nel secondo (righe 20-26), si crea un nuovo
ciclo sui file contenuti nella directory. L’elenco dei file viene
ottenuto con il comando find, i cui parametri sono maxdepth,
impostato a 1, che impedisce l’analisi delle sottocartelle, e type,
impostato a “f”, che trova solamente i file regolari (non i link,
ad esempio). Alla riga 27 viene stampato un breve messaggio di
errore nel caso venisse passato allo script un oggetto di natura
diversa da una immagine o da un file video WMV.
 |
Conversione di un file video da WMV ad AVI |