sabato 17 marzo 2012

Bash Script: unire più parti di un video in un unico file.

Oggi vediamo uno script per unire due o più file video in un unico file, creato da un certo Francesco Biccari. Utile ad esempio per unire i "famosi" CD1 e CD2 in cui spesso si scaricano i film dal web.
Nota: lo script utilizza mencoder per riunire i file, esistono anche altri tool tipo avimerge per fare queste cose ma siccome richiedono tool che di solito non sono installati di default (nel caso di avimerge ad esempio transcode), ho preferito quindi optare per il ben più noto e usato mencoder.

#!/bin/bash

help () {
echo "Usage:"
echo "$(basename $0) -o output.avi file1.avi file2.avi ..."
echo "-o specify output file (required)"
echo "-h show this help"
return 0
}

OUTPUT_FILE=output_joinavi.avi

if [[ "$1" != "-o" ]]
then
help
exit 1
fi

while getopts ":o:h" OPTION; do
case $OPTION in
o)
OUTPUT_FILE=$OPTARG
;;
h)
help
exit 0
;;
*)
echo "Command Line Option Not Valid or Missing Argument"
help
exit 1
;;
esac
done

if [[ $#-2 -lt 2 ]]
then
help
exit 1
fi

echo "Joining " ${@:$OPTIND} " into the file " $OUTPUT_FILE
echo "Waiting..."

mencoder -forceidx -ovc copy -oac copy -o $OUTPUT_FILE "${@:$OPTIND}"

echo "Done!"

giovedì 15 marzo 2012

Bash Script: convertire tutte le immagini presenti in una cartella in JPEG

Lo script bash che vi propongo oggi serve per convertire in formato JPEG tutte le immagini presenti in una cartella.
Ovviamente per fare ciò ci appoggeremo su Imagemagick, quindi assicuratevi di averlo installato prima.
Lo script è il seguente:
#!/bin/bash

echo -n "Inserisci un valore per la qualità finale (1-100): "
read QUA
if [ "$QUA" == "" ]; then
QUA=92
fi

for file in *.bmp *.png *.gif
do
echo "Converto $file in JPEG con qualità $QUA..."
convert "$file" -quality "$QUA" "${file:0:-4}.jpg"
done
echo "Finito!"
Analizziamolo ora: come possiamo vedere all'inizio c'è una semplice richiesta di input per quanto concerne il valore di qualità da affidare alla conversione in JPEG. Subito dopo aver letto il valore inserito con read c'è un controllo se tale valore è stato inserito effettivamente o se semplicemente l'utente ha premuto INVIO senza dargli alcun valore: in questo ultimo caso allora si imposta la qualità ad un valore standard di 92.
Attenzione: a parte questo controllo non viene fatto nulla altro sul valore di input, quindi se l'utente inserisce un valore errato (minore di 1 o maggiore di 100 o ancor peggio una stringa invece di un numero!) non c'è alcuna gestione degli eventuali errori. Molto migliorabile quindi sotto questo punto di vista lo script.
Subito dopo si entra nel ciclo vero e proprio (il FOR) in cui si analizzano tutti i file presenti nell'attuale cartella e che hanno estensione .bmp, .gif e .png. Quando questi file vengono trovati si passa alla conversione tramite appunto il comando convert di Imagemagick, passandogli come parametri il file originale (la nostra immagine), la qualità di conversione e il nome finale dell'immagine risultante compresa di estensione .jpg.
Nota: la scrittura ${file:0:-4} sta a significare di prendere lo stesso nome del file originale dall'inizio (0) e per una lunghezza pari a quella del nome originale meno quattro (ossia meno l'estensione compresa di punto).

mercoledì 14 marzo 2012

Bash Script: vedere video dai siti Rai, Mediaset e LA7 senza Silverlight

Analizziamo adesso un secondo script davvero molto utile (finché dura ovviamente :P). Serve per riprodurre i video dei siti web Mediaset, Rai e LA7 direttamente dal nostro player video preferito, liberandoci quindi del tutto dall'obbligo di usare Silverlight o derivati. Il che, su Linux, è davvero una manna dal cielo :P
Lo script è stato creato da un certo lihin e pubblicato sul forum ufficiale di Ubuntu a QUESTO indirizzo.
Ma adesso vediamo subito lo script:
URL=`zenity --width=500 --title="Mediaset Stream" --text="Page url:" --entry`
if [ X"$URL" == "X" ]; then
exit 0
fi
ID=`curl "$URL" | grep jsonVideoMetadata | grep -o '"id":[^,]*' | awk -F '"' '{print $4}'`
STREAM=`curl "http://cdnselector.xuniplay.fdnames.com/GetCDN.aspx?streamid=$ID" | grep -o 'video src=[^>]*' | awk -F '"' '{print $2}' | grep -v .ism | zenity --height=200 --width 500 --title="Mediaset Stream" --list --column="Scegli lo stream:"`
if [ X"$STREAM" == "X" ]; then
exit 0
fi
vlc "$STREAM"
Ed analizziamolo: innanzitutto tramite zenity non si fa altro che mostrare a schermo una finestrella di input in cui inserire l'indirizzo della pagina web su cui si trova il video che vogliamo visualizzare.
Dato l'OK alla finestrella, tramite curl si passa a scaricare la pagina web inserita e si cerca all'interno del suo codice HTML l'ID del video. Una volta ottenuto, sempre tramite curl si torna a scaricare una nuova pagina web (il cui URL contiene l'ID appena ottenuto) e, analizzando di nuovo tramite grep il codice HTML della pagina, si ottiene (o "ottengono", in caso di più versioni disponibili) l'indirizzo URL diretto allo streaming video. Se, come prima accennato, ci sono più indirizzi (di solito la versione WMV dello streming e quelle MP4 per device mobili) allora viene mostrata a schermo una nuova finestrella (sempre grazie a zenity) che permette di selezionare quale degli indirizzi disponibili usare. Una volta scelto l'indirizzo del video che si vuole guardare allora si passa questo indirizzo a VLC che comincia lo streaming.
Ovviamente se volete potete cambiare l'ultima riga sostituendo a VLC il player video che desiderate (totem, mplayer, ecc...) ;)

Bash Script: convertire tutti i file video FLV in AVI

Oggi mi è venuto in mente di postare un po' di script bash molto utili che si trovano in giro sul web e che mi hanno aiutato in alcuni momenti della mia vita linuxiana.
Cominciamo analizzando come primo script uno di mia creazione: FLV2AVI, che come si intuisce dal nome stesso permette di convertire tutti i video FLV presenti un una cartella in AVI. I video ovviamente FLV più famosi sono quelli scaricati da Youtube (o da qualunque altro servizio di streaming video). Convertendoli in AVI avrete maggiore flessibilità (spesso non tutti i player video riproducono FLV oppure riescono a gestirli a pieno nel seek).
Ma passiamo subito allo script, eccolo:
#!/bin/sh
echo "__..--Macromedia Flash Video to XviD converter by Red Squirrel--..__\n"
echo "Notes:"
echo "-This program requires xvid and mp3lame codecs and mencoder tool installed in your distro."
echo "-Conversion is made preserving quality (bitrate = 1000kb/s) and resolution of your videos."
echo "-Visit www.psp-cheats.it/redsquirrel for questions and bugs.\n"
echo "Press ENTER to start conversion..."
read to pause

for file in *; do
if file "$file" | grep -q "Macromedia Flash Video"; then
mencoder "$file" -ovc xvid -xvidencopts bitrate=1000:autoaspect -vf pp=lb -oac mp3lame -lameopts fast:preset=standard -o "`basename "$file" .flv `.avi"
else
echo "Skipping $file because it isn't a Flash Video..."
fi
done

echo "All done. Bye bye!"
exit 0
Analizziamolo ora. Innanzitutto, tolto l'header, si entra subito in un ciclo FOR che analizza tutti i file presenti nella cartella attuale. Subito dopo troviamo un semplice IF che controlla se il file corrente è un video FLV. In caso positivo si passa quindi alla conversione vera e propria, utilizzando mencoder.
I parametri passati a mencoder sono essenzialmente quelli migliori per i video medi di Youtube, ossia risoluzione identica all'originale e bitrate impostato a 1000kb/s. Come codec video si usa XVID, come codec audio invece il classico MP3. Infine al file si dà l'identico nome dell'originale (esclusa la vecchia estensione FLV), questo ovviamente per poterli riconoscere facilmente.
Naturalmente si possono sempre modificare i parametri passati a mencoder come più vi aggrada, ad esempio cambiando il codec audio o video, oppure cambiando la risoluzione o il bitrate ;)

venerdì 9 marzo 2012

Comunicazione di Servizio: da Wordpress a Blogger

Come penso avrete notato ho trasferito il mio blog (a mano xD) da Wordpress a Blogger.
Essenzialmente ho fatto questo perché Wordpress è troppo pesante e con temi e plugin diventava un mattone. Blogger invece ha tutto quello che cerco già incorporato, inoltre essendo un servizio di Google cosa si può chiedere di meglio sul web oggi? XD
Comunque, per farla breve, ho spostato tutto dal vecchio blog eccetto 8 articoli che erano ormai inutili. Inoltre adesso anche il vecchio indirizzo (http://blog.redsquirrel87.com) reindirizza a questo nuovo blog, quindi quello vecchio è stato eliminato del tutto definitivamente, da oggi questa sarà la mia nuova casa :)