[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 [20250610]

#!/usr/bin/dash
# yt-dlp_update : Recherche versions yt-dlp GIT+Debian # 20250610 #
# Depends: curl ffmpeg
#       python3-{certifi,mutagen,pycryptodome,requests,urllib3,websockets}
y=`command -v yt-dlp` && { y=`readlink -e $y`; C=`$y --version` ;}
echo "Installé  : ${C:---} $y"
# ---------
R='http://ftp.fr.debian.org/debian/pool/main/y/yt-dlp/'
P=`curl -sL $R | awk -F\" '/^[^~]*b</{x=$2}END{print x}'`
N=`expr substr ${P:--} 8 10` && echo "Disponible: $N [debian]" || exit 1
G=`curl -s https://raw.githubusercontent.com/yt-dlp/yt-dlp/master/Changelog.md |
   awk -F'[ *]' '/ 20/{printf $2};/ Ext/{x=1}{if(x==1){if(/^$/)exit}if(($1~"^-")&&
   ($4~"egr|fra|gen|owd|itc|vim|vk|wit|tok|utu|rum|bry|le[fm]")){printf " "$4}}'`
echo "Github    : $G"
# ---------
{ [ x$N = x$C ] || { echo; read -p "Installation yt-dlp $N ? [↲ | n] " -r q
  [ x$q = xn  ] ;};} && exit || wget -qO ${F:=/tmp/$P} $R$P &&
[ `dpkg -I $F |awk 'NR==2{print $2}'` = `stat -c%s $F` ] && sudo dpkg -i $F &&
echo "\v ✔ yt-dlp $N installé"
# -- log --
[ -w ${L:=$HOME/.local/share/yt-dlp/yt-dlp.log} ] && sed -n "/^$N/q1" $L &&
echo "$G\n\n$(cat $L)" >$L
# ---------
exit

:large_blue_diamond: Option sauvegarde liste extracteurs modifiés par version, initialisée par la création d’un fichier vide ~/.local/share/yt-dlp/yt-dlp.log


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

$ yt-dlp_update
  Installé  : 2025.06.09 /usr/bin/yt-dlp
  Disponible: 2025.06.09 [debian]
  Github    : 2025.06.09 twitcasting twitter vimeo youtube
Information complémentaire / test yt-dlp

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

Merci,
Pour info, j’ai un message d’avertissement avec awk (non critique) :

$ yt-dlp_update.sh
 Versions yt-dlp
 Installé  : 2025.04.30 /usr/bin/yt-dlp
 Disponible: 2025.04.30 [debian]
awk: ligne de commande:2: avertissement : séquence d'échappement « \* » traitée comme un simple « * »
 Github    : 2025.04.30 abematv atresplayer bpb cda cdafolder crowdbunker dacast dzen.ru generic getcourseru ivoox kika linkedin loco lrtradio manyvids mixcloud mlbtv niconico panopto parti raiplay reddit royalive rtve rumble tokfmpodcast tv2dk tvp tvw twitcasting twitch twitter vimeo vk youtube zdf

Intéressant, mais surprenant puisqu’il n’y pas de ‹ \* ›.
Que dit ceci: readlink /etc/alternatives/awk
J’utilise mawk (le awk de debian par défaut).

Oui, c’est ce que j’avais regardé en premier, le ‹ * › n’existe pas ! :roll_eyes:

$ readlink /etc/alternatives/awk
/usr/bin/gawk

(je suis en trixie sous gnome, à jour)

Problème vu avec gawk: pas clair…
gawk est abusivement installé par certains paquets de mon point de vue, sans rien apporter de transcendant relativement à mawk qui est à privilégier car le plus rapide (de loin) de tous les « awks » ( il y a awk et awk…).
Normalement, l’installation de gawk ne désinstalle pas mawk.
Je remplace donc awk (qui n’est qu’un lien alternatives), par explicitement mawk qui lui est POSIX.


EDIT…:
après relecture plus attentive, l’avertissement de gawk concernait le 2ieme awk: gsub("\*:?","")
Cet avertissement est surprenant et inutile car la "séquence d’échappement « \* » traitée comme un simple « * » est bien l’objectif recherché quelque-soit le cas, pour préciser que ‹ * › n’est ni du regex, ni du globbing. Trop bavard ce gawk.

1 J'aime

gawk apporte le POSIX à awk qui ne l’a pas.

enfin…normalement. si ça n’a pas changé très récemment.

Après: https://www.baeldung.com/linux/awk-nawk-gawk-mawk-difference

pour se faire une idée.

perso j’ai rencontré un problème avec awk pour le posix et seul gawk l’a relolu (niveau installaler debian pas exemple).

Non ça n’a jamais changé. mawk est POSIX. C’est pour ça que Debian l’installe par défaut (classé [required]). ‹ awk › n’est qu’un lien sur une version de awk installé. ‹ awk qui n’a pas une fonction › ne veut rien dire. Si tu as rencontré un problème, c’est probablement que mawk ne traite pas le Regex Perl et que tu connaissais justement pas les différences entre awks.
Tu peux commencer par: Difference Between awk, nawk, gawk and mawk | Baeldung on Linux
Si tu as un problème d’usage de awk, et non pas de remarque constructive sur yt-dlp_update (le sujet), merci d’ouvrir ton sujet pour éviter une digression frémissante, on verra ce qu’on peut faire.

Debian – Détails du paquet mawk

Mawk se conforme à la définition POSIX 1003.2 (draft 11.3) du langage AWK qui contient quelques fonctionnalités non décrites dans le livre AWK.
Mawk est plus petit et plus rapide que gawk.

Euh, si je fais un simple man gawk, je vois : conforme à POSIX 1003.1.
Par contre, mawk est conforme à POSIX 1003.2

Gawk posix, seulement à condition de préciser l’option ‹ –posix › lors de son usage.

If the environment variable POSIXLY_CORRECT exists, then gawk behaves in strict POSIX mode, exactly as if you had supplied --posix / gawk manual

Comme il y a awk et awk, il y a aussi posix et posix, selon la version.
Les problèmes exotiques rencontrés viennent de ces différences très subtiles. Et attention au ‹ man › qui n’est pas pas toujours exactement fidèle à la réalité du comportement du binaire… (cas déjà rencontré). La question essentielle porte plus sur la portabilité de la syntaxe.

Il faut se méfier des apparences dans l’univers du awkisme. Seule la pratique reste implacable, illustrée par cet exemple:

mawk 'BEGIN{x="ABCD"; sub("\\`..","",x); print x}'   ->  ABCD
gawk 'BEGIN{x="ABCD"; sub("\\`..","",x); print x}'   ->  CD

• Modif 20250610 (1er message)
Limitation de l’affichage et log des extracteurs modifiés à seulement ceux pertinents (parmi plus de 1800).

$ yt-dlp_update 
  Installé  : 2025.05.22 /usr/bin/yt-dlp
  Disponible: 2025.06.09 [debian]
  Github    : 2025.06.09 twitcasting twitter vimeo youtube

  ✔ yt-dlp 2025.06.09 installé