YouTube DownLoader Plus - yt-dlp

Image d'introduction yt-dlp

yt-dlp est un utilitaire en ligne de commande dérivé de youtube-dl conçu pour télécharger des vidéos et des audios à partir de nombreux sites de streaming et autres plateformes telles que YouTube, Vimeo, Dailymotion, X Twitter, Deezer, Spotify ... et plus de 1000 sites différents.

Installation et mise à jour

Bien que FFmpeg soit une dépendance optionnelle de yt-dlp elle me semble totalement indispensable. Si FFmpeg n'est pas installé, yt-dlp peut toujours télécharger des vidéos mais il ne pourra pas fusionner audio/vidéo, il ne pourra pas remuxer ni réencoder, il ne pourra pas découper des extraits. Alors on ne discute pas ☛ sudo apt install ffmpeg

On télécharge yt-dlp avec curl depuis Github dans le répertoire /usr/local/bin/yt-dlp/ ...

sudo curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp

... puis on donne les droits de lecture et d'exécution à tous les utilisateurs dans ce répertoire.

sudo chmod a+rx /usr/local/bin/yt-dlp

Mettez régulièrement yt-dlp à jour avec -U ou --update:

sudo yt-dlp -U

Si la mise à jour ne fonctionne pas alors recommencer la procédure d'installation avec les deux commandes que nous venons d'utiliser.

Afficher l'aide avec -h ou --help:

yt-dlp -h

L'aide de yt-dlp vous invite d'ailleurs à consulter la documentation sur sa page Github.

Afficher la liste des plateformes prises en charge:

yt-dlp --list-extractors

Télécharger une vidéo clic-clac Kodak

Si vous ne deviez connaitre qu'une seule commande pour télécharger une vidéo ce serait celle-ci:

yt-dlp "URL_VIDEO"

Simple n'est-ce pas. Mais attention, les plateformes en ligne de vidéos proposent généralement, de manière transparente pour l'utilisateur, différentes qualités de fichier audio et vidéo, séparés ou combinés. Avec cette commande, yt-dlp se chargera de récupérer le meilleure flux combiné disponible. Si toute fois aucun fichier combiné n'est fourni par l'hébergeur, yt-dlp choisira automatiquement les meilleurs flux séparés (audio et vidéo) et tentera de les combiner en un seul fichier avec FFmpeg si ce dernier est installé. Le fichier sera finalement enregistré dans le format du flux vidéo sélectionné et nommé d'après les métadonnées de la vidéo.

Cette commande extrêmement simple pourrait toutefois échouer si le nom du fichier est trop long ou incompatible avec la nomenclature du système de fichier. On peut alors demander à renommer le fichier en le précisant grâce à l'option -o (o pour output):

yt-dlp -o "ma-vidéo" "URL_VIDEO"

Remarquez que je n'ai pas précisé d'extension dans le nom -o "ma-vidéo" puisque l'extension sera celle du flux vidéo sélectionné par yt-dlp.

On aurait pu préciser un suffixe, ma-vidéo.mp4 par exemple, et le fichier final porterait cette extension sans toutefois garantir que ce soit un .mp4 valide et ne pas fonctionner avec certains lecteurs vidéo.

Si vous voulez être certain d'obtenir un fichier vidéo dans un format spécifique, vous devez le préciser avec l'option --merge-output-format suivi d'un suffixe adéquate.

yt-dlp -o "ma-vidéo" --merge-output-format mp4 "URL_VIDEO"

Dans ce cas, yt-dlp délègue à FFmpeg la fusion des flux audio et vidéo ainsi que l'encodage dans le format choisi.

Télécharger une vidéo pile poil

Illustration de yt-dlp à la demande

Maintenant il n'est pas impossible de vouloir télécharger une vidéo de qualité inférieur, sans le son, ou justement seulement le son ou bien même juste une partie du flux. Dans ce cas il convient de connaitre les choix proposés par l'hébergeur.

 L'option -F, lister les fichiers disponibles

L'option "-F" permet de lister les différents flux fournis par l'hébergeur

yt-dlp -F "URL_VIDEO"

Cette commande va d'abord afficher quelques lignes concernant le téléchargement et l'analyse de fichiers (souvent json) fournit par l'hébergeur, puis puis affichera dans un tableau les flux disponibles.

Exemple de sortie d'après une URL Youtube:

ID  EXT   RESOLUTION FPS CH │   FILESIZE   TBR PROTO │ VCODEC          VBR ACODEC      ABR ASR MORE INFO
────────────────────────────────────────────────────────────────────────────────────────────────────────────────
sb2 mhtml 48x27        0    │                  mhtml │ images                                  storyboard
sb1 mhtml 80x45        0    │                  mhtml │ images                                  storyboard
sb0 mhtml 160x90       0    │                  mhtml │ images                                  storyboard
233 mp4   audio only        │                  m3u8  │ audio only          unknown             Default
234 mp4   audio only        │                  m3u8  │ audio only          unknown             Default
140 m4a   audio only      2 │   14.32MiB  129k https │ audio only          mp4a.40.2  129k 44k medium, m4a_dash
251 webm  audio only      2 │   14.39MiB  130k https │ audio only          opus       130k 48k medium, webm_dash
269 mp4   256x144     30    │ ~ 19.42MiB  176k m3u8  │ avc1.4D400C    176k video only
160 mp4   256x144     30    │   12.33MiB  111k https │ avc1.4d400c    111k video only          144p, mp4_dash
230 mp4   640x360     30    │ ~ 89.96MiB  813k m3u8  │ avc1.4D401E    813k video only
134 mp4   640x360     30    │   59.28MiB  536k https │ avc1.4d401e    536k video only          360p, mp4_dash
18  mp4   640x360     30  2 │ ≈ 64.61MiB  584k https │ avc1.42001E         mp4a.40.2       22k 360p
605 mp4   640x360     30    │ ~ 63.38MiB  573k m3u8  │ vp09.00.21.08  573k video only
243 webm  640x360     30    │   39.14MiB  354k https │ vp9            354k video only          360p, webm_dash
232 mp4   1280x720    30    │ ~288.84MiB 2611k m3u8  │ avc1.4D401F   2611k video only
136 mp4   1280x720    30    │  230.77MiB 2086k https │ avc1.4d401f   2086k video only          720p, mp4_dash
270 mp4   1920x1080   30    │ ~521.93MiB 4718k m3u8  │ avc1.640028   4718k video only
137 mp4   1920x1080   30    │  455.55MiB 4118k https │ avc1.640028   4118k video only          1080p, mp4_dash

Les premières colonnes sont celles qui vont nous intéresser pour les usages courants:

Voila qui sera suffisant pour nous permettre de choisir et télécharger une vidéo.

 L'option -f, télécharger par ID précisément

On constate à l'ID 18 que les colonnes FPS et CH ont toutes les deux une donnée (30 et 2) ce qui signifie qu'il s'agît d'un fichier combiné audio et vidéo. On téléchargera ce fichier avec la commande suivante:

yt-dlp -f 18 "URL_YOUTUBE"

Si par contre vous souhaitez combiner vous-même le format audio et vidéo rien de plus simple:

yt-dlp -f 140+160 "URL_YOUTUBE"

Les deux fichiers seront téléchargés séparément puis combinés par yt-dlp avec FFmpeg.

ATTENTION : dans le cas où les flux ne soient pas compatibles, yt-dlp utilisera FFmpeg pour les fusionner et ne restituera peut-être pas le format attendu. Pour être certain d'obtenir le format souhaité utilisez l'option "--merge-output-format".

Juste pour info : le flux audio m4a est compatible avec le flux vidéo mp4.

Je n'ai pas besoin de vous faire un dessin, si vous souhaitez récupérer uniquement l'audio ou la vidéo, vous n'avez qu'à indiquer son identifiant dans l'option -f.

Pour les psychopathes du bitrate voici la définition des colonnes restantes:

 L'option -f, télécharger par mots-clés simplement

Comme nous venons de le voir, les plateformes de streaming proposent souvent un éventail de flux. Du coup, yt-dlp propose une poignée de mots-clés, les format selectors, pour télécharger rapidement ce qui nous intéresse, sans avoir besoin de consulter la liste des fichiers disponibles.

On utilise là encore l'option -f ce qui est plutôt pratique:

yt-dlp -f best "URL_VIDEO"

Les mots clés sont les suivants:

On pourrait croire que c'est très limité mais il n'en est rien car il est également possible de les combiner:

yt-dlp -f worstvideo+bestaudio "URL_VIDEO"

Télécharger la meilleure qualité en mp4 et m4a

yt-dlp -f "bestvideo[ext=mp4]+bestaudio[ext=m4a]" "URL_VIDEO"

Télécharger la meilleure vidéo en mp4 avec une résolution de 720p et la meilleure qualité audio en m4a

yt-dlp -f "bestvideo[ext=mp4][height=720]+bestaudio[ext=m4a]" "URL_VIDEO"

Toutefois si l'un des critère est manquant la commande échouera. On peux essayer de contourner les problèmes avec une combinaison de paramètres comme ceci ...

yt-dlp -f "bestvideo[ext=mp4][height=720]/bestvideo[height=720]+bestaudio[ext=m4a]/bestaudio" "URL_VIDEO"

... mais les choses vont vite devenir ingérable.

L'option --download-sections, télécharger juste une partie

Avec l'option --download-section de yt-dlp il est aisé de découper une vidéo ou un audio pour n'en garder qu'une partie, sans avoir besoin de télécharger la totalité du fichier.

yt-dlp "URL_VIDEO" --download-sections "*00:01:30-00:02:00"

Si on veut commencer l'enregistrement à 1mn30 et aller jusqu'au bout :

yt-dlp "URL_VIDEO" --download-sections "*00:01:30-"

Et inversement, du début jusqu'à 2mn :

yt-dlp "URL_VIDEO" --download-sections "*-00:02:00"

On peux télécharger plusieurs extraits d'un seul coup en plusieurs fichiers (ça devient long)

yt-dlp --merge-output-format mp4 \
"URL_VIDEO" \
-o "mon_extrait_%(section_start)s-%(section_end)s.mp4" \
--download-sections "*00:01:30-00:02:00" \
--download-sections "*00:05:00-00:06:00"

Dans ce cas de figure il devient indispensable de choisir un format avec --merge-output-format et de nommer automatiquement chaque fichier de façon unique avec les métadonnées fournies avec l'option --download-sections:

Conclusion

Illustration de yt-dlp - usine à gaz

Je ne vous ai présenté ici que la partie émergée de l'iceberg. Il vous reste à découvrir par vous-même toutes les possibilités de yt-dlp telles que les options pour la gestion des sous-titres et des métadonnées, l'utilisation d'un proxy pour contourner les restrictions géographiques, le support des chapitres, des playlists ou des chaînes, ainsi que l'utilisation de cookies et tokens d’authentification, etc.

Je n'hésiterai pas à agrémenter cet article au gré de mes besoins mais en attendant, toutes les fonctionnalités sont accessibles dans la documentation.

12-Mar-2025
^