Dans mon usage de YouTube, et des autres plateformes de vidéo, j’aime bien regarder les vidéos hors de mon navigateur. Principalement car je préfère utiliser mon lecteur de vidéos pour cela, mais également car ça me protège de l’encouragement à la consommation que YouTube (et autres) fait avec les suggestions sur le côté.
Pour faire cela, il est nécessaire de télécharger la vidéo1 et de la jouer ensuite avec notre lecteur multimédia préféré.
# Youtube-dl
Il existe un super outil pour télécharger les vidéos d’un peu partout, youtube-dl. Je parlerai dans cet article en permanence de YouTube, mais je vous laisse tester l’outil un peu partout, la liste des sites compatibles est longue comme le bras.
Grâce à cet outil, une simple commande du style
youtube-dl https://www.youtube.com/watch?v=C_UTlTiVQ_0
permet de télécharger
la superbe vidéo de Rodolphe Meyer (Le Réveilleur) sur le dernier rapport du GIEC.
C’est super utile pour archiver du contenu ou pour économiser des ressources
si c’est une vidéo qu’on a prévu de revisionner plus tard.
Avec l’option -F
, on peut savoir quelles sont les définitions2 possibles.
Sans s’éterniser sur tous les formats proposés ici,
on voit différentes vidéos aux formats 1080p3 ou 720p3,
et d’autres options de plus faible définition.
On peut par exemple utiliser une vidéo de faible définition si c’est une conférence
dont le contenu visuel est peu important.
On y voit également des formats audio, les formats vidéos étant muets,
il faudra télécharger les deux fichiers et les fusionner,
c’est fait automatiquement par youtube-dl
mais il est possible d’avoir plusieurs fichiers audio,
dans le cas d’une traduction par exemple.
Exemple d'utilisation de l'option -F
$ youtube-dl -F https://www.youtube.com/watch?v=C_UTlTiVQ_0
[youtube] C_UTlTiVQ_0: Downloading webpage
[info] Available formats for C_UTlTiVQ_0:
format code extension resolution note
249 webm audio only tiny 49k , webm_dash container, opus @ 49k (48000Hz), 18.18MiB
250 webm audio only tiny 60k , webm_dash container, opus @ 60k (48000Hz), 22.28MiB
251 webm audio only tiny 109k , webm_dash container, opus @109k (48000Hz), 40.59MiB
140 m4a audio only tiny 129k , m4a_dash container, mp4a.40.2@129k (44100Hz), 47.93MiB
160 mp4 256x144 144p 42k , mp4_dash container, avc1.4d400c@ 42k, 30fps, video only, 15.86MiB
394 mp4 256x144 144p 59k , mp4_dash container, av01.0.00M.08@ 59k, 30fps, video only, 21.84MiB
278 webm 256x144 144p 79k , webm_dash container, vp9@ 79k, 30fps, video only, 29.34MiB
133 mp4 426x240 240p 74k , mp4_dash container, avc1.4d4015@ 74k, 30fps, video only, 27.47MiB
242 webm 426x240 240p 107k , webm_dash container, vp9@ 107k, 30fps, video only, 39.88MiB
395 mp4 426x240 240p 109k , mp4_dash container, av01.0.00M.08@ 109k, 30fps, video only, 40.52MiB
134 mp4 640x360 360p 144k , mp4_dash container, avc1.4d401e@ 144k, 30fps, video only, 53.48MiB
243 webm 640x360 360p 184k , webm_dash container, vp9@ 184k, 30fps, video only, 68.33MiB
396 mp4 640x360 360p 205k , mp4_dash container, av01.0.01M.08@ 205k, 30fps, video only, 76.04MiB
135 mp4 854x480 480p 207k , mp4_dash container, avc1.4d401f@ 207k, 30fps, video only, 77.00MiB
244 webm 854x480 480p 261k , webm_dash container, vp9@ 261k, 30fps, video only, 96.89MiB
397 mp4 854x480 480p 347k , mp4_dash container, av01.0.04M.08@ 347k, 30fps, video only, 128.61MiB
298 mp4 1280x720 720p60 350k , mp4_dash container, avc1.4d4020@ 350k, 60fps, video only, 129.75MiB
302 webm 1280x720 720p60 558k , webm_dash container, vp9@ 558k, 60fps, video only, 206.84MiB
136 mp4 1280x720 720p 617k , mp4_dash container, avc1.4d401f@ 617k, 30fps, video only, 228.78MiB
247 webm 1280x720 720p 723k , webm_dash container, vp9@ 723k, 30fps, video only, 267.66MiB
398 mp4 1280x720 720p60 1002k , mp4_dash container, av01.0.08M.08@1002k, 60fps, video only, 371.01MiB
299 mp4 1920x1080 1080p60 1244k , mp4_dash container, avc1.64002a@1244k, 60fps, video only, 460.56MiB
303 webm 1920x1080 1080p60 2013k , webm_dash container, vp9@2013k, 60fps, video only, 745.52MiB
399 mp4 1920x1080 1080p60 2082k , mp4_dash container, av01.0.09M.08@2082k, 60fps, video only, 770.91MiB
18 mp4 640x360 360p 395k , avc1.42001E, 30fps, mp4a.40.2 (44100Hz), 146.43MiB
22 mp4 1280x720 720p 746k , avc1.64001F, 30fps, mp4a.40.2 (44100Hz) (best)
Il est évidemment possible de spécifier le format dans lequel nous voulons
regarder la vidéo en utilisant l’option -f
suivie du format désiré.
Avec l’exemple précédent, je peux obtenir le fichier vidéo 1080p sans audio
grâce à la commande suivante:
$ youtube-dl -f 303 https://www.youtube.com/watch?v=C_UTlTiVQ_0
Si on désire avoir le son, soit il faut spécifier le format à utiliser,
soit laisser choisir youtube-dl avec le paramètre bestaudio
:
$ youtube-dl -f 303+bestaudio https://www.youtube.com/watch?v=C_UTlTiVQ_0
Je vous laisse regarder la documentation officielle pour avoir plus d’infos si cela vous intéresse.
# Le visionnage unique
Dans le cas d’un visionnage unique, c’est un peu lourd comme technique, il faut:
- télécharger la vidéo complète, ce qui prend du temps;
- l’ouvrir avec notre lecteur multimédia;
- supprimer la vidéo.
C’est donc le moment de vous présenter mon lecteur multimédia, très sobre mais ultra complet, mpv. Il est parfait comme lecteur de tous les jours et il permet de faire un peu plus. Par exemple, je peux lui passer l’adresse d’une vidéo et il appellera youtube-dl pour la télécharger pendant la lecture, comme lors du visionnage depuis le site de YouTube bien évidemment.
mpv https://www.youtube.com/watch?v=C_UTlTiVQ_0
# Paramétrer youtube-dl dans mpv
Il y a moyen de passer des paramètres à youtube-dl lors de l’utilisation de mpv.
Pour cela, il faut utiliser l’option --ytdl-format
,
par exemple pour voir la même vidéo que précédemment:
mpv --ytdl-format=303+bestaudio https://www.youtube.com/watch?v=C_UTlTiVQ_0
# La problématique
YouTube n’a pas intérêt à ce que nous regardions son contenu en dehors de leur plateforme (ou leur application) et encore moins de nous laisser le télécharger. Du coup c’est une constante lute pour réussir à avoir un logiciel qui fonctionne.
Depuis peu, avec youtube-dl j’ai une vitesse de téléchargement très faible, de l’ordre de moins de 100 ko/s, ce qui ne permet pas de regarder des vidéos haute-définition. Youtube-dl semble faiblement maintenu ces derniers mois et ne propose donc pas de solution. Heureusement, le monde des logiciels libre est toujours plein de ressources. Lorsqu’un logiciel n’est plus vraiment maintenu il suffit de le copier (on dit “forker”, de l’anglais fork) et de le faire évoluer dans la direction qui nous intéresse. C’est ce qui s’est passé ici, d’abord avec yt-dlc, puis avec ma solution du moment: yt-dlp.
Globalement, yt-dlp est une amélioration de youtube-dl,
qui fonctionne donc de manière très similaire.
Par contre, mpv continue à utiliser youtube-dl,
heureusement on peut lui préciser quel “youtube-dl” utiliser
grâce au paramètre --script-opts=ytdl_hook-ytdl_path
,
avec donc l’usage suivant:
mpv --script-opts=ytdl_hook-ytdl_path=yt-dlp https://www.youtube.com/watch?v=C_UTlTiVQ_0
Et voilà, tout rentre dans l’ordre et je peux continuer à regarder mes vidéos hors de YouTube.
# Mes usages
J’aime bien pouvoir facilement regarder des vidéos en moyenne définition, à savoir 480p, pour éviter d’utiliser trop de bande passante lorsque cela n’est pas nécessaire. J’ai donc créé un alias qui appelle la commande suivante:
mpv --script-opts=ytdl_hook-ytdl_path=yt-dlp --ytdl-format=worstvideo[height\>=480]+bestaudio/480p/worst
Je demande donc la pire vidéo qui a un nombre de lignes supérieur ou égal à 480 avec le meilleur audio, s’il ne trouve rien il prend le format 480p qu’il trouve, et sinon le pire format.
J’ai également un moyen d’avoir uniquement l’audio, pour économiser au maximum ma consommation de données:
mpv --script-opts=ytdl_hook-ytdl_path=yt-dlp --no-video --force-window=yes
L’option --force-window
est là pour avoir quand même la fenêtre
avec les contrôles,
sinon mpv tourne en arrière plan ce qui peut être dérangeant.
# Correction après quelques recherches
C’est toujours lors de la rédaction de ce genre d’articles que j’en apprends le plus.
Du coup, avec yt-dlp il y a un super paramètre -S
, ou --format-sort
,
qui permet de trier les formats en fonction de certains filtres.
Du coup, j’ai modifié ma commande 480p pour une bien plus simple
et qui fonctionne partout
(J’avais de la peine à avoir une config qui fonctionnait sur PeerTube):
mpv --script-opts=ytdl_hook-ytdl_path=yt-dlp --ytdl-raw-options=format-sort=height:480
Vous pouvez jouer avec toutes ses options, je vous laisse la joie de découvrir ce qui est faisable.
Bons tests et bon visionnage.
-
Alors qu’on ne me fasse pas dire ce que je n’ai pas dit, lorsqu’on regarde une vidéo dans notre navigateur préféré, elle est également téléchargée et sera supprimée ensuite pour libérer de l’espace sur votre disque. Quelle que soit la ressource, pour pouvoir en faire quelque chose notre ordinateur a besoin de la récupérer d’une manière ou d’une autre. ↩︎
-
La définition d’une vidéo, ou d’une image, c’est le nombre de pixel qui la compose, représenté en nombre de colonnes et de lignes, comme
1920x1080
, définition full HD qui contient donc 1920 colonnes chacune de 1080 pixels. ↩︎ -
Le format 1080p correspond à
1920x1080
, et son équivalent 720p au format1280x720
. ↩︎ ↩︎