Je suis Charlie

Autres trucs

Accueil

Seulement les RFC

Seulement les fiches de lecture

Mon livre « Cyberstructure »

Ève

Regarder les films débiles de YouTube avec uniquement du logiciel libre

Première rédaction de cet article le 21 octobre 2009
Dernière mise à jour le 4 novembre 2010


Aujourd'hui, l'Internet sert presque uniquement à regarder les vidéos publiées sur YouTube. Mais le mode de publication par défaut est sous forme d'animation Flash, une technologie fermée, contrôlée par un seul acteur, Adobe. Peut-on voir les mêmes films débiles que tout le monde avec uniquement du logiciel libre ?

Si on utilise une machine qui ne fait tourner que du logiciel libre, dans mon cas une Debian, version « lenny » qui n'a que la section « main », celle qui ne contient que du logiciel libre, et donc pas celui de la section « non-free », que voit-on sur YouTube ? « Hello, you either have JavaScript turned off or an old version of Adobe's Flash Player. Get the latest Flash player. » Eh oui, YouTube impose l'utilisation de la technologie fermée et privatrice Flash.

Peut-on utiliser un autre logiciel pour voir ses animations ? Gnash, équivalent d'Adobe Flash en logiciel libre n'a jamais vraiment atteint un niveau suffisant pour être utilisé couramment.

Mais il existe une autre solution. La page renvoyée par YouTube contient le nom du film (au format FLV). On peut donc récupérer celui-ci avec un logiciel comme wget ou curl. Il y a toutefois plus pratique, utiliser l'excellent logiciel youtube-dl qui automatise tout cela. Il analyse le source HTML de la page pour vous et récupère le film. Une fois celui-ci stocké sur votre disque, vous pourrez le regarder à loisir avec des logiciels comme mplayer ou vlc (FLV est lisible par beaucoup de logiciel libres, il n'y a même pas besoin de codecs non-libres).

Voici un exemple d'utilisation :

% youtube-dl -t 'http://www.youtube.com/watch?v=ro6sTexFQbU' 
[youtube] Setting language
[youtube] ro6sTexFQbU: Downloading video info webpage
[youtube] ro6sTexFQbU: Extracting video information
[download] Destination: A_la_belle_viiiie-ro6sTexFQbU.flv
[download] 100.0% of 6.24M at   65.24k/s ETA 00:00 
% mplayer A_la_belle_viiiie-ro6sTexFQbU.flv
...

Les apostrophes autour de l'URL sont là parce que le point d'interrogation est un caractère spécial pour le shell. L'option -t est là pour que le fichier prenne comme nom le titre du film (autrement, le fichier a un nom inhumain, l'identifiant YouTube du film.)

youtube-dl fonctionne par scraping de la page Web. Une telle technique est très fragile : il suffit que YouTube change son format et tout est à recommencer. En pratique, lorsque cela arrive, une nouvelle version de youtube-dl sort en général rapidement.

Enfin, pour venir, quelques bons films choisis tout à fait subjectivement et arbitrairement sur YouTube :

Je trouve personnellement que youtube-dl manque de quelques options pratiques comme la possibilité de lancer un programme de visualisation une fois le chargement terminé. Le petit script shell suivant répond à ce problème. On l'utilise ainsi :

% yt 'http://www.youtube.com/watch?v=7sjlX8ueFfU'
[youtube] Setting language
[youtube] 7sjlX8ueFfU: Downloading video info webpage
[youtube] 7sjlX8ueFfU: Extracting video information
[download] Destination: UN_VILLAGE_FRANCAIS_SAISON_2-7sjlX8ueFfU.flv
[download] 100.0% of 1.19M at  284.76k/s ETA 00:00 
MPlayer 1.0rc2-4.3.2-DFSG-free (C) 2000-2007 MPlayer Team
CPU: Intel(R) Pentium(R) Dual  CPU  E2140  @ 1.60GHz (Family: 6, Model: 15, Stepping: 13)
...
Playing UN_VILLAGE_FRANCAIS_SAISON_2-7sjlX8ueFfU.flv.

et on a à la fois le film enregistré en un endroit précis et sa visualisation tout de suite. Le script est simplement :

#!/bin/sh

if [ -z "$1" ]; then
    echo "Usage: $0 YouTube-URL" >&2
    exit 1
fi

url=$1
LOGFILE=youtube-dl-$$.log

set -e
cd ~/tmp
youtube-dl -t $url | tee $LOGFILE
file=$(awk '/Destination:/ {print $3}' < $LOGFILE)
if [ -z $file ]; then
    echo "$url: invalid YouTube URL" >&2
    exit 1
fi
mplayer $file
rm -f $LOGFILE

Comme youtube-dl n'a apparemment pas d'option pour indiquer simplement le nom du fichier enregistré sur la sortie standard (les options -g et -e n'affichent pas exactement ce nom, et elles inhibent le téléchargement), il faut utiliser awk pour analyser le résultat de youtube-dl.

Bien sûr, comme le fait de pouvoir regarder YouTube fait partie des droits de l'homme fondamentaux, plein de gens ont développé d'autres mécanismes pour le faire avec du logiciel libre. Ainsi, Yannick Roehlly, me signale get-flash-videos, quasiment l'équivalent de youtube-dl mais écrit en Perl (et qui gère d'autres services que YouTube). Christophe Narbonne me recommande YouTube Perfect, un script Greasemonkey pour voir YouTube. Marc Hertzog suggère un truc pour obtenir de YouTube un fichier MP4. Et Yannick Palanque préfère utiliser cclive (il existe aussi un clive).

Et pour Dailymotion ? Pas de problème, youtube-dl le gère depuis peu mais, apparemment, clive et cclive le font aussi. Notez que Dailymotion, contrairement à son concurrent, a en test une distribution de vidéos ne dépendant pas de logiciel non-libre : http://openvideo.dailymotion.com/. (Voir le communiqué de la FSF, « Dailymotion's support for Ogg is a big deal ».) Pour le service Vimeo, en revanche, il y a http://gist.github.com/146789 (suggestion de Marc Hertzog).

Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)

Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)