arthur.bebou

Le site arthur.bebou.netlib.re - retour accueil

git clone git://bebou.netlib.re/arthur.bebou
Log | Files | Refs |

index.sh (51979B)


      1 #! page
      2 
      3 title: Guide de survie en territoire youtubesque
      4 author: Arthur Pons
      5 publication: 2022-10-19
      6 description: Comment consulter des vidéos youtube autrement qu\'en utilisant youtube.com
      7 sectionmd: main
      8 
      9 
     10 ## Pourquoi ?
     11 
     12 Sur Youtube on trouve de l'excellent contenu.
     13 Malheureusement, Youtube est une entreprise qui a ses torts.
     14 
     15 Parmis eux, se trouve celui d'avoir une très mauvaise interface.
     16 
     17 Liste non exhaustive, non ordonnée et personnelle des défauts de l'interface
     18 web de youtube :
     19 
     20   * contient trop de fonctionnalités, je veux avoir mes abonnements, les 
     21     vidéos et éventuellement les métadonnées des vidéos
     22   * est dispendieuse, à la fois en calcul et en mémoire, essayez la sur un
     23     ordinateur avec peu de ressources pour vous en convaincre
     24   * change souvent
     25   * requiert l'éxecution de javascript pour fonctionner, javascript qui sert
     26     en partie à collecter des données sur votre personne
     27   * intègre un ensemble de technique à la limite du [dark pattern] pour vous
     28     inciter à rester plus longtemps sur le site (recommandations, lecture
     29     automatique, etc)
     30   * oublie certaines de vos préférences - comme celle de la résolution par
     31     défaut - en particulier si vous avez configuré votre navigateur pour 
     32     supprimer les cookies etc
     33   * requiert un compte google pour profiter de la fonctionnalité des
     34     abonnements
     35   * n'affiche pas systématiquement les nouvelles vidéos dans la file des
     36     abonnements, d'où l'ajout quelque peu absurde de la cloche
     37   * utilise un algorithme de recommandation qui, au moins par moment, a un
     38     fort penchant pour les vidéos incitant à l'énervement, la colère, la
     39     réaction à chaud et favorisant les vidéos faisant la promotion 
     40     d'idéologies réactionnaires (comme tous les réseaux sociaux)
     41   * utilise un lecteur de vidéo offrant relativement peu de contrôle en
     42     comparaison avec les standards non web (vlc, mpv, etc)
     43   * affiche des publicités
     44 
     45 [Un bon article] sur des soucis environnementaux de l'interface youtube que je
     46 ne soupçonnais pas.
     47 
     48 Améliorer l'interface existante ou en utiliser une autre pourrait donc, en
     49 théorie et à des degrés divers :
     50 
     51   * d'utiliser de vieux ordinateurs plus longtemps, bon pour le porte monnaie
     52     bon pour la planète voir de redéfinir ce qu'est un "ordinateur" (capable de
     53     lire des vidéos)
     54   * d'économiser de la bande passante, bon pour le porte monnaie, bon pour la
     55     planète
     56   * de mieux préserver votre confidentialité
     57   * de mieux contrôler le temps que vous passez à regarder des vidéos
     58   * d'adapter le visionnage de la vidéo à vos besoins spécifiques (vitesse de
     59     lecture, apparence des sous-titre, ajustement de l'image en fonction de
     60     votre écran, etc)
     61   * limiter le nombre de comptes que vous possédez
     62   * ne pas rater de vidéos de vos créateurices préférées
     63   * ne pas être exposé·e à de la publicité
     64 
     65 ## Pour les smartphones
     66 
     67 Je connais mal les systèmes d'exploitation de smartphones. Je les trouve,
     68 au moins au premier abord, trop peu accueillant à la bidouille pour avoir envie
     69 de consacrer du temps. Cependant puisqu'une majorité du temps passé sur Youtube
     70 l'est à travers d'un [smartphone] il semble utile que je donne au conseil.
     71 
     72 J'utilise [NewPipe], une application libre qui offre à peu près les mêmes
     73 fonctionnalités que l'on verra dans la partie PC à travers une interface
     74 similaire à l'application android youtube officielle. Elle permet de s'abonner
     75 sans compte, de choisir une résolution par défaut, de télécharger les vidéos,
     76 de n'avoir que l'audio, de vérouiller l'écran du téléphone sans interrompre la
     77 lecture etc.
     78 
     79 Hormis quelque rare bugs et crashs cette application est géniale, je n'envisage
     80 pas de regarder une vidéo youtube autrement sur un téléphone android. Il en
     81 existe un fork (une version alternative) nommée [SkipTube] qui intègre
     82 SponsorBlock (on en reparlera).
     83 
     84 Je n'utilise pas iOS, je ne sais pas s'il existe un équivalent. Si vous avez
     85 connaissance d'une application similaire dîtes le moi. J'imagine qu'il est
     86 possible de bidouiller quelque chose de similaire à ce que l'on va voir dans la
     87 partie PC grâce à [Termux] mais je n'ai pas essayé.
     88 
     89 ## Pour les ordinateurs
     90 
     91 Les ordinateurs sont en moyenne des machines avec des systèmes plus ouverts.
     92 Il est généralement plus facile d'écrire ou de modifier les logiciels faits
     93 pour fonctionner sur des PC. C'est en partie pour cela que l'on trouve une
     94 diversité d'option plus large quand il s'agit de modifier ou de remplacer
     95 l'interface web de youtube.
     96 
     97 En cinq étapes nous irons progressivement de modifications subtiles et 
     98 "simples" à un système nous affranchissant entièrement de l'interface de
     99 youtube. Vous pourrez ainsi vous arrêter là où vous le souhaitez selon votre
    100 besoin et votre niveau de confort avec les outils que l'on utilisera. Vous
    101 pourrez également piocher dans les différentes étapes pour les combiner et en
    102 faire le système qui vous convient le mieux. Certaines astuces en rendent
    103 d'autres inutiles, je vous invite à les tester.
    104 
    105 ### 1. Extensions de navigateur
    106 
    107 Il existe tout un tas d'extensions faciles à installer dans votre navigateur
    108 qui permettront d'améliorer votre navigation sur youtube. Ci-dessous une liste
    109 non exhaustive et pour Firefox :
    110 
    111 [Ublock Origin]
    112 
    113 Meilleur bloqueur de pub.
    114 
    115 [Enhancer for youtube]
    116 
    117 Si j'ai bien fait le tour de l'extension c'est surtout pour améliorer le player
    118 youtube et inscrire dans le marbre quelques paramètres défauts. J'y vois un
    119 intérêt notamment pour figer la résolution.
    120 
    121 [Sponsorblock]
    122 
    123 Sponsorblock est un base référençant le contenu sponsorisé dans les vidéos.
    124 Elle est alimentée par les utilisateurices de youtube. Cette extension ajoute
    125 des éléments à l'interface de youtube permettant de sauter le contenu
    126 sponsorisé si vous le souhaitez. Par ailleurs la base offre une api si vous
    127 voulez consommer ces infos pour autre chose.
    128 
    129 [Youtube recommended videos]
    130 
    131 Cette extension permet de dissimuler certains éléments de l'interface dont les
    132 recommandations, les commentaires etc.
    133 
    134 [Youtube addon]
    135 
    136 Pas essayé.
    137 
    138 **Attention**, les extensions peuvent prendre une place significative à
    139 l'installation et consommer une quantité certaine de cycles CPU et de RAM.  Si
    140 vous utilisez une machine peu puissante faites attention de peser les arguments
    141 pour et contre de l'utilisation d'extension notamment si vous utilisez une
    142 machine peu puissante.
    143 
    144 ### 2. Lecteur RSS
    145 
    146 Les utilisateurices de youtube utilisent souvent la fonctionnalité
    147 d'abonnement. Celle-ci permet, sur une page spécifique de l'interface, d'avoir
    148 la liste chronologique des dernières sorties des chaînes auxquelles on est
    149 abonné. Alternativement, il est possible de demander à youtube d'envoyer un
    150 mail.
    151 
    152 Ce fonctionnement a ses limites. D'abord, il est bien connu que la liste n'est
    153 pas fiable. C'est pourquoi youtube a ajouté la fonctionnalité de la "cloche"
    154 qui permet de garantir que l'on sera notifié. Deuxièmement, au même titre que
    155 le reste de l'interface, la page d'abonnement est lourde et chargera très
    156 lentement sur un ordinateur peu puissant. Finalement, elle ne propose aucune
    157 personnalisation. Il n'est pas possible de choisir ce qui s'affiche comme info,
    158 combien de vidéos par page, de créer des catégories de chaînes etc.
    159 
    160 Une partie de ces limites peuvent être résolues par les extensions vues
    161 précédemment mais une autre solution est possible. Pour notre plus grand
    162 plaisir Youtube maintient des flux [RSS] pour chacune des chaînes.
    163 Techniquement ce sont des flux Atom mais nous considérerons que ces deux types
    164 de flux sont équivalents. 
    165 
    166 Si vous savez déjà ce qu'est un flux RSS vous pouvez sauter jusqu'au prochain
    167 titre.
    168 
    169 Un flux RSS est un fichier au format XML qui renseigne un ensemble de contenu,
    170 typiquement les dernières mise à jour d'un site tel qu'un blog ou un journal.
    171 Ainsi quand un·e youtubeureuse publie une nouvelle vidéo, le fichier RSS de la
    172 chaîne est mis à jour de façon à déclarer ce nouveau contenu. En consultant
    173 périodiquement le contenu de ce fichier on peut être tenu au courant des
    174 dernières vidéos. Par exemple, le flux RSS de la chaîne Heu?reka se trouve à
    175 cette url :
    176 
    177 	https://www.youtube.com/feeds/videos.xml?channel_id=UC7sXGI8p8PvKosLWagkK9wQ
    178 
    179 On y trouve plusieurs "entrées", à savoir plusieurs vidéos, et leurs
    180 informations respectives. On y retrouve le titre de la vidéo, la date de
    181 publication, le lien vers la vidéo mais aussi la description qui apparait
    182 habituellement en dessous, le nombre de vues etc. Il serait techniquement
    183 possible de consulter "à la main" ces fichiers pour être à jour mais ça n'est
    184 pas très pratique pour un humain, notamment si vous voulez vous abonner à un
    185 grand nombre de chaîne. Pour vous en convaincre voici ce à quoi ça ressemble :
    186 
    187 	<entry>
    188 	 <id>yt:video:WqDVmluGdec</id>
    189 	 <yt:videoId>WqDVmluGdec</yt:videoId>
    190 	 <yt:channelId>UC7sXGI8p8PvKosLWagkK9wQ</yt:channelId>
    191 	 <title>Immobilier &amp; inflation : l'inflation est-elle sous estimée ?</title>
    192 	 <link rel="alternate" href="https://www.youtube.com/watch?v=WqDVmluGdec"/>
    193 	 <author>
    194 	  <name>Heu?reka</name>
    195 	  <uri>https://www.youtube.com/channel/UC7sXGI8p8PvKosLWagkK9wQ</uri>
    196 	 </author>
    197 	 <published>2022-10-17T07:12:08+00:00</published>
    198 	 <updated>2022-10-17T14:37:15+00:00</updated>
    199 	 ...
    200 
    201 Il existe des logiciels spécialisés pour agréger et consulter des flux RSS. Ils
    202 sont généralement appelés "Lecteurs RSS". Il existe une très grande diversité
    203 de [lecteurs RSS]. Je prendrais pour exemple Thunderbird puisque c'est un
    204 outil que je connais déjà, que beaucoup de gens utilisent pour leurs mails,
    205 qu'il est libre et pas une application web.
    206 
    207 Dans Thunderbird vous pouvez aller dans
    208 
    209 	Fichier -> Nouveau -> Compte de flux
    210 
    211 Pour créer un "compte" qui regroupera tout vos flux au même titre que vous avez
    212 un ou des "comptes" pour vos différentes adresses mails. Vous pouvez aussi
    213 utiliser le raccourci (en maintenant alt) :
    214 
    215 	alt+f+n+d
    216 
    217 Une boite de dialogue s'ouvre où vous pouvez choisir le nom du compte. Si l'on
    218 ne veut y mettre que des chaînes youtube on peut choisir un nom similaire à
    219 "flux Youtube". L'important est que vous puissiez le reconnaître rapidement
    220 quand il s'affichera dans la barre Thunderbird à gauche.
    221 
    222 Une fois créé, vous pouvez cliquer sur "Gérer les abonnements" pour en ajouter.
    223 La boite de dialogue qui suit vous invite à rentrer l'url du flux, configurer
    224 la fréquence à laquelle Thunderbird va vérifier si de nouvelles vidéos sont
    225 sorties, l'emplacement Thunderbird du flux etc.
    226 
    227 Une fois les paramètres rentrés, vous pouvez cliquer sur "Ajouter" et
    228 Thunderbird ira récupérer un historique des dernières vidéos. Chaque message
    229 contiendra le titre de la vidéo en "sujet" et le lien vers la vidéo dans un
    230 champ "site web".  Malheureusement je ne sais pas comment faire en sorte que
    231 Thunderbird affiche la description de la vidéo dans le corps du message.
    232 
    233 Si vous avez beaucoup d'abonnements et souhaitez recréer un style de flux comme
    234 celui de l'interface web de youtube vous pouvez ajouter un premier flux,
    235 renommer le dossier qui s'est créé à gauche - qui devrait avoir le nom de la
    236 chaîne que vous venez d'ajouter - par "Youtube" en faisant 
    237 
    238 	clique droit -> renommer
    239 
    240 puis, lors de l'ajout des futurs flux, choisir dans la liste déroulante le
    241 dossier "Youtube". Si tout est bien paramétré, la boite de dialogue d'ajout
    242 devrait avoir un champ "Articles stockés dans" avec la valeur
    243 "nom_du_compte/Youtube" et, après avoir cliqué sur ajouté, ce dossier devrait
    244 entremêler les vidéos des différentes chaînes par ordre chronologique.
    245 
    246 Vous avez dorénavant dans une application locale et rapide toutes les nouvelles
    247 vidéos de vos chaînes préférées sans avoir recours à un compte Google et sans
    248 avoir à consulter l'interface.
    249 
    250 Si vous avez compris ce qu'est un flux RSS, comment récupérer son lien et
    251 comment l'ajouter à Thunderbird, vous devriez pouvoir vous adapter à la plupart
    252 des lecteurs RSS disponibles. Les lecteurs ont tous leurs avantages et
    253 inconvénients, si vous n'êtes pas satisfaits par Thunderbird je vous incite à
    254 chercher des alternatives. Nous allons en voir une ensemble à la quatrième
    255 étape. Évitez tout de même de payer un lecteur RSS ou pire, de prendre
    256 abonnement à un lecteur RSS. Il existe de nombreux logiciels libres entièrement
    257 gratuits qui font l'affaire.
    258 
    259 Il n'y a malheureusement pas de moyen parfaitement fiable d'obtenir le flux rss
    260 d'un site/chaîne/blog. Il existe parfois le logo des flux quelque part sur la
    261 page. Le flux est parfois caché dans le footer des pages. Il est souvent
    262 possible de le trouver dans les sources de la page. Pour cela, sur firefox,
    263 faire `Ctrl+U` pour afficher les sources du site qui vous intéresse puis
    264 cherchez "rss" avec `Ctrl+F` pour peut-être tomber sur le lien du flux.
    265 
    266 Sinon l'ubiquité de certains CMS fait que beaucoup de sites ont un flux rss
    267 sans même le savoir, accessible en ajoutant "/rss" ou "/feed" à la fin de l'url
    268 de la page d'accueil.
    269 
    270 Il existe un script nommé [sfeed_web] qui prend en entrée une page html et
    271 cherche le ou les flux rss dans la page.
    272 
    273 Par exemple sur linux :
    274 
    275 	curl -sL lemonde.fr | sfeed_web
    276 	https://www.lemonde.fr/rss/une.xml	application/rss+xml
    277 
    278 ### 3. Un lecteur de vidéos alternatif
    279 
    280 Nous sommes dorénavant débarrassés du compte Google et n'avons plus à
    281 consulter la page d'abonnement des enfers. Pour parfaire nos besoins de
    282 performances il faut également substituer la page de lecture de la vidéo elle
    283 même. Le lecteur web est très peu performant.
    284 
    285 Il semblerait que le décodage de la vidéo ne soit pas plus gourmand selon s'il
    286 est fait sur youtube.com ou en accédant à la vidéo directement en la lisant
    287 dans le lecture HTML5 de base. En terme de performance la différence notable se
    288 trouve au temps de chargement de la page.  On peut donc émettre l'hypothèse que
    289 la difficulté du décodage vidéo n'est imputable qu'à firefox et pas youtube.
    290 Les performances que je constate sont similaires sur d'autres navigateurs que
    291 firefox.
    292 
    293 Quoi qu'il en soit sur ma machine professionnelle équipée d'un
    294 Intel i5 de septième génération avec quatre cœurs, un simple comparatif de
    295 charge entre le lecteur web et vlc donne les résultats suivant :
    296 
    297 	             1080p60fps  1080p30fps  480p  240p  audio
    298 	firefox      70%         48%         32%   26%   -
    299 	vlc          25%         15%         10%   9%    5%
    300 	
    301 	Chaque valeur est en % utilisé de la puissance totale du cpu
    302 
    303 Commentaire :
    304 
    305 J'ai retesté sur cette vidéo https://www.youtube.com/watch?v=LXb3EKWsInQ.
    306 C'est marrant, en 1080p60 tous les cœurs sont à 100% pour les flux vidéos HDR,
    307 plutôt autour de 55/60% pour les flux non HDR. Constat similaire sur mpv.
    308 
    309 Fin de commentaire
    310 
    311 Sur un raspberry3 on obtient ces résultats :
    312 
    313 	         720p                   480p  240p  audio
    314 	firefox  bloquée sur une image  77%   65%   -
    315 	mpv      40%                    25%   15%   10%
    316 
    317 On constate une charge diminuée par un facteur de 3 ou plus ! Autrement dit,
    318 utiliser un vieil/micro ordinateur ne condamne pas à ne pas pouvoir lire de
    319 vidéo. C'est le web qui nous fait croire l'inverse. Vous aviez peut-être déjà
    320 entendu qu'un raspberry "ça tourne bien mais faut pas espérer regarder des
    321 vidéos youtube quoi". En fait si, si l'on se sépare du puits de ressource que
    322 sont les navigateurs.
    323 
    324 En plus de cela, le fait de pouvoir fortement personnaliser les lecteurs tels
    325 que vlc ou mpv me fait penser qu'ils sont plus accessibles. N'étant pas en
    326 situation de handicap je ne peux pas confirmer cette intuition, si vous êtes
    327 concerné·e cela m'intéresse.
    328 
    329 La liste des avantages fonctionnels de logiciels comme mpv ou vlc sur des
    330 lecteurs de vidéo web est très longue. Deux exemples qui me concernent
    331 directement. Je regarde pas mal de directs, sur youtube ou twitch.
    332 Les regarder dans mpv permet de remonter dans le temps. Vous avez vu ou entendu
    333 quelque chose que vous voulez revoir tout de suite mais personne n'a "clippé"
    334 ce passage ? Le replay n'a pas choisi la bonne action ? Pas d'inquiétude, les
    335 lecteurs gardent une partie de la vidéo en cache pour que vous puissiez revenir
    336 en arrière et le regarder au rythme ou vous voulez.
    337 Maintenant vous voulez aller aux toilettes et vous regardez autre chose qu'un
    338 match de foot qui pourrait vous être spoilé par vos voisins ? Faîtes pause et
    339 regardez le reste de la vidéo en revenant. Vous aimeriez tout de même revenir
    340 au direct sans rien rater ? Accélérez la lecture de la vidéo et laissez faire.
    341 
    342 Cela dit, comment faire pour lire une vidéo youtube en dehors du navigateur ?
    343 Il y a plusieurs approches et plusieurs outils, nous allons nous intéresser à
    344 chacune des briques pour ensuite pouvoir les combiner selon notre souhait.
    345 
    346 #### yt-dlp + mpv
    347 
    348 Nous allons utiliser le lecteur [mpv]. C'est une sorte d'équivalent à VLC qui a
    349 la particularité d'être facile à utiliser via les lignes de commande. Sur un
    350 fichier vidéo locale mpv s'utilise aussi simplement que :
    351 
    352 	mpv video.mp4
    353 
    354 Comme tous les lecteurs vidéos dignes de ce nom mpv peut aussi lire un flux
    355 vidéo streamé. Pour cela il suffit de lui passer en argument le lien vers ce
    356 flux à la place du nom du fichier. Par exemple, la commande suivante ouvrira
    357 une vidéo de démo du logiciel "aerc" habituellement présentée sur
    358 https://aerc-mail.org/ :
    359 
    360 	mpv https://yukari.sr.ht/aerc-intro.webm
    361 
    362 Si l'on fait la même chose pour une vidéo youtube :
    363 
    364 	mpv https://www.youtube.com/watch?v=dQw4w9WgXcQ
    365 
    366 La vidéo s'ouvre bien avec mpv. Cependant vous noterez ce qui s'affiche dans
    367 votre console :
    368 
    369 	 (+) Video --vid=1 (*) (h264 1920x1080 25.000fps)
    370 	 (+) Audio --aid=1 --alang=eng (*) (opus 2ch 48000Hz)
    371 	AO: [pulse] 48000Hz stereo 2ch float
    372 	VO: [gpu] 1920x1080 yuv420p
    373 
    374 La vidéo a automatiquement été lancée en 1080p. Par défaut mpv choisi la
    375 résolution disponible la plus élevée. Même si cela peut parfaitement convenir
    376 à votre besoin il serait préférable d'avoir un peu plus de contrôle, par choix
    377 mais aussi par nécessité. Si vous exécutez cette commande par exemple :
    378 
    379 	mpv https://www.youtube.com/embed/LrzWrvOjJm8
    380 
    381 vous risqueriez d'avoir des surprises. La plus haute résolution disponible pour
    382 cette vidéo est la 8k. J'espère pour vous que vous avez une bonne bande
    383 passante et une machine de guerre. Pour nous permettre de choisir la résolution
    384 nous allons faire appel à un logiciel nommé [yt-dlp], un fork activement
    385 développé de youtube-dl.
    386 
    387 Ce logiciel permet, entre mille autres choses, d'afficher et de sélectionner
    388 les différentes qualités d'une vidéo youtube. Il fonctionne pour de nombreux
    389 autres sites d'ailleurs. Avec l'option `-F` nous pouvons afficher les
    390 résolutions disponibles pour cette vidéo du débat présidentiel sur le climat :
    391 
    392 	yt-dlp -F 1-28-grEZjk
    393 	[youtube] 1-28-grEZjk: Downloading webpage
    394 	[youtube] 1-28-grEZjk: Downloading android player API JSON
    395 	[youtube] 1-28-grEZjk: Downloading player c6736352
    396 	[info] Available formats for 1-28-grEZjk:
    397 	ID  EXT   RESOLUTION FPS |   FILESIZE   TBR PROTO | VCODEC        VBR ACODEC      ABR     ASR MORE INFO
    398 	------------------------------------------------------------------------------------------------------------------------
    399 	sb2 mhtml 48x27          |                  mhtml | images                                    storyboard
    400 	sb1 mhtml 80x45          |                  mhtml | images                                    storyboard
    401 	sb0 mhtml 160x90         |                  mhtml | images                                    storyboard
    402 	139 m4a                  |   67.62MiB   48k https | audio only        mp4a.40.5   48k 22050Hz low, m4a_dash
    403 	249 webm                 |   70.80MiB   51k https | audio only        opus        51k 48000Hz low, webm_dash
    404 	250 webm                 |   88.68MiB   63k https | audio only        opus        63k 48000Hz low, webm_dash
    405 	140 m4a                  |  179.47MiB  129k https | audio only        mp4a.40.2  129k 44100Hz medium, m4a_dash
    406 	251 webm                 |  159.61MiB  115k https | audio only        opus       115k 48000Hz medium, webm_dash
    407 	17  3gp   176x144      7 |  105.09MiB   75k https | mp4v.20.3     75k mp4a.40.2    0k 22050Hz 144p
    408 	160 mp4   256x144     30 |   79.39MiB   57k https | avc1.4d400c   57k video only              144p, mp4_dash
    409 	278 webm  256x144     30 |   95.95MiB   69k https | vp9           69k video only              144p, webm_dash
    410 	133 mp4   426x240     30 |  161.61MiB  116k https | avc1.4d4015  116k video only              240p, mp4_dash
    411 	242 webm  426x240     30 |  161.06MiB  116k https | vp9          116k video only              240p, webm_dash
    412 	134 mp4   640x360     30 |  295.99MiB  213k https | avc1.4d401e  213k video only              360p, mp4_dash
    413 	18  mp4   640x360     30 |  760.45MiB  548k https | avc1.42001E  548k mp4a.40.2    0k 44100Hz 360p
    414 	243 webm  640x360     30 |  413.92MiB  298k https | vp9          298k video only              360p, webm_dash
    415 	135 mp4   854x480     30 |  472.75MiB  341k https | avc1.4d401f  341k video only              480p, mp4_dash
    416 	244 webm  854x480     30 |  574.87MiB  414k https | vp9          414k video only              480p, webm_dash
    417 	136 mp4   1280x720    30 |    1.47GiB 1084k https | avc1.4d401f 1084k video only              720p, THROTTLED, mp4_dash
    418 	247 webm  1280x720    30 |    1.02GiB  755k https | vp9          755k video only              720p, THROTTLED, webm_dash
    419 	22  mp4   1280x720    30 | ~  1.68GiB 1213k https | avc1.64001F 1213k mp4a.40.2    0k 44100Hz 720p
    420 	298 mp4   1280x720    60 |    2.60GiB 1923k https | avc1.4d4020 1923k video only              720p60, mp4_dash
    421 	302 webm  1280x720    60 |    2.32GiB 1715k https | vp9         1715k video only              720p60, webm_dash
    422 	299 mp4   1920x1080   60 |    5.05GiB 3731k https | avc1.64002a 3731k video only              1080p60, mp4_dash
    423 	303 webm  1920x1080   60 |    4.35GiB 3213k https | vp9         3213k video only              1080p60, webm_dash
    424 
    425 Si on passe un peu de temps à analyser ce tableau nous pouvons en apprendre
    426 beaucoup sur le fonctionnement de youtube. On constate que youtube a des
    427 streams audio (ID de 139 à 251), des streams vidéos (tous ceux avec "video
    428 only" dans la colonne ACODEC - audio codec) et deux streams avec les deux
    429 ensemble (ID 18 et 22). A l'aide d'algo un peu malin et du protocole [HLS]
    430 youtube peut identifier la combinaison de streams audio et vidéo qui conviendra
    431 le mieux à votre débit - mais pas la puissance de votre machine ou alors c'est
    432 très mal implémenté - et s'adaptera en temps réel.
    433 
    434 En ayant connaissance de ces identifiants et à l'aide de l'option `-f` de
    435 yt-dlp nous pouvons dorénavant choisir précisément les streams que l'on veut.
    436 C'est le moment de faire son marché. Puisque c'est un débat présidentiel, nous
    437 décidons de ne récupérer que l'audio, comme nous le ferions pour un podcast.
    438 Mais attention, si nous lancions telle quelle la commande :
    439 
    440 	yt-dlp -f 139 https://www.youtube.com/watch\?v\=1-28-grEZjk
    441 
    442 nous téléchargerions en local la totalité du débat (67Mo). Pour pouvoir le
    443 streamer dans mpv il nous faut ajouter une option `--get-url` qui permet
    444 d'obtenir le lien direct vers ce stream audio. C'est ensuite ce lien que l'on
    445 fera passer en argument à mpv :
    446 
    447 	yt-dlp -f 139 --get-url https://www.youtube.com/watch\?v\=1-28-grEZjk
    448 	https://rr1---sn-4g5e6ns6.googlevideo.com/videoplayback?expire=1648249604&ei=pPY9YtiPB837xN8PiuiKsAU&ip=2a01%3Acb10%3A2da%3A2600%3Ae488%3A3768%3A858%3Afc0d&id=o-AB05vEVWFOI_-gi5O6CK_NLkCWMx0X_CVYKxDabR7WTp&itag=139&source=youtube&requiressl=yes&mh=pM&mm=31%2C26&mn=sn-4g5e6ns6%2Csn-25ge7nzs&ms=au%2Conr&mv=m&mvi=1&pl=40&initcwndbps=1018750&vprv=1&mime=audio%2Fmp4&gir=yes&clen=70904512&dur=11627.809&lmt=1647388719857621&mt=1648227660&fvip=1&keepalive=yes&fexp=24001373%2C24007246&beids=23886207&c=ANDROID&txp=5432434&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cgir%2Cclen%2Cdur%2Clmt&sig=AOq0QJ8wRQIgdV_eYJ9F1UehezBlnjURICGL7dkKjdz2NPCya6b7tWICIQCMzNCuNNZrg9YE04omDXHQZ6zr0xiYyS2mhKtYA9ZihA%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AG3C_xAwRQIgdGhwPJPgf4QTOD6i3hiDPURnvoNBfc0kMcxY_IKY5VoCIQDB-B35CY6KlUPI0FmhyjFww9nKfwnsUkOHVaWMToHtdA%3D%3D
    449 
    450 C'est derrière ce lien barbare que se cache le stream. Si vous avez exécuté la
    451 commande vous pouvez essayer d'ouvrir le lien récupéré dans un navigateur, cela
    452 fonctionnera parfaitement bien. Celui dans l'article est expiré, youtube les
    453 change constamment. Pour éviter d'avoir à le copier/coller vous pouvez capturer
    454 le résultat de la commande pour la faire passer en argument à MPV :
    455 
    456 	mpv $(yt-dlp -f 139 --get-url https://www.youtube.com/watch\?v\=1-28-grEZjk)
    457 
    458 Les formats de yt-dlp peuvent être conditionnels, porter sur la taille des
    459 fichiers, le bitrate etc. Par exemple on peut lui demander le pire stream audio
    460 avec le format `worstaudio` ou le flux vidéo le plus proche d'un certain
    461 bitrate. Voir la [documentation] pour plus d'infos.
    462 
    463 Une liste non exhaustive des options de `yt-dlp` que je trouve utiles :
    464 
    465   * `-F` permet de lister les formats disponibles
    466   * `-f` permet de choisir le format
    467   * `--get-url` renvoie l'url directe vers la vidéo au bon format plutôt que de
    468     lancer le téléchargement
    469   * `-U` met à jour yt-dlp
    470   * `--write-subs` extrait les sous-titres disponibles
    471 
    472 Encore plus simple, mpv vient avec une option qui, si vous avez yt-dlp
    473 installé sur votre pc, vous permet de faire passer des formats dans la même
    474 commande. Par exemple, si l'on veut un son d'une bonne qualité et une image un
    475 peu médiocre parce que l'on fait à manger en même temps et que l'on y jettera
    476 un coup d'oeil que rarement :
    477 
    478 	mpv --ytdl-format="251+134" https://www.youtube.com/watch\?v\=1-28-grEZjk
    479 
    480 mpv se chargera de faire appel à `yt-dlp` lui même.
    481 
    482 Liste non exhaustive d'options de `mpv` que je trouve utiles :
    483 
    484   * `--ytdl-format` pour choisir le format de la vidéo
    485   * `--volume` pour choisir le volume au démarrage de la vidéo
    486   * `--cache-secs` pour déterminer le nombre de secondes pré-chargées
    487   * `--term-osd-bar` pour afficher une barre de progression dans la console,
    488     pour un podcast par exemple
    489 
    490 TODO : Ajouter un passage sur --script-opts=ytdl_hook-all-formats=yes et --hls-bitrate si ça fonctionne
    491 TODO : prérequis, créer une issue sur github ?
    492 
    493 A ce stade là vous pourriez vous faire la remarque : "Génial mais c'est
    494 fatiguant de taper la commande à chaque fois, de faire des copier/coller etc et
    495 qu'est-ce que l'on fait si l'on veut faire une recherche ?" Et vous auriez
    496 raison !
    497 
    498 Nous allons voir trois solutions, l'une pour les liens youtube sur lesquels
    499 vous tomberez inévitablement en parcourant le web, l'autre qui ne dispensera
    500 pas de copier/coller mais facilitera l'affaire si quelqu'un vous envoie un lien
    501 youtube via une application de messagerie par exemple, la dernière qui vous
    502 permettra de chercher une vidéo youtube sans passer par youtube.com.
    503 
    504 #### ff2mpv
    505 
    506 [ff2mpv] est une extension chrome ou firefox permettant de lancer la lecture
    507 d'une vidéo youtube depuis le navigateur dans mpv. Elle fonctionne en
    508 installant sur votre machine un script qui lancera une commande identique à
    509 celle que l'on a construit précédemment. Ce script se lancera quand vous ferez
    510 clique droit sur un lien youtube puis "Play in MPV".
    511 
    512 La procédure d'installation est disponible sur [le wiki du dépôt github] de
    513 l'extension.
    514 
    515 Le nerf de la guerre se trouve dans un script nommé `ff2mpv.py` qui a pour but de
    516 lancer une commande similaire à celles que l'on a construit plus tôt dans
    517 l'article.
    518 
    519 Dans mon ff2mpv.py j'ai par exemple :
    520 
    521 	args = ["mpv","--ytdl-format=worstvideo[height>=400]+worstaudio/worstvideo[height>=300]+worstaudio/worstvideo[height>=700]+worstaudio/worst/best","--cache-secs=15","--",url]
    522 
    523 Cette commande utilise les formats conditionnels de yt-dlp pour tenter d'avoir,
    524 dans cet ordre précisément, la meilleure qualité en 480p, sinon en 360p sinon
    525 en 720p sinon la meilleure qualité tout court.
    526 
    527 #### alias
    528 
    529 Si vous utilisez une distribution linux vous pouvez créer des alias. Un alias
    530 permet d'exécuter une commande en en tapant une autre généralement plus courte.
    531 C'est une sorte de raccourci. Nous pourrions par exemple créer l'alias 
    532 
    533 	yt() mpv --ytdl-format="18" --cache-secs=15 --volume=50 "$@"
    534 
    535 Grâce à cet alias, si vous avez actuellement dans le presse-papier un lien
    536 youtube il suffit de taper
    537 
    538 	yt ctrl+v
    539 
    540 pour lancer une vidéo youtube dans mpv avec les options que vous conviennent.
    541 Ici j'ai choisi le format `18`, vidéo et audio muxés en 360p.
    542 
    543 #### Idiotbox pour la recherche youtube
    544 
    545 Vous voulez retrouver ce super meme qui vous avait bien fait rire ? Vous ne
    546 voulez pas avoir affaire à l'interface youtube.com ? Quelqu'un a créé un petit
    547 logiciel nommé [idiotbox] exactement pour cela. Il offre une interface web -
    548 et gopher ! - très simple, qui va faire la recherche youtube pour vous et vous
    549 présente les résultats de façon claire et sobre. Pas besoin de l'installer, la
    550 personne l'ayant développé en héberge une [instance] elle même. 
    551 
    552 ### 4 : Vive la console
    553 
    554 Cette étape vise à transposer ce que l'on a vu précemment dans la console en
    555 faisant appel à peu de dépendances. L'idée est d'avoir un ensemble d'outils qui
    556 permet d'avoir une utilisation agréable et efficace de youtube sur un
    557 ordinateur aussi peu puissant qu'un raspberry et avec une quantité de mémoire
    558 limitée. Cela permet également d'avoir uniquement recours au clavier. Deux
    559 nouveaux outils vont nous aider dans ce travail, sfeed et lynx.
    560 
    561 #### sfeed et sfeed_curses
    562 
    563 [sfeed] est un ensemble d'outils permettant de parser, manipuler, lire des
    564 flux atom/rss. Le nom du projet porte celui de son composant principal, le
    565 programme sfeed, qui fait le gros du travail en parsant l'xml des flux.
    566 
    567 Bien qu'sfeed ne soit pas si compliqué que ça je ne vais pas m'aventurer à en
    568 expliquer tout le fonctionnement. Le [README] du projet et les pages de manuel
    569 des scripts fournis sont très bien fait, je vous recommande vivement de les
    570 lire attentivement - et pas que en diagonale en cherchant rapidement ce dont
    571 vous avez besoin, je vous vois !
    572 
    573 Je vais expliquer les modifications que j'y ai apporté pour deux raisons.
    574 
    575 1. Vous voudriez peut-être faire les mêmes
    576 2. Démontrer que c'est un ensemble d'outil très "hackable", certains diraient
    577    conviviale
    578 
    579 Tout commence avec sfeed. Fondamentalement tout ce qu'sfeed fait est de
    580 transformer des données ayant cette tête - ici les deux premiers articles de la
    581 une du monde tel que décrits dans le flux rss du journal :
    582 
    583     <item>
    584       <title><![CDATA[Pénurie de carburant, en direct : la grève est reconduite sur les sites de TotalEnergies et Esso-ExxonMobil, la CGT appelle à élargir le mouvement à tout le secteur de l’énergie]]></title>
    585       <pubDate>Thu, 13 Oct 2022 08:14:13 +0200</pubDate>
    586       <description><![CDATA[TotalEnergies « doit augmenter ses salaires » et la CGT doit « se saisir de la main qui a été tendue » pour négocier, a affirmé jeudi matin sur RTL, le ministre de l’économie, Bruno Le Maire.]]></description>
    587       <guid isPermaLink="true">https://www.lemonde.fr/economie/live/2022/10/13/penurie-de-carburant-la-greve-se-poursuit-dans-les-raffineries-premieres-requisitions-chez-esso-exxonmobil-suivez-la-situation-en-direct_6145597_3234.html</guid>
    588       <link>https://www.lemonde.fr/economie/live/2022/10/13/penurie-de-carburant-la-greve-se-poursuit-dans-les-raffineries-premieres-requisitions-chez-esso-exxonmobil-suivez-la-situation-en-direct_6145597_3234.html</link>
    589       <media:content url="https://img.lemde.fr/2022/10/13/500/0/6000/3000/644/322/60/0/0a467f5_1665643499826-dsc04333bis.jpg" width="644" height="322">
    590         <media:credit scheme="urn:ebu">MARIE BENOIST POUR « LE MONDE »</media:credit>
    591       </media:content>
    592     </item>
    593     <item>
    594       <title><![CDATA[Pap Ndiaye, ministre de l’éducation nationale : « Il y a bel et bien une vague de port de tenues pouvant être considérées comme religieuses »]]></title>
    595       <pubDate>Thu, 13 Oct 2022 06:55:08 +0200</pubDate>
    596       <description><![CDATA[Le ministre dévoile les chiffres des atteintes à la laïcité, qui sont en hausse. Un phénomène porté notamment par les réseaux sociaux, assure-t-il.]]></description>
    597       <guid isPermaLink="true">https://www.lemonde.fr/societe/article/2022/10/13/pap-ndiaye-la-republique-est-plus-forte-que-tiktok_6145585_3224.html</guid>
    598       <link>https://www.lemonde.fr/societe/article/2022/10/13/pap-ndiaye-la-republique-est-plus-forte-que-tiktok_6145585_3224.html</link>
    599       <media:content url="https://img.lemde.fr/2022/10/12/1664/0/4438/2219/644/322/60/0/ab91c70_1665584679283-ndiaye-alcock-008.JPG" width="644" height="322">
    600         <media:description type="plain">Pap Ndiaye, ministre de l'Éducation nationale et de la Jeunesse, au ministère de l'éducation nationale, à Paris, le 11 octobre 2022. </media:description>
    601         <media:credit scheme="urn:ebu">ED ALCOCK/MYOP POUR « LE MONDE »</media:credit>
    602       </media:content>
    603     </item>
    604 
    605 en un format TSV - Tab Separated Value :
    606 
    607 	1665641653	Pénurie de carburant, en direct : la grève est reconduite sur les sites de TotalEnergies et Esso-ExxonMobil, la CGT appelle à élargir le mouvement à tout le secteur de l’énergie	https://www.lemonde.fr/economie/live/2022/10/13/penurie-de-carburant-la-greve-se-poursuit-dans-les-raffineries-premieres-requisitions-chez-esso-exxonmobil-suivez-la-situation-en-direct_6145597_3234.html	TotalEnergies « doit augmenter ses salaires » et la CGT doit « se saisir de la main qui a été tendue » pour négocier, a affirmé jeudi matin sur RTL, le ministre de l’économie, Bruno Le Maire.	html	https://www.lemonde.fr/economie/live/2022/10/13/penurie-de-carburant-la-greve-se-poursuit-dans-les-raffineries-premieres-requisitions-chez-esso-exxonmobil-suivez-la-situation-en-direct_6145597_3234.html			
    608 	1665636908	Pap Ndiaye, ministre de l’éducation nationale : « Il y a bel et bien une vague de port de tenues pouvant être considérées comme religieuses »	https://www.lemonde.fr/societe/article/2022/10/13/pap-ndiaye-la-republique-est-plus-forte-que-tiktok_6145585_3224.html	Le ministre dévoile les chiffres des atteintes à la laïcité, qui sont en hausse. Un phénomène porté notamment par les réseaux sociaux, assure-t-il.	html	https://www.lemonde.fr/societe/article/2022/10/13/pap-ndiaye-la-republique-est-plus-forte-que-tiktok_6145585_3224.html			
    609 
    610 L'avantage de ce format est qu'il est bien plus facile de le manipuler,
    611 notamment avec tous les outils standards Unix.
    612 
    613 On pourrait requêter à la main le flux rss et le faire passer par sfeed à
    614 chaque fois que l'on veut se mettre à jour mais ce ne serait pas très pratique.
    615 Le projet sfeed prévoit un mécanisme de mise à jour nommé `sfeed_update`. Ce
    616 script a pour but de prendre une liste de flux auxquels vous êtes abonné·e et
    617 écrire les fichiers correspondants au format sfeed dans le dossier adéquat -
    618 normalement `~/.sfeed/feeds`. Il est configurable via le fichier de conf
    619 `~/.sfeed/sfeedrc`.
    620 
    621 sfeedrc est un fichier de "configuration" mais en réalité c'est un script shell
    622 qui surcharge la fonction `feeds` qui se trouve dans le script `sfeed_update`.
    623 La surcharge permet d'appeler la fonction `feed` de `sfeed_update` sur tous les
    624 flux. S'abonner à un flux revient donc à ajouter une ligne type
    625 
    626 	feed 'Le Réveilleur' 'https://www.youtube.com/feeds/videos.xml?channel_id=UC1EacOJoqsKaYxaDomTCTEQ'
    627 
    628 à la fonction `feed` dans sfeedrc. Le premier argument sera le nom du fichier
    629 créé qui contiendra la sortie sfeed appelé sur le lien vers le flux.
    630 
    631 Après avoir listé toutes les chaînes auxquelles vous voulez vous abonner il
    632 suffit d'exécuter `sfeed_update` pour générer tous les fichiers. Il devrait y
    633 avoir dans `~/.sfeed/feeds` des fichiers texte au format TSV.
    634 
    635 Il est assez évident que s'il n'est pas agréable de lire un flux rss en xml, ce
    636 n'est pas beaucoup mieux au format sfeed tel quel. Le projet vient donc avec un
    637 ensemble de script qui permettent de formatter la sortie d'sfeed. Par exemple
    638 `sfeed_html` transforme le flux en fichier html, `sfeed_plain` en un format
    639 texte relativement lisible pour un humain etc.
    640 
    641 L'interface fournie la plus aboutie est probablement sfeed_curses. C'est un
    642 logiciel, basé sur la librairie curses, qui génère une interface TUI - Terminal
    643 User Interface - permettant de parcourir ses flux et ouvrir les éléments.
    644 
    645 Si vous avez réussi à exécuter sfeed_update une première fois et que vous faites
    646 
    647 	sfeed_curses ~/.sfeed/feeds/*
    648 
    649 l'interface devrait charger l'ensemble des flux. S'affichera à gauche un menu
    650 permettant de parcourir les flux. En un sélectionnant vous verrez s'afficher à
    651 droite tous les éléments du flux.
    652 
    653 Il faut encore choisir comment vous allez ouvrir le contenu. Par défaut
    654 `sfeed_curses` utilise le paramétrage de `xdg-open` et ouvrira très
    655 probablement les liens dans votre navigateur de choix. Vous pouvez conserver ce
    656 fonctionnement ou le modifier. `sfeed_curses` laisse la possibilité de donner
    657 une valeur à une variable d'environnement `SFEED_PLUMBER` qui devra pointer
    658 vers un script. `sfeed_curses` exécutera ce script en lui passant en argument
    659 le lien de l'élément que l'on veut ouvrir. On peut ainsi dans le script choisir
    660 très exactement avec quoi nous voulons ouvrir l'élément, selon si c'est un
    661 article, une image, une vidéo etc. Si vous voulez que le contenu s'ouvre dans
    662 la même fenêtre il faut aussi donner la valeur "1" à la variable
    663 `SFEED_PLUMBER_INTERACTIVE`.
    664 
    665 Pour modifier la valeur des variables d'environnement
    666 
    667 	export SFEED_PLUMBER=~/.sfeed/sfeed_plumber
    668 	export SFEED_PLUMBER_INTERACTIVE="1"
    669 
    670 Evidemment le script `sfeed_plumber` peut se nommer n'importe comment et se
    671 trouver où vous voulez.
    672 
    673 A la lumière de tout ce que l'on a vu précedemment, je recommande d'ouvrir les
    674 vidéos youtube avec mpv, les articles avec lynx etc. Pour exemple mon script
    675 `sfeed_plumber` ressemble à quelque chose comme ça :
    676 
    677 	#!/bin/sh
    678 	
    679 	case $1 in
    680 		*"youtube.com/watch"* )
    681 			[ "$2" = 'audio' ] && format="worstaudio" || format="18"
    682 			mpv --ytdl-format="$format" --cache-secs=30 --volume=50 "$1"
    683 			;;
    684 		*"tube.picasoft.net"* )
    685 			mpv --ytdl-format="480p" --cache-secs=15 --volume=50 "$1"
    686 			;;
    687 		*"twitch.tv"* )
    688 			mpv --ytdl-format="480p" --volume=50 "$1"
    689 			;;
    690 		*".mp4"* )
    691 			mpv "$1"
    692 			;;
    693 		* )
    694 			lynx "$1"
    695 	esac
    696 
    697 Dernière modification que je vais couvrir mais qui m'est particulièrement
    698 personnelle. Je suis abonné a beaucoup de chaînes. Mon `sfeed_update` génère
    699 donc beaucoup de fichiers dans `~/.sfeed/feeds`. En les ouvrant dans
    700 `sfeed_curses` je dois donc parcourir une longue liste sur la gauche pour
    701 vérifier quelles chaînes ont publié récemment. Je préfère avoir une liste
    702 unique comme sur l'interface youtube. Pour cela il faut que je concatène tous
    703 les flux youtube en un seul fichier au format sfeed, trié chronologiquement. 
    704 
    705 J'ai modifié `sfeedrc` pour que les fichiers générés depuis des flux youtube
    706 contiennent tous `[Y]` dans leurs noms. Exemple :
    707 
    708 	feed '[Y] Le Réveilleur' 'https://www.youtube.com/feeds/videos.xml?channel_id=UC1EacOJoqsKaYxaDomTCTEQ'
    709 
    710 J'ai ensuite ajouté ce bout de shell à la fin de la fonction `feed` - écrit y'a
    711 longtemps, j'pense qu'on peut mieux faire - pour faire la concaténation.
    712 
    713 	wait
    714 	cd ~/.sfeed/feeds
    715 	twoweeksago=$(date --date="2 weeks ago" +%s)
    716 	cat \[Y\]\ * | awk -v t=$twoweeksago '$1 > t' | sort -t '	' -k1rn,1 > youtube
    717 	rm -f \[Y\]\ *
    718 
    719 J'obtiens ainsi un seul fichier youtube qui décrit, dans l'ordre
    720 antéchronologique, toutes les vidéos sorties sur les deux dernières semaines.
    721 
    722 Je peux finalement faire
    723 
    724 	sfeed_curses < ~/.sfeed/feeds/youtube
    725 
    726 pour ouvrir mon flux d'abonnement youtube.
    727 Si vous voulez pas retaper cette commande souvenez vous des alias.
    728 
    729 Si vous avez suivi jusque là vous remarquerez qu'`sfeed_curses` n'affiche pas
    730 les noms de chaînes et les titres mais la date de publication de l'élément.
    731 
    732 Pour y remédier j'ai patché les sources afin que s'affiche dans la première
    733 colonne non pas le nom du fichier mais la valeur que l'on trouve dans le champ
    734 "auteur" du flux rss. Vous pouvez trouver le patch
    735 [ici](./display_author.patch).
    736 
    737 Il est appliquable avec la commande `patch -p1 < fichier_du_patch`.
    738 
    739 [Autre patch](./arguments-to-plumber.patch) pour permettre de passer un
    740 argument supplémentaire au script `sfeed_plumber`, en plus du lien à ouvrir. En
    741 l'occurence je l'ai utilisé pour que le raccourci `o` ne fasse plus strictement
    742 la même chose que d'appuyer sur entrée mais à la place passe en argument une
    743 chaîne de caractère "audio". Je vérifie ensuite dans `sfeed_plumber` la valeur
    744 de cette chaîne et choisi le format à lancer en conséquence.
    745 
    746 J'ai fait un semestre de C en cours en 2013 quand j'avais 17 ans. J'ai pourtant
    747 été capable d'effectuer ces modifications relativement facilement. C'est une
    748 démonstration de plus qu'un logiciel simple, modeste dans ses fonctionnalités
    749 et bien compartimenté peut être réappropriable pour un·e informaticien·ne très
    750 moyen·ne même s'il est développé en C. Pas besoin de documentation, pas besoin
    751 d'un système d'extension complexe, pas besoin d'un panneau de configuration.
    752 Vous voulez modifier quelque chose, modifiez le code. Vous n'avez *jamais* codé
    753 ? Demandez à votre geek préféré·e et il y arrivera peut-être ou cherchez sur
    754 internet des patchs simples à appliquer. Dans tous les cas on ne complexifie
    755 pas le socle, il se doit d'être maintenable et simple à comprendre.
    756 
    757 Je détail la procédure que j'ai suivi pour la première modification pour que
    758 vous puissiez juger de vous même de la difficulté de l'opération (et peut-être
    759 penser que j'abuse totalement en disant que c'est pas si difficile).
    760 
    761 Pour ce patch j'ai ouvert `sfeed_curses.c` dans vim. J'ai jeté un coup d'oeil
    762 aux structures de données, j'ai repéré `struct item` ligne 121.  Cette
    763 structure a un attribut `char *fields`. J'ai effectué une recherche dessus - en
    764 me plaçant dessus et appuyant sur `*` de façon répétée - pour tomber sur
    765 `fields[FieldUnixTimestamp]` ligne 1132. J'en déduis qu'il doit exister quelque
    766 part la liste des champs d'un item. Je me place au début du mot, le copie - en
    767 faisant `yw`- écrit sur la ligne suivante la commande - en collant le nom du
    768 champ avec `p`:
    769 
    770 	grep -n "FieldUnixTimestamp" ./*
    771 
    772 Je récupère le résultat de la commande en l'exécutant avec `.!sh`. J'obtiens
    773 
    774 	./sfeed_atom.c:79:		if (strtotime(fields[FieldUnixTimestamp], &parsedtime) ||
    775 	./sfeed_curses.c:1137:	if (!strtotime(fields[FieldUnixTimestamp], &parsedtime)) {
    776 	./sfeed_curses.c:1275:			if (!strtotime(fields[FieldUnixTimestamp], &parsedtime))
    777 	./sfeed_frames.c:44:		if (!strtotime(fields[FieldUnixTimestamp], &parsedtime) &&
    778 	./sfeed_gopher.c:89:		if (!strtotime(fields[FieldUnixTimestamp], &parsedtime) &&
    779 	./sfeed_html.c:44:		if (!strtotime(fields[FieldUnixTimestamp], &parsedtime) &&
    780 	./sfeed_mbox.c:77:		if (!strtotime(fields[FieldUnixTimestamp], &parsedtime) &&
    781 	./sfeed_mbox.c:89:		       fields[FieldUnixTimestamp],
    782 	./sfeed_mbox.c:90:		       fields[FieldUnixTimestamp][0] ? "." : "",
    783 	./sfeed_plain.c:29:		if (!strtotime(fields[FieldUnixTimestamp], &parsedtime) &&
    784 	./sfeed_twtxt.c:27:		if (!strtotime(fields[FieldUnixTimestamp], &parsedtime) &&
    785 	grep: ./themes: Is a directory
    786 	./util.h:55:	FieldUnixTimestamp = 0, FieldTitle, FieldLink, FieldContent,
    787 
    788 Je vois qu'il existe une liste des champs dans `util.h` à la ligne 55. Je me
    789 place sur le nom du fichier et je l'ouvre avec `Ctrl+W F` et me rends à la
    790 ligne 55 avec la commande `:55`. Je constate l'existence d'un champ
    791 `FieldAuthor` qui semble être ce dont j'ai besoin. Je ferme le ficher avec
    792 `:q`. Je supprime les lignes que j'avais généré en faisant `u`. Puisque l'on
    793 sait que la fonction que l'on veut modifier affiche déjà le titre de l'élément
    794 on continue notre recherche sur `FieldTitle`. On tombe tout de suite sur la
    795 fonction `item_row_format` ligne 1807. Ligne 1824 si l'élément est daté (c'est
    796 plus ou moins toujours le cas) alors la fonction imprime la date et le titre de
    797 l'élément. Nous supprimons les lignes 1827 et 1828 pour afficher à la place
    798 l'auteur·ice et le titre. Il faut également modifier le troisième argument de
    799 la fonction `snprintf` ligne 1825 pour lui dire que les éléments à afficher
    800 sont une chaîne de caractère dont on limite la taille à 25 caractères (choix
    801 personnel) et une seconde chaîne de caractère sans limite de taille et non plus
    802 des entiers. Finalement je modifie le calcul de `needsize` ligne 1818 pour
    803 inclure la longeur du nom de l'auteurice.
    804 
    805 Au passage, je sais pas vraiment ce que je fais et je crois que cette modif
    806 introduit un très léger bug d'affichage du titre du premier élément dans la
    807 liste à l'ouverture d'`sfeed_curses`.
    808 
    809 Vous n'avez bien sûr aucune obligation d'utiliser `sfeed` comme je le fais.
    810 C'est la beauté de cet ensemble d'outil, il cause très bien avec lui même et
    811 avec le reste des outils Unix. Vous pouvez donc relativement facilement en
    812 faire ce que vous voulez. Le détail de ma configuration est plus là pour faire
    813 la démonstration que c'est accessible à toute personne un peu technique et
    814 facilement "packageable" pour les autres que pour vous convaincre que vous
    815 devriez faire pareil.
    816 
    817 #### lynx
    818 
    819 Lynx est un navigateur qui tourne dans la console. C'est un logiciel
    820 relativement léger qui permet de rapidement parcourir des pages webs. Du moins
    821 quand elles sont simples et proches de la vision originelle du web. Lynx n'est
    822 pas capable d'exécuter du javascript et ne se base que sur la sémantique des
    823 balises HTML pour produire la mise en page. Autant dire que la grande majorité
    824 des sites webs commerciaux ne fonctionnent pas sur Lynx, en particulier
    825 youtube.
    826 
    827 Un simple blog, un site institutionnel "vitrine" ou un outil tel qu'idiotbox
    828 fonctionnera bien. Par exemple, si l'on exécute :
    829 
    830 	lynx codemadness.org/idiotbox
    831 	
    832 	                                     Search: "" sorted by relevance
    833 	__________________________________________________________
    834 	Search [Relevance____]
    835 
    836 on voit que Lynx nous propose de rentrer un terme de recherche. Un résultat de
    837 recherche aura la tête suivante :
    838 
    839 	3blue1brown_______________________________________________
    840 	Search [Relevance____]
    841 	  _____________________________________________________
    842 	
    843 	Oh, wait, actually the best Wordle opener is not “crane”…
    844 	3Blue1Brown | Atom feed
    845 	Published: 1 month ago
    846 	4,122,490 views
    847 	10:53
    848 	  _____________________________________________________
    849 	
    850 	Solving Wordle using information theory
    851 	3Blue1Brown | Atom feed
    852 	Published: 1 month ago
    853 	8,200,917 views
    854 	30:38
    855 
    856 Ce qui est autrement plus léger et lisible que l'interface web youtube pour peu
    857 que l'on accepte de ne plus voir les vignettes. Ce qui, j'espère que vous en
    858 conviendrez, est plus une feature qu'un bug. Si vous appuyez sur la touche
    859 entrée pour tenter de consulter la vidéo vous verrez ce charmant message
    860 d'erreur
    861 
    862 	Try watching this video on www.youtube.com, or enable JavaScript if it is disabled in your browser.
    863 
    864 Il va falloir trouver une parade. Personnellement j'utilise la fonctionnalité
    865 des "externals" de Lynx. Dans le fichier de configuration de lynx - sur ma
    866 machine `/etc/lynx/lynx.cfg` - se trouve un élément de configuration nommé
    867 `EXTERNAL_MENU`. Cet élément permet d'exécuter des commandes arbitraires depuis
    868 lynx en leur passant en argument le lien sous lequel se trouve le curseur. Dans
    869 mon fichier de configuration j'ai les entrées suivantes :
    870 
    871 	EXTERNAL_MENU:https\://www.youtube.com:360p:mpv --ytdl-format="18" --cache-secs=15 %s
    872 	EXTERNAL_MENU:https\://www.youtube.com:720p:mpv --ytdl-format="22" --cache-secs=15 %s
    873 
    874 Ainsi, quand le curseur de lynx se trouve sur un lien commençant par
    875 `https://www.youtube.com`, appuyer sur `.` ouvrira un petit menu permettant de
    876 lancer la vidéo en 360p ou 720p dans mpv. En combinant cela avec la fonction
    877 suivante qui construit l'url de recherche de vidéo pour idiotbox
    878 
    879 	yts() {
    880 		lynx https://codemadness.org/idiotbox/\?q=$(echo "$@" | sed 's/ /%20/g')\&o=relevance
    881 	}
    882 
    883 je peux rapidement dans la console taper `yts machin bidule` pour avoir la
    884 liste des vidéos de machin bidule, parcourir les résultats dans lynx, appuyer
    885 sur `.` et choisir la résolution que je veux. Simple, rapide, efficace.
    886 
    887 Si vous ne voulez pas dépendre de l'instance codemadness vous pouvez cloner le
    888 [projet] et le compiler vous même. Cela génèrera un cgi pour une interface web
    889 comme idiotbox mais aussi une interface en ligne de commande qui renvoie le
    890 résultat de la recherche sous format texte.
    891 
    892 	cli "Never Gonna Give You Up"
    893 	Rick Astley - Never Gonna Give You Up (Official Music Video)
    894 	URL:           https://www.youtube.com/embed/dQw4w9WgXcQ
    895 	Atom feed:     https://www.youtube.com/feeds/videos.xml?channel_id=UCuAXFkgsw1L7xaCfnd5JJOw
    896 	Channel title: Rick Astley
    897 	Channelid:     UCuAXFkgsw1L7xaCfnd5JJOw
    898 	Published:     12 years ago
    899 	Viewcount:     1,298,048,819 views
    900 	Duration:      3:33
    901 	===
    902 	Never Gonna Give You Up - Rick Astley (Lyrics) 🎵
    903 	URL:           https://www.youtube.com/embed/34Ig3X59_qA
    904 	Atom feed:     https://www.youtube.com/feeds/videos.xml?channel_id=UCvR2R7j218tzejtTsb_X6Rw
    905 	...
    906 
    907 Vous remarquerez au passage que la recherche renvoie, et ce peu importe
    908 l'interface, le flux atom de la chaîne. Ca peut donc être un moyen comme un
    909 autre de récupérer le flux rss d'une chaîne youtube.
    910 
    911 ## Limites
    912 
    913 On s'affranchit pas de youtube
    914 
    915 Streaming maison ?
    916 
    917 Peertube ?
    918 
    919 Questionner le besoin, moins de vidéos ?
    920 
    921 Impact de rendre plus accessible et facile la conso de vidéo sur le temps
    922 investit là dedans ? Anecdote perso, je regarde + de twitch depuis que j'ai un
    923 bidule pour "m'abonner" sans compte. C'est agréable mais est-ce que c'était
    924 vraiment l'effet recherché ?
    925 
    926 Solutions :
    927 
    928 * mutualiser les séances de visionage (projections/débats, ...)
    929 * copier sur disque a vos amis
    930 * préférer les podcasts (thinkerview, radio-france par exemple)
    931 * préferer le peer2peer et les plateformes communautaires
    932 
    933 [dark pattern]: https://fr.wikipedia.org/wiki/Dark_pattern
    934 [Un bon article]: https://www.temesis.com/blog/youtube-com-un-modele-de-performance-web-environnementale/
    935 [smartphone]: https://www.statista.com/statistics/1173543/youtube-viewing-time-share-device
    936 [NewPipe]: https://newpipe.net/
    937 [SkipTube]: https://github.com/Taregnaeem/SkipTube
    938 [Termux]: https://termux.com/
    939 [Ublock Origin]: https://addons.mozilla.org/en-US/firefox/addon/ublock-origin/
    940 [Enhancer for youtube]: https://addons.mozilla.org/en-US/firefox/addon/enhancer-for-youtube
    941 [Sponsorblock]: https://addons.mozilla.org/en-US/firefox/addon/sponsorblock/
    942 [Youtube recommended videos]: https://addons.mozilla.org/en-US/firefox/addon/youtube-recommended-videos
    943 [Youtube addon]: https://addons.mozilla.org/en-US/firefox/addon/youtube-addon
    944 [RSS]: https://fr.wikipedia.org/wiki/RSS
    945 [lecteurs RSS]: https://fr.wikipedia.org/wiki/Comparaison_des_agr%C3author:9gateurs_de_flux
    946 [sfeed_web]: https://git.codemadness.org/sfeed/files.html
    947 [mpv]: https://mpv.io/
    948 [yt-dlp]: https://github.com/yt-dlp/yt-dlp
    949 [HLS]: https://en.wikipedia.org/wiki/HTTP_Live_Streaming
    950 [documentation]: https://github.com/yt-dlp/yt-dlp#format-selection
    951 [ff2mpv]: https://addons.mozilla.org/en-US/firefox/addon/ff2mpv/
    952 [le wiki du dépôt github]: https://github.com/woodruffw/ff2mpv/wiki
    953 [idiotbox]: https://codemadness.org/idiotbox.html
    954 [instance]: https://codemadness.org/idiotbox/
    955 [sfeed]: http://codemadness.org/sfeed-simple-feed-parser.html
    956 [README]: http://codemadness.org/git/sfeed/file/README.html
    957 [projet]: https://git.codemadness/idiotbox