[yt-dlp] github / Debian

Différentes méthodes d’installation d’yt-dlp sont possibles, soit directement en provenance de github, ou par paquet Debian. Une mauvaise installation peut empêcher l’usage correct de nombreuses options, source de confusion.

L’installation d’yt-dlp de Debian offre quelques avantages:
• résolution plus rapide puisque les extracteurs sont décompressés à l’installation à /usr/lib/python3/dist-packages/yt_dlp/extractor/.
L’exécutable de GIT, sans préparation, doit décompresser les extracteurs à chaque utilisation.

time yt-dlp -s EngW7tLk6R8
  github: 5s
  Debian: 4s

• le paquet Debian installe man yt-dlp
• permet un contrôle de version directement par apt (pas indispensable, mais pratique)

Fréquence de mise à jour:
yt-dlp contient plus de mille extracteurs video.
Chercher à chaque utilisation la dernière version nightly qui concerne peut-être uniquement le site ‹ OnDemandKoreaProgram › présente peu d’intérêt, et peut aussi apporter des régressions. Le « dernier » paquet yt-dlp disponible de Debian filtre correctement la fréquence utile de mise à jour (observation statistique)

Le problème rencontré pour Debian stable est que yt-dlp n’est mis à jour que dans le dépôt debian-backports. L’ajoût d’un dépôt supplémentaire pour un paquet de 2MB n’est techniquement pas optimum, la mise à jour d’un dépôt étant une opération apt lourde.

Le script dash suivant permet d’obtenir la version du paquet yt-dlp de Debian la plus à jour, indépendamment des sources de dépôts.

Pré-requis, installation de:

python3-{certifi,mutagen,pycryptodome,requests,urllib3,websockets} ffmpeg curl

/usr/local/bin/yt-dlp_update

#!/usr/bin/dash
# yt-dlp_update : Recherche versions yt-dlp GIT+Debian # 20250408-1 #
# Depends: curl ffmpeg
#       python3-{certifi,mutagen,pycryptodome,requests,urllib3,websockets}
# ------------
echo 'Versions yt-dlp'
cv=$(yt-dlp --version 2>/dev/null) && \
printf " Installé  : $cv -> " && command -v yt-dlp
# ------------
R='http://ftp.fr.debian.org/debian/pool/main/y/yt-dlp'
LV=$(curl -s $R/ |awk -F\" '$2~/^[^~]*b$/{x=$2} END{print x}')
lv=${LV#*_} ; lv=${lv%%-*} ; P=/tmp/$LV
[ ${#lv} -eq 10 ] && echo " Disponible: $lv [debian]" || exit
# ------------
G='https://raw.githubusercontent.com/yt-dlp/yt-dlp/master/Changelog.md'
printf ' Github    : '
curl --connect-timeout 5 -sL $G |awk '/20/{print $2;exit 5}' && echo '--'
# ------------
if [ x$lv != x$cv ] ; then
   printf " »» Installation yt-dlp $lv [debian] ? [ ↲ / n ] "; read q
   [ "$q" = n ] || curl --clobber -so $P $R/$LV && \
   dpkg -I $P |grep -qm1 $lv && sudo dpkg -i $P && \
   echo " /usr/bin/yt-dlp $lv installé"
fi
# ------------
exit

$ sudo chmod +x /usr/local/bin/yt-dlp_update

$ yt-dlp_update
Versions yt-dlp
 Installé  : 2025.03.27 -> /usr/bin/yt-dlp
 Disponible: 2025.03.31 [debian]
 Github    : 2025.03.31

 Installation yt-dlp 2025.03.31 [debian]
 /usr/bin/yt-dlp installé: 2025.03.31

Test:

$ yt-dlp 'https://www.youtube.com/watch?v=EngW7tLk6R8' --get-title --get-id  
  Sample Videos / Dummy Videos For Demo Use
  EngW7tLk6R8

Taille de la video EngW7tLk6R8

$ yt-dlp EngW7tLk6R8 --quiet --skip-download --exec-before-download 'size=$(numfmt --to=iec-i --suffix=B --format="%.2f" $(( %(requested_formats.0.filesize+requested_formats.1.filesize|0)d + %(filesize|0)d ))); echo "Size: $size"'
  Size: 770,11KiB

Sans option, la vidéo est téléchargée, format par défaut: ‹ bestvideo*+bestaudio/best ›
mpv utilise directement yt-dlp, si correctement accesssible dans un chemin défini par la variable $PATH.

$ mpv 'ytdl://ytsearch:fKFbnhcNnjE' --ytdl-format='bv[height<800]+ba/best' 
# ou directement:
$ mpv 'https://www.youtube.com/watch?v=fKFbnhcNnjE'

Les options d’yt-dlp:
man yt-dlp ; GitHub - yt-dlp: Options

Une configuration par défaut d’yt-dlp peut-être écrite dans ~/.config/yt-dlp/config
exemple:

--no-mtime
--geo-bypass
--youtube-skip-dash-manifest
--user-agent='Mozilla/5.0 (Linux;)'

Les options de format video d’yt-dlp pour mpv peuvent être écrites dans ~/.config/mpv/mpv.conf
exemple:
ytdl-format='bestvideo[height<800]+bestaudio/best'


4 J'aime

Merci, très pratique ! :+1:
Suggestion : ajouter une confirmation d’action une fois les versions affichées, genre « Voulez-vous installer la version x.y ? »

Merci ! En complément d’info, yt-dlp est aussi dans le dépôt Pypi (donc installable avec pip), les releases sont les mêmes que celles du dépôt github, les extracteurs sont décompressés sous ~/.local/lib/python3.11/site-packages/yt_dlp/extractor/

J’avais hésité pour les raisons suivantes:
» pour quelle raison objective refuser une MAJ d’yt-dlp ?
» le ‹ sudo › par défaut demande un mdp qui faisait l’objet de confirmation.
J’ai rajouté une demande de confirmation, sans conviction, mais pourquoi pas.

De multiples méthodes d’installation dans divers répertoires x,y,z.
Pendant longtemps, j’extrayais avec un script de maj yt-dlp de github dans un répertoire (sans besoin de PIP), qui créait un lien yt-dlp -> __main__.py.
L’existence du paquet Debian ‹ à jour › limite l’intérêt de ces diverses méthodes, et évite une confusion de méthodes approximatives vues dans des posts empêchant un fonctionnement ‹ nominal › d’yt-dlp pour les diverses applications qui en ont besoin.

1 J'aime