Youtube-dl ou l'alternative au plugin flash pour télécharger des vidéos

Posté le 3 décembre 2012

Utilisateur ravi et convaincu d'OpenBSD sur mon serveur perso et ceux du boulot depuis quelques années, j'ai récemment sauté le pas pour enfin installer également l'OS au poisson qui pique sur ma station de glandouille à la maison. Seulement voilà, pas de plugin "Flash pourri" pour OpenBSD en 64 bits...

Je me moque complètement de cette techno-crado et m'en passerais volontier mais étant aussi passionné par la musique, je passe quand même pas mal de temps à explorer Youtube à la recherche de jolies vidéos de grateux écœurants de virtuosité ou de concerts en tout genre. Je me suis donc mis en quête d'un petit outil simple comme je les aime et je suis tombé sur le fabuleux Youtube-dl.

C'est un outil écrit en Python qui s'utilise en ligne de commande et qui permet de télécharger les vidéos des sites suivants:

$ ./youtube-dl --list-extractors
youtube:playlist
youtube:channel
youtube:user
youtube:search
youtube
metacafe
dailymotion
video.google
video.google:search
photobucket
video.yahoo
video.yahoo:search
DepositFiles
facebook
blip.tv:user
blip.tv
vimeo
myvideo
comedycentral
escapist
collegehumor
xvideos
soundcloud
infoq
mixcloud
stanfordoc
mtv
Youku
xnxx
plus.google
arte.tv
generic

Et oui il sait gérer les playlists ! Ce qui veut dire que vous pouvez lui demander de télécharger l'ensemble des vidéos d'une playlist ou simplement les vidéos numéro n jusqu'à n+5.

Il s'utilise de la façon suivante: Pour une vidéo donnée, on commence par lui demander d'afficher la liste des formats et tailles disponibles:

$ ./youtube-dl -F "http://www.youtube.com/watch?v=IOvFXAg3oXQ"
[youtube] Setting language
[youtube] IOvFXAg3oXQ: Downloading video webpage
[youtube] IOvFXAg3oXQ: Downloading video info webpage
[youtube] IOvFXAg3oXQ: Extracting video information
Available formats:
44      :       webm    [480x854]
35      :       flv     [480x854]
43      :       webm    [360x640]
34      :       flv     [360x640]
18      :       mp4     [360x640]
5       :       flv     [240x400]
17      :       mp4     [144x176]

On peut alors télécharger la vidéo au format voulu:

$ ./youtube-dl -f 44 -t "http://www.youtube.com/watch?v=IOvFXAg3oXQ"

L'option -f permet, vous l'aurez compris, de spécifier le format et la taille désirés tandis que l'option -t indique que l'on souhaite nommer notre fichier final avec le titre de la vidéo.

Pour une playlist complète, j'utilise cette commande:

$ ./youtube-dl -A --prefer-free-formats \
   -t -c  "http://www.youtube.com/playlist?list=PLB88BBE39FAF18365"

L'option -A numérote chaque fichier vidéo suivant l'ordre de la playlist, --prefer-free-formats vous permettra, comme son nom l'indique, de télécharger les vidéos dans un format libre de préférence, si disponible. Et enfin -c reprend le téléchargement là où il l'avait laissé en cas d'arrêt volontaire ou non (très pratique). A noter que par défaut, youtube-dl télécharge toujours la taille de vidéo la plus élevée pour le format choisi, sauf si elle est précisée.

Cet outil possède une pléthore d'options et je vous encourage à y jeter un œil via la commande:

 $ ./youtube-dl -h

Il est également possible de créer un petit fichier de config contenant les options les plus couramment utilisées dans ~/.config/youtube-dl.conf et listées comme ceci:

-t
--prefer-free-formats
--console-title

Alors là, c'est le moment où vous me dites: "Oui c'est bien joli tout ça mais c'est pénible de devoir télécharger la vidéo en entier avant de pouvoir la lire, au moins avec "flash pourri" on pouvait la voir en streaming...".

Vous avez parfaitement raison, et c'est pourquoi je vais vous donner une petite astuce. Vous allez avoir besoin d'installer yad, une alternative avantageuse à Xdialog et Zenity, ainsi que du très connu VLC. Ensuite, copier/coller le script suivant dans un fichier que vous appelez comme vous voulez. Je l'ai appelé yt:

#!/bin/sh
PLAYER="cvlc --play-and-exit --key-quit q --no-video-title-show --network-caching=8192"
YTDL_PATH="${HOME}/apps/youtube-dl"

MYURL=`yad --geometry=360x104 --title="Youtube-dl" --entry --entry-label="Entrez l'URL:"`
if [ -n "$MYURL" ]; then
    ${YTDL_PATH} -t --max-quality 44 --prefer-free-formats \
    -g $MYURL | xargs $PLAYER 
fi

Rendez-moi tout ça exécutable à grand coup de :

$ chmod +x yt

Exécutez-le et vous verrez une petite fenêtre apparaître vous demandant de coller l'URL de la vidéo. Validez par Ok et attendez quelques secondes. Vous visionnerez alors votre vidéo via VLC et le tout en streaming. Vous pouvez bien sûr, associer l'exécution de ce script à un raccourci clavier pour plus de souplesse.

Voilà ! en espérant vous avoir rendu service ;)

PS: ah oui j'oubliais, youtube-dl marche sur les systèmes d'exploitation du bien (*BSD, Linux...) mais aussi sur l'OS aux fenêtres sales ainsi que l'OS à la pomme pourrie (oui je sais c'était petit et mesquin...désolé...) ;)

Commentaires

#1

Nono, le 4 décembre 2012 à 09:05 :

Ah, intéréssant ca !

J'utilise movgrab ( https://sites.google.com/site/columscode/home/movgrab ) pour l'instant :)

Moins de fonctionnalité sur youtube, mais supporte plus de site.

#2

Comète, le 4 décembre 2012 à 10:38 :

Oui je connais Movgrab, il est très bien aussi mais il nécessite une compilation. Youtube-dl est plus portable.

#3

Dotux, le 4 décembre 2012 à 14:01 :

Autant, ça marche super pour Youtube, vimeo aussi d'ailleurs.

Par contre pour Dailymotion c'est une autre histoire...
On doit pouvoir récupérer sur dl, 1/10...

#4

Comète, le 4 décembre 2012 à 15:22 :

Possible, je n'ai hélas pas encore testé avec Dailymotion. Merci pour l'info, je testerai.

#5

PostBlue, le 4 décembre 2012 à 15:42 :

Pour la consultation seule et garder le streaming, je préfère youtube-viewer qui utilise mplayer. Bonne suggestion néanmoins, j'aime beaucoup ce script.

#6

Comète, le 4 décembre 2012 à 16:15 :

@PostBlue: Je ne connais pas ce dernier, mais je jetterai un oeil. Cela dit, il est tout à fait possible d'utiliser mplayer à la place de vlc dans le script.

#7

plop, le 10 janvier 2013 à 19:26 :

Il existe weboob aussi : http://weboob.org (via l'application videoob).

Ça permet non seulement te télécharger, mais aussi d'effectuer les recherches sur tous les sites d'un coup (ou de programmer des téléchargements réguliers).

#8

Comète, le 10 janvier 2013 à 20:15 :

Effectivement, ça fait un moment que je me dis qu'il faudrait que je l'essaie. Je crois qu'il va falloir que je me lance. La communauté autour de weboob à l'air vraiment active.

#9

ifrene, le 14 janvier 2013 à 19:29 :

Je viens d'aller voir Weboob, ça fait BEAUCOUP plus que de la vidéo.

J'essaye de suite...

#10

david96, le 20 mars 2013 à 13:12 :

@Dotux pour daylimotion tu as clive

http://doc.ubuntu-fr.org/clive

Sinon merci Comète pour l'article, malheureusement youtube-dl bien que dans les paquets debian ne semble plus fonctionner pour youtube.

#11

enebre, le 28 juin 2013 à 21:56 :

Avec xubuntu ça coince, puis je corriger ce problème ?

sh /home/enebre/.scripts/yt
Traceback (most recent call last):
File "/usr/bin/youtube-dl", line 6, in <module>
youtube_dl.main()
File "/usr/lib/python2.7/dist-packages/youtube_dl/__init__.py", line 606, in main
_real_main(argv)
File "/usr/lib/python2.7/dist-packages/youtube_dl/__init__.py", line 590, in _real_main
retcode = fd.download(all_urls)
File "/usr/lib/python2.7/dist-packages/youtube_dl/FileDownloader.py", line 727, in download
videos = self.extract_info(url)
File "/usr/lib/python2.7/dist-packages/youtube_dl/FileDownloader.py", line 465, in extract_info
ie_result = ie.extract(url)
File "/usr/lib/python2.7/dist-packages/youtube_dl/InfoExtractors.py", line 99, in extract
return self._real_extract(url)
File "/usr/lib/python2.7/dist-packages/youtube_dl/InfoExtractors.py", line 1386, in _real_extract
new_url = self._test_redirect(url)
File "/usr/lib/python2.7/dist-packages/youtube_dl/InfoExtractors.py", line 1374, in _test_redirect
response = opener.open(HeadRequest(url))
File "/usr/lib/python2.7/urllib2.py", line 396, in open
protocol = req.get_type()
File "/usr/lib/python2.7/urllib2.py", line 258, in get_type
raise ValueError, "unknown url type: %s" % self.__original
ValueError: unknown url type: /home/enebre/.scripts/yt:
VLC media player 2.0.6 Twoflower (revision 2.0.6-0-gbe9623c)
[0x93c8438] dummy interface: using the dummy interface module...
^C

#12

enebre, le 7 août 2013 à 19:07 :

C'est bon ça fonctionne maintenant, une maj à certainement corrigé le problème.
Merci pour ce petit script

#13

Comète, le 7 août 2013 à 20:07 :

@enebre: Pour ma part, je n'utilise pas la version packagée de Youtube-dl parce qu'il ne s'agit que d'un seul fichier, qu'il est mis à jour très régulièrement et qu'il est capable de se mettre à jour lui-même via un "youtube-dl -U".
Je l'ai simplement déposé dans un dossier de mon répertoire perso et je le mets à jour quand j'ai une vidéo qui bloque.
J'ai fait un petit update de ce billet avec une version très légèrement améliorée de ce script. Il utilise Yad à la place de Xdialog ce qui permet d'appuyer sur ENTER au clavier pour valider, chose que je n'ai pas réussi à gérer avec Xdialog...

#14

enebre, le 10 août 2013 à 17:48 :

Salut Comète : J'ai essayé ton petit script pour la récupération via yt, mais je n'obtiens rien ???

#15

enebre, le 10 août 2013 à 18:22 :

voici le retour du terminal, même si j'inscrit que youtube-dl se trouve dans /usr/bin/ pas de résultat ???

~/yt
/home/marc/yt: 6: /home/marc/yt: /home/marc/apps/youtube-dl: not found
VLC media player 2.0.8 Twoflower (revision 2.0.8a-0-g68cf50b)
[0x83314f0] dummy interface: using the dummy interface module...

#16

Comète, le 10 août 2013 à 20:59 :

@enebre: d'après l'erreur qui est retournée, il ne trouve pas youtube-dl dans /home/marc/apps/youtube-dl. Le script considère que tu as un dossier apps dans ton $HOME contenant youtube-dl. Si pour toi, il est ailleurs remplace le chemin $HOME/apps/youtube-dl par le chemin réel sur ta machine.

#17

enebre, le 11 août 2013 à 13:57 :

J'ai changé un peu le script et ça roule, super merci pour ton aide.
#!/bin/sh
PLAYER="cvlc --play-and-exit --key-quit q --no-video-title-show --network-caching=8192"

MYURL=`yad --geometry=360x104 --title="Youtube-dl" --entry --entry-label="Entrez l'URL:"`
if [ -n "$MYURL" ]; then
$youtube youtube-dl -f 34 --prefer-free-formats \
-g $MYURL | xargs $PLAYER
fi

#18

enebre, le 11 août 2013 à 14:02 :

et pour avoir mplayer en lieu et place de cvlc :
#!/bin/sh
PLAYER="mplayer play-and-exit key-quit q no-video-title-show network-caching=8192"

MYURL=`yad --geometry=360x104 --title="Youtube-dl" --entry --entry-label="Entrez l'URL:"`
if [ -n "$MYURL" ]; then
$youtube youtube-dl -f 34 --prefer-free-formats \
-g $MYURL | xargs $PLAYER
fi

#19

enebre, le 11 août 2013 à 14:34 :

Et si j'aimerais en même temps télécharger la vidéo que devrais-je ajouter à ton script de streaming ?

Poster un commentaire