Un semplice script per scaricare in mp3 la traccia di un video su YouTube

Postato da ROb | nella categoria Linux, Utilità | domenica, 20 marzo 2011

2

In questi giorni ho avuto la necessità di scaricare la traccia audio di un video caricato su YouTube.

Per farlo conoscevo già diversi servizi online ma, visto la potenza della shell Linux, ho pensato di scrivere un piccolo script che assolvesse al compito e che potesse sfruttare alcune utility scritte proprio per questi scopi.

La mia intenzione era quella di avere a disposizione uno script a cui potessi passare un solo parametro, l’url della pagina, e che mi salvasse il file in formato mp3 possibilmente con un nome abbastanza esplicativo. Per riuscire a tale scopo mi sono avvalso di due soli comandi: youtube-dl e ffmpeg.

youtube-dl è uno script python in grado di estrarre un file in formato .flv semplicemente passando il path HTTP alla pagina del video. Questa utility compie tutto il lavoro “duro” del mio semplice script ed è anche in grado di scaricare il nome del video legato all’url. Nel mio caso youtube-dl è servito a salvare il titolo del video, per rinominare correttamente il file mp3 e successivamente è servito per fare il download del file video in formato .flv.

La separazione della traccia audio da quella video e la successiva codifica nel formato mp3 è stata invece assegnata a ffmpeg, uno dei più apprezzati comandi per la gestione e fruizione dei video in Linux (e non solo).

Per entrambi i software mi sono però avvalso di versioni più aggiornate di quelle presenti nella mia distribuzione Ubuntu 8.04. Nelle versioni disponibili nei miei repository infatti youtube-dl non era in grado di effettuare il download del video mentre ffmpeg non riusciva a gestire i video nel formato .flv . Per aggiornare lo script python è stato sufficiente effettuare il download del nuovo script e metterlo nella mia cartella di binari dentro ~/bin/ . Per quanto riguarda ffmpeg invece ho prima provato a effettuare una compilazione della distribuzione per rigenerare la nuova versione. Dopo alcuni tentativi falliti, ho deciso di optare per un binario precompilato linkato staticamente per Linux 32bit. Una valida compilazione l’ho trovata al seguente indirizzo: http://horsfall.eu/2010/11/27/ffmpeg-full/ . Il file binario contenente ffmpeg è stato quindi salvato, con i corretti permessi di esecuzione, nella cartella ~/bin.Tale cartella è nella prima posizione della variabile $PATH. In questo modo i binari che si trovano in tale cartella hanno la precedenza su quelli presenti nelle altre cartelle di binari del sistema.

Veniamo ora al mio script, salvato con il nome: youtube2mp3.sh :

#!/bin/bash

url=$1
flvfile=/var/tmp/$$.flv

title=`youtube-dl -e ${url}`
mp3file=~/Desktop/${title}.mp3

youtube-dl ${url} -o ${flvfile}

ffmpeg -i ${flvfile} "${mp3file}"

rm ${flvfile}

L’unico parametro gestito dalla script, il primo, è l’url della pagina in cui si trova il video in YouTube. Lo script estra prima l’informazione del titolo del filmato e la memorizza nella variabile “title”.
Quindi effettua il download del video salvandolo in un file temporaneo che ha come nome il pid del processo bash invocato.
Successivamente converte il video nella traccia audio mp3 che viene salvata nel Desktop con il nome del titolo e suffisso .mp3.
Infine il file temporaneo .flv viene cancellato dalla directory temporanea.

Commenti inviati (2)

E se il titolo del video contiene il carattere “/”?

Mi puoi mandare un caso che faccio un test? Lo script non gestisce bene lo slash all’interno del titolo?
In teoria utilizzando la variabile in questo modo: “${mp3file}” dovrebbe riuscire a salvarlo correttamente, ma per confermarlo dovrei fare prima una prova.

Scrivi un commento