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.
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
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.
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" 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.
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:
- "TBR" : (Total Bitrate) le débit binaire moyen en kilobits par seconde
- "PROTO" : le protocole de téléchargement utilisé
- "VCODEC" : (Video Codec) le codec vidéo utilisé
- "VBR" : (Video Bitrate) le débit binaire de la vidéo en kilobits par seconde
- "ACODEC" : (Audio Codec) le codec audio utilisé
- "ABR" : (Audio Bitrate) le débit binaire audio
- "ASR" : (Audio Sample Rate) la fréquence d’échantillonnage audio en kHz
- "MORE INFO" : divers informations supplémentaires
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.
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:
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.