Contexte et exigences

Le besoin principal est de conserver localement des vidéos YouTube afin d’éviter les suppressions intempestives. L’auteur veut pouvoir les lire sur un téléviseur, les organiser par dizaines de playlists et les intégrer à un serveur multimédia existant (NAS). Le serveur utilise Jellyfin, qui ne gère les playlists qu’en tant que séries TV ou albums musicaux, ce qui impose une adaptation du modèle de métadonnées.

Chaîne d’acquisition avec yt-dlp et ytdl-sub

Le téléchargement s’appuie sur yt-dlp, un fork de youtube-dl, capable de récupérer les flux vidéo en haute résolution. Pour conserver la structure des playlists, l’auteur utilise ytdl-sub, le seul wrapper capable de reproduire la hiérarchie des listes via des fichiers .yaml. Le service tourne dans un conteneur docker‑compose qui expose une interface web VSCode, facilitant la modification des configurations sans quitter le navigateur.

templates:
  - name: "playlist_season"
    season: "{{ playlist.title }}"
    output: "{{ playlist.title }}/{{ title }}.{{ ext }}"

Ce fragment montre comment le titre de la playlist est injecté dans le champ season, contournant la limitation de Jellyfin qui ne met à jour le numéro de saison qu’après une réimportation complète.

Intégration à Jellyfin

Dans Jellyfin, la bibliothèque est créée en mode TV Shows sous le nom « YouTube ». Les scrapers de métadonnées sont désactivés et le serveur privilégie les informations contenues dans les fichiers. Ainsi, chaque playlist devient une « saison », chaque vidéo un « épisode ». Le problème initial était la duplication des vidéos dans deux séries (année et playlist). En assignant le titre de la playlist au champ saison, la duplication disparaît, mais la mise à jour nécessite un re‑scan complet, ce qui est prohibitif pour un téraoctet de données.

Optimisation du stockage avec Tdarr

Pour réduire l’empreinte disque, l’auteur utilise Tdarr, un service d’encodage en chaîne. Tous les fichiers sont convertis en HEVC/H.265, format plus efficace que le H.264 d’origine. Le processus a permis d’économiser environ 700 GB sur une bibliothèque de 2 TB. Tdarr fonctionne également en conteneur, mais son interface est jugée complexe ; la plupart des utilisateurs se limitent aux paramètres par défaut. Un bug connu est la perte des miniatures dans Jellyfin, résolvable par un rafraîchissement manuel des métadonnées.