Linux: salvare video in streaming e da YouTube Gennaio 9, 2008
Inviato da davide in : Informatica, Linux, Tecnologia , trackback
Un’argomento molto interessante e che spesso viene trascurato nel mondo di oggi, in cui quasi tutti i contenuti multimediali sono ormai in streaming, è appunto il download di filmati e musica da siti che ne propongono solo la visualizzazione “live”.
Tratterò due casi in particolare, che coprono secondo me il 90% delle esigenze di ognuno di noi: salvataggio di filmati da YouTube (o qualsiasi altro sito che come YouTube usa filmati in formato Flash) e salvataggio di veri e propri filmati in streaming (per intenderci, ad esempio, quelli delle news della BBC su news.bbc.co.uk nella sezione Audio and Video).
AGGIORNAMENTO: ho pubblicato una nuova versione di questo articolo per chi usasse Windows o Mac (dovrebbe funzionare per tutte le piattaforme); la potete trovare QUI.
I programmi che ci serviranno sono: ffmpeg nel primo caso, mplayer nel secondo. Tutto qui!
Consiglio anche, per chi non lo avesse, l’uso di mplayerplug-in, il plugin per Mozilla di mplayer. Lo potete trovare qui, o per chi usa Ubuntu, installando “mozilla-mplayer” da apt-get o Synaptic.
1) Salvare video da YouTube e simili (siti che usano video in formato Flash)
Qui la cosa è molto semplice. Una volta imparato come fare basta un solo comando e avremo il nostro filmato!
EDIT: ad oggi la via più veloce è usare questo servizio web: YouDownload. Senza installare nulla, basta che incolliate l’URL del video di YouTube che vi interessa e verrà lanciato in automatico lo scaricamento del video!
In generale, se vogliamo salvare il filmato “a mano”, facciamo così: sul sito che contiene il video da scaricare, mettiamo in “play” il video che vogliamo scaricare, fino a che la barra di caricamento non indica che il video è stato caricato tutto (una volta fatto play si può anche mettere in pausa). Su YouTube, ad esempio, la barra di caricamento è rossa; quando il video è stato tutto caricato appare così:

Bene. Ciò vuol dire che il video è stato tutto scaricato nella nostra cache, che si trova nella cartella /tmp (io uso Firefox, se altri browser non si comportano così fatemelo sapere, grazie!).
Tenendo aperto il browser (altrimenti vengono cancellati i file temporanei) andiamo in /tmp e cerchiamo un file con nome che inizia per Flash, ad esempio FlashwgX0n9. Se ce n’è più di uno, probabilmente avete più finestre aperte con video diversi. Per fare una prova, potete aprire i files con mplayer per vedere qual’è quello giusto
ora semplicemente usiamo ffmpeg per codificare il file e salvarcelo in un altro formato, ad esempio avi:
ffmpeg -i FlashwgX0n9 -sameq out.avi
dove -i è seguito dal nome del file di input e out.avi è il file che vogliamo in uscita. L’opzione -sameq se vi può interessare, serve per mantenere la stessa qualità del file in ingresso; produce però file di dimensioni tipicamente più grosse del file in ingresso. Con ffmpeg potete provare a giocare con le varie opzioni di compressione, ed ottenere compressioni audio e video diverse.
2) Salvare filmati in “streaming reale”
Il vero streaming si distingue dai filmati in flash per il fatto che vegono usati particolari protocolli, quali ad esempio rtsp://, mms:// etc.. quindi il formato degli url è diverso. Solitamente però non è semplice trovare l’url reale del video, inoltre è necessario spesso (ad es su Windows) usare particolari programmi di cattura video… su Linux grazie a mplayer non è così!
Una volta che sappiamo l’indirizzo di un video in streaming possiamo infatti salvarlo così:
mplayer “URL del filmato” -dumpstream -dumpfile out.avi
L’opzione -dumpstream indica che vogliamo salvare (fare il dump) dello stream sul nostro computer e non visualizzarlo direttamente; -dumpfile non è necessario, ma permette di specificare il nome del file nel quale salvare l’output (se omesso lo stream viene salvato con nome stream.dump). Anche in questo caso, ce la siamo cavati con un solo comando
!
Come ottenere l’URL del filmato in streaming?? Se non lo abbiamo direttamente dobbiamo ingegnarci un attimo.
Se siamo molto fortunati, possiamo trovarlo direttamente nel codice HTML della pagina. A tale scopo, è possibile usare qualche tool di analisi tipo Firebug, descritto in un mio precedente articolo.
Se siamo meno fortunati, ma abbiamo ad esempio mplayerplug-in, quando un filmato in streaming viene caricato nella pagina web, verranno al contempo creati nella cartella /tmp del nostro pc alcuni file il cui nome inizia per mplay, ad esempio mplayy0Fnx3. Apriamoli con un editor di testo o con un semplice cat o less, e cerchiamo un indirizzo che possa essere quello del video. Oppure, cosa più semplice è ad esempio, da /tmp, lanciare l’utilissimo grep per individuare direttamente solo gli url che ci interessano:
grep -E ‘(mms|rtsp|rtp)://’ mplay*
La lista di protocolli cercati qui non è completa… se con questo comando non otteniamo nulla, possiamo allargare la ricerca facendo ad es:
grep “://” mplay*.
Individuato l’url, usiamo mplayer come indicato sopra per salvarlo. Anche in questo caso mplayer offre numerose opzioni, guardate nel man se vi serve qualcosa di particolare.
Ultima cosa: a quanto ho notato, i server di streaming sono solitamente impostati in modo da inviare il contenuto in tempo reale, ciò vuol dire che il video viene inviato a una banda tale da inviare 1 sec. di video ogni secondo “reale”. Per cui, se state salvando un filmato in streaming che dura 2 ore, probabilmente ci metterete 2 ore a salvarlo.
Direi che mi sono dilungato abbastanza per oggi…
ho cercato di chiarire bene il perchè di ogni passaggio: se c’è qualche suggerimento, aggiunta o problema, non esitate a contattarmi!









Commenti»
ciao,
allora:ho provato il link su megavideo, e anche questo sito usa filmati in flash (non è quindi streaming reale).
Grazie all’estensione Firebug per firefox (c’è un accenno su questo articolo, più un altro post dedicato ad esso), nella sezione network è possibile vedere tutte le richieste generate dalla pagina, tra cui quella relativa al video. L’url del video è:
http://www263.megavideo.com/files/27bb1b9060f10b07294d41ecea057a29/
Altra opzione è quella di lasciare caricare completamente il video dal browser e poi, siccome siamo in linux, andarci a prendere il file generato nella cartella /tmp come descritto in questo articolo. Siccome il video in questione è di 329 MB ti consiglierei di usare il link diretto
Scusa, l’url è questo:
http://www.megavideo.com/?v=DXTR684F
Grazie mille a te. Comunque per quanto riguarda youtube ho risolto il problema con il plugin per Firefox chiamato Fast Video Download da te segnalato in un altro articolo.
Per quanto riguarda invece i filmati in streaming reale, ho provato la procedura in vlc da te descritta con questo url ma non mi funziona.
Boh!!!
ciao Carlo,
pare che al momento il download non vada! ecco perchè non fa nulla: probabilmente stanno facendo una delle solite modifiche al server su cui mantengo la pagina, purtroppo non dipende da me. Se non risolvono il problema tecnico entro un paio di giorni provvederò a spostarlo da qualche altra parte, è già capitato altre volte e ora inizio a stancarmi.
Grazie mille della segnalazione
Perdonami se faccio una domanda stupida, ma spero tu abbia pietà per uno dei tanti Dummies di Linux.
La domanda riguarda YouDownload. Una volta incollato l’URL e cliccato sul pulsante Download, io non ho idea di dove viene scaricato e salvato il file. In pratica, non so come richiamarlo. Mi puoi aiutare?
Grazie
Carlo
ciao, innanzitutto: per salvare video da youtube non ti serve la parte 2 dell’articolo, quella è relativa solo allo streaming “vero”, youtube invece usa solo files in flash.
Tutto quello che ti serve è la parte 1: per la questione di ffmpeg che sembra non andare, ti incollo la configurazione del mio ffmpeg, anche se è un po’ vecchiotta (la tua dovrebbe leggere senz’altro più formati):
FFmpeg version SVN-rUNKNOWN, Copyright (c) 2000-2004 Fabrice Bellard
configuration: –enable-gpl –enable-pp –enable-pthreads –enable-vorbis –enable-libogg –enable-a52 –enable-dts –enable-libgsm –enable-dc1394 –disable-debug –enable-shared –prefix=/usr
libavutil version: 0d.49.0.0
libavcodec version: 0d.51.11.0
libavformat version: 0d.50.5.0
built on Jan 28 2007 22:48:38, gcc: 4.1.2 20070106 (prerelease) (Ubuntu 4.1.1-21ubuntu7)
Direi di provare a codificare un file di prova, ne ho messo apposta uno sul sito, preso da youtube… vedi un po’ se con ffmpeg riesci a codificare questo: filmato_prova
Se: ffmpeg -i filmato_prova output.avi
non va ancora, ti consiglio di fare come consigliato nell’altro mio post, installando il plugin per firefox (ti risparmi senz’altro qualche mal di testa ;)). Trovi tutto QUI.
Tra le altre cose, se non ti interessa ricomprimere il filmato in altri formati, puoi provare semplicemente a vedere se te lo apre un altro programma, ad esempio mplayer, e se va tenertelo così… io ad esempio con mplayer o ffplay riesco a vederli senza problemi.
Fammi sapere, ciao!
Sto seguendo questa guida che sembra molto carina, ma purtroppo non riesco ad ottenere il risultato voluto:
1) Salvare video da YouTube e simili
FFmpeg version SVN-rUNKNOWN, Copyright (c) 2000-2007 Fabrice Bellard, et al.
configuration: –enable-gpl –enable-pp –enable-swscaler –enable-pthreads –enable-libvorbis –enable-libtheora –enable-libogg –enable-libgsm –enable-dc1394 –disable-debug –enable-libmp3lame –enable-libfaadbin –enable-libfaad –enable-libfaac –enable-xvid –enable-x264 –enable-liba52 –enable-amr_nb –enable-amr_wb –enable-shared –prefix=/usr
libavutil version: 1d.49.3.0
libavcodec version: 1d.51.38.0
libavformat version: 1d.51.10.0
built on Dec 20 2007 21:22:28, gcc: 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2)
ffmpeg: symbol lookup error: /usr/lib/libavformat.so.1d: undefined symbol: mpa_decode_header[/code]
2) Salvare filmati in “streaming reale”
MPlayer 1.0rc2-4.1.3 (C) 2000-2007 MPlayer Team
CPU: AMD Athlon(tm) 64 Processor 3200+ (Family: 15, Model: 47, Stepping: 2)
CPUflags: MMX: 1 MMX2: 1 3DNow: 1 3DNow2: 1 SSE: 1 SSE2: 1
Compiled with runtime CPU detection.
mplayer: could not connect to socket
mplayer: No such file or directory
Failed to open LIRC support. You will not be able to use your remote control.
Playing http://www.youtube.com/watch?v=DkV_2EWCSJY.
Resolving http://www.youtube.com for AF_INET6…
Couldn’t resolve name for AF_INET6: http://www.youtube.com
Resolving http://www.youtube.com for AF_INET…
Connecting to server http://www.youtube.com208.65.153.251: 80…
Cache size set to 320 KBytes
Stream not seekable!
Core dumped
Exiting… (End of file)[/code]
ciao Elisa, ottima domanda… sinceramente non so; ovviamente fanno di tutto per nascondere il vero indirizzo dei video, ma le informazioni da qualche parte dovrebbero saltare fuori.
A questo punto, se il video ti interessa molto, direi di usare un tool per catturare pacchetti e intercettare il vero URL della risorsa. Se scegli questa strada, ti consiglio wireshark (ex ethereal) che ha un’ottima interfaccia grafica con la quale puoi filtrare molto bene l’output… puoi lanciare il video in streaming mentre catturi pacchetti, interrompere la cattura dopo un po’ e vedere se tra i pacchetti intercettati trovi l’URL che ti interessa.
La soluzione è senz’altro lunga e un po’ da smanettone ma dovrebbe funzionare nella maggior parte dei casi…
Nel frattempo, se vuoi mandami un esempio del filmato da cui non riesci a tirare fuori le informazioni vedrò di darci un’occhiata
Riesco ormai a salvare quasi tutto..ma qualcosa ancora mi sfugge.
Ci sono dei video in streaming reale di cui non riesco assolutamente a individuare l’URL–ho cercato praticamente in ogni cartella.
La domanda è: l’informazione si trova senz’altro nella tmp (o magari da qualche altra parte) e cercando bene alla fine si trova o è possibile che certi video siano impostati in modo da nascondere l’Url (per cui è inutile perdere tempo..)?