
DownTube: lo script per scaricare i video sul PC
È sufficiente eseguirlo, passargli l’indirizzo del filmato e scegliere un nome da dare al file, dopodiché lui lo scarica e lo converte in formato MPEG
(pagina 1 di 2)

A volte capita di fare un giro su
YouTube (www.youtube.com) e
trovare qualche video interessante
che magari ci piacerebbe
rivedere in seguito, ma senza dover per
forza di cose ricollegarci a Internet ogni
volta che vogliamo farlo. Purtroppo, YouTube non prevede un sistema per scaricare i filmati sull’hard
disk, tutt’altro, per cui dobbiamo attrezzarci per poterlo fare da
“soli”. In rete sono disponibili numerosi programmi per eseguire
il download dei video, ma come al solito non ci siamo
accontentati e abbiamo creato uno script composto da poche
righe di codice Bash (per la precisione sono 12 in tutto!), che
consente di scaricare i filmati sull’hard disk del PC. Utilizzarlo
è facilissimo, basta andare su YouTube cercare il filmato che ci
interessa e copiarne l’indirizzo. A questo punto, basta eseguire
lo script, passargli l’URL appena copiato e inserire un nome a
nostra scelta. Sarà lo script a scaricare
il filmato in locale e convertirlo
in formato MPEG compatibile
con qualsiasi player multimediale:
./downtube
Ecco come si usa praticamente lo script:
./downtube http://www.youtube.com/watch?
v=-v-UQ5XnLz8 ramon
Adesso passiamo all’analisi dello script
[01-06] Le prime 6
righe si occupano di inizializzare le variabili usate per “governare”
lo script: in particolare la prima riga comunica al sistema
con quale programma eseguire lo script (/bin/bash, in questo
caso); alla riga numero 02 troviamo un controllo sul numero
di parametri passati allo script, che deve essere di 2: la condizione
posta è infatti che se il numero di parametri ($#) è
inferiore a 2 (-lt sta per “less than”, minore di), venga stampato
un messaggio a video e lo script termini (exit). Il messaggio
fornito all’utente è semplicemente il nome dello script seguito
dai nomi dei parametri che ci si attende. Il nome dello script
non viene scritto nel codice, in quanto lo script stesso potrebbe
essere rinominato dall’utente, ma viene ricavato dalla riga di
comando: il nome del programma eseguito è infatti passato al
programma stesso come primo elemento della riga di comando,
e si trova quindi nella variabile $0. Alle righe 03 e 04 i due
parametri forniti dall’utente vengono assegnati a due variabili
dal nome identico ai parametri stessi (per chiarezza di codice).
Alla riga 05 viene preimpostato un nome per il file temporaneo
in cui verrà salvato il video scaricato da YouTube, mentre
alla riga 06 viene salvato in una variabile l’URL che verrà
utilizzato per scaricare il video (una funzione PHP messa a
disposizione da YouTube stesso). I parametri attesi dallo script sono video_url e video_name: video_url è l’indirizzo del video
così come è visualizzato nella barra degli indirizzi del browser
(ad esempio “http://it.youtube.com/watch?v=5-VBaaCF9LAh) e
video_name è il nome del file che vogliamo ottenere in locale,
senza estensione, la quale verrà aggiunta automaticamente. [07
-08] Recentemente YouTube ha introdotto un sistema piuttosto
complesso di identificazione dei video, motivo per il quale molti
degli script Bash che si trovano in rete non funzionano più. Essi
si basano sulla ricerca della stringa “player2.swf” nel codice
della pagina web, stringa che era seguita dal codice identificativo
del video nel database di YouTube. Nel nuovo formato, invece,
il video è identificato da una query un po’ più lunga, che
è ricavabile dalla stringa relativa alla visualizzazione a schermo
intero. In particolare, in una pagina di YouTube, si troverà la
seguente riga (presa dall’URL di esempio fornito prima):
var fullscreenUrl = ‘/watch_
fullscreen?fs=1&BASE_
YT_URL=http%3A%2F%2Fit.youtube.com%2F&vq=
None&video_id=5-VBaaCF9LA&l=199&sk=ENVhxKJy4
kjxndFO5UqMUwC&fmt_map=&t=OEgsToPDskIkXath7h_
KwuC11avhzyWM&hl=it&plid=AARIuJZ3CLJEr
WCBAAAAIAAQAAA&title=Val di Fiemme’;
La query che ci interessa si trova subito dopo la parola “fullscreen”,
dal punto di domanda in poi, fino alla stringa “&title”
esclusa; per ricavarla è sufficiente estrarre la riga con un
comando grep, per poi rimuovere con il comando sed le parti
che non ci interessano; per ottenere la riga del codice HTML
utilizzeremo il comando wget, che ci servirà anche in seguito
per scaricare effettivamente il video; passando a wget un indirizzo,
esso scarica la pagina associata sul disco: utilizzando
però l’opzione -O possiamo indicare il nome del file su cui
scaricare la pagina; per evitare di creare un ulteriore file temporaneo,
inoltre, indichiamo come nome di file “-” che wget
interpreta come “standard output”, stampando quindi il codice
della pagina a video. Con un comando pipe, poi possiamo passare
tale codice ad altri comandi, come grep e sed. In particolare,
il primo comando sed rimuove qualsiasi carattere (.*) prima
della stringa “fullscreen?” inclusa, mentre il secondo rimuove
la stringa “&title” e tutto ciò che la segue (.*) fino alla fine
della riga. Una volta che abbiamo ottenuto la query è sufficiente
concatenarla con l’URL della funzione PHP che YouTube
mette a disposizione per scaricare i video, che è “http://youtube.
com/get_video.php”, cosa che viene fatta alla riga 08.
[09-
10] Prima di scaricare il video, infine, cancelliamo eventuali
file temporanei lasciati da esecuzioni precedenti (riga 09). A
questo punto, per scaricare il video è sufficiente passare a wget
l’indirizzo ricavato alla riga 08, unitamente al nome del file
dove porre il video (che è contenuto nella variabile tmp_file,
impostata alla riga 05).
[11-12] La riga 11 contiene la chiamata
al programma ffmpeg, che converte il file in formato FLV in
un file in formato MPEG; le varie opzioni passate al comando
sono: “-ab” imposta il bit rate del flusso audio (in kbit/s), “-ar”
imposta la frequenza di campionamento dell’audio, “-b” stabilisce
il bit rate del flusso video, “-s” imposta la dimensione
del video. Una volta terminato il programma ffmpeg possiamo
cancellare il file temporaneo in formato FLV (riga 12).
 |
Dopo il download la conversione con FFmpeg |
Da Youtube a MPeG
Downtube.sh