youtube-dl + vlcopen
Lire directement les vidéos youtube (& cie) dans VLC

S’affranchir efficacement de flash pour lire les vidéos directement dans VLC

Vous le savez comme moi, flash c’est le mal. Et voici LA solution qui vous fera franchir le pas d’un bannissement (espérons permanent) du vil greffon sans pour autant faire une croix sur les vidéos des plateformes d’hébergement (youtube, dailymotion, vimeo, etc).

Cela consiste en l’emploi coordonné de deux scripts qui vont vous permettre de lire directement une vidéo distante dans votre lecteur habituel (VLC, mplayer ou autre).

1) Installation de youtube-dl

Sous GNU-Linux, la méthode que je trouve la plus simple est de passer par le gestionnaire d’environnement python pip.

  1. sudo apt-get install python-pip
  2. sudo pip install youtube-dl

Veillez à mettre à jour l’application de temps en temps, car les plugins de gestion par plateforme sont nombreux et les modifications fréquentes.

  1. sudo pip install -U youtube-dl

2) Lancement illico grâce à vlcopen.sh

youtude-dl est un super logiciel, efficace dans bien des situations, mais son utilisation en ligne de commande s’avère à la longue un peu rédhibitoire pour une utilisation en tant que simple utilisateur.

D’où le recours à un second script, mis à disposition par swarminglogic,qui va apporter un peu de souplesse d’utilisation et ouvrir la vidéo encore plus vite que si vous y aviez accédée directement depuis la page youtube, grâce à un raccourci clavier.

  1. #!/bin/bash
  2.  
  3. if [ $# -eq 1 ] ; then
  4.     path=$1
  5. else
  6.     clipboard=$(xclip -selection clipboard -o)
  7.     if [ $(<<<$clipboard grep -P "^http") ] ; then
  8.         path=$clipboard
  9.     else
  10.         if [ -t 1 ] ; then
  11.             echo "Bad clipboard path: $clipboard" >&2
  12.         else
  13.             notify-send "Bad clipboard path: $clipboard"
  14.         fi
  15.         exit 1
  16.     fi
  17. fi
  18.  
  19. #$1 processid, $2 tempdir $3 logfile
  20. function cleanup {
  21.     echo "-------------------------------------------"
  22.     echo "Cleaning up"
  23.     kill -9 $1 &> /dev/null
  24.     if [ -n "$2" ] ; then rm $2/* ; fi
  25.     if [ -n "$2" ] ; then rmdir $2 ; fi
  26.     if [ -n "$3" ] ; then rm $3 ; fi
  27. }
  28.  
  29.  
  30. echo "Opening $path"
  31. tmpvlcopen=/tmp/vlcopen/
  32. [ ! -d $tmpvlcopen ] && mkdir $tmpvlcopen
  33. tmpdir=$(mktemp -d --tmpdir=$tmpvlcopen)
  34.  
  35. # If the tmpdir path doesn't include "/tmp/vlcopen" something went bad!
  36. if [ "${tmpdir/$tmpvlcopen}" = "$tmpdir" ] ; then
  37.     echo "Aborting: failed to create proper temporary directories" >&2
  38.     exit 1
  39. fi
  40.  
  41. cd $tmpdir
  42. echo "Temporary directory: $tmpdir"
  43. echo "Getting video: $path"
  44. downloadlog=$(tempfile)
  45. (youtube-dl --restrict-filenames --no-part "$path" &> $downloadlog)&
  46. processId=$!
  47. echo "ProcessID: $processId"
  48. echo "Waiting for file creation"
  49.  
  50. count=0
  51. while [ $(ls -1 | wc -l) -eq 0 ] ; do
  52.     # check if process is done.
  53.     if ! kill -0 $processId &>/dev/null ; then
  54.         if [ -t 1 ] ; then
  55.             echo "-------------------------------------------">&2
  56.             echo "Error: youtube-dl finished without output." >&2
  57.             echo "Error: Bad URL?" >&2
  58.             echo "---------------- Download Log -------------">&2
  59.             cat $downloadlog >&2
  60.         else
  61.             notify-send "Bad URL: $path $(cat $downloadlog)"
  62.         fi
  63.         cleanup $processId "$tmpdir" "$downloadlog"
  64.         exit 0
  65.     fi
  66.     sleep 0.5
  67.     ((count++))
  68.     if [ $count -eq 20 ] ; then
  69.         if [ -t 1 ] ; then
  70.             echo "Timed out" >&2
  71.         else
  72.             notify-send "Timed out"
  73.         fi
  74.         exit 0
  75.     fi
  76. done
  77.  
  78. sleep 0.1
  79. echo "Opening file: $(ls -1 | head -n 1)"
  80. vlc "$(ls -1 | head -n 1)" &>/dev/null
  81. cleanup $processId "$tmpdir" "$downloadlog"

Télécharger

Ce script se comporte comme une capsule pour youtube-dl. Il va analyser le contenu du presse-papier, et s’il détecte une url prise en charge, va créer un répertoire temporaire, y télécharger la vidéo, l’ouvrir avec VLC après quelques instants et supprimer automatiquement tous les fichiers temporaires à la fermeture.

Il suffit d’enregistrer le script (sous le nom vlcopen.sh par exemple) dans un répertoire inclus dans votre $PATH, le rendre exécutable (chmod +x vlcopen.sh) et d’associer un raccourci clavier à son exécution.

Typiquement sous openbox, j’ai rajouté une section comme suit à mon rc.xml.

  1. <keybind key="W-y">
  2.   <action name="Execute">
  3.     <startupnotify>
  4.       <enabled>true</enabled>
  5.       <name>vlcopen</name>
  6.     </startupnotify>
  7.     <command>vlcopen.sh</command>
  8.   </action>
  9. </keybind>

Dès lors, dans les faits, lorsque je veux regarder une vidéo, je fais un clic-droit > copier l’url de la page soit sur la page courante, soit sur le lien à analyser, puis super + y (oui j’ai choisi y pour "youtube" mais à vous d’adapter au besoin), et voilà !

Seul bémol, si la vidéo est longue et que vous êtes impatient, vous ne pourrez pas avancer directement la lecture à un point qui n’a pas encore été téléchargé.

source github.com/swarminglogic