dockeryoutubetranscriptiondéveloppementautomatisation

YouTube + Docker : Extraire automatiquement les transcriptions multi-langues de vidéos pour apprendre plus vite

3 min de lecture
Écouter l'article

YouTube + Docker : Extraire automatiquement les transcriptions multi-langues de vidéos pour apprendre plus vite

Quand on apprend l'informatique, on tombe sur des dizaines de vidéos YouTube chaque jour. Mais regarder chaque vidéo prend du temps, surtout quand on cherche les parties vraiment intéressantes : lignes de commandes, outils recommandés, concepts clés.

Alors j'ai eu une idée simple : extraire automatiquement la transcription complète, en plusieurs langues, avec horodatage, pour ensuite pouvoir l'analyser plus facilement. Et le tout, dans un conteneur Docker que je peux relancer à volonté.

Le concept : YouTube + Docker = Savoir structuré

Mon objectif :

  • Je saisis une ou plusieurs URL YouTube (en ligne de commande ou via une interface)
  • Le système télécharge les sous-titres disponibles
  • Il génère une transcription structurée avec horodatage
  • Il sauvegarde les fichiers JSON dans un répertoire output/

Tech utilisée

  • yt-dlp : pour récupérer les sous-titres automatiques en .vtt
  • webvtt-py : pour parser les fichiers .vtt facilement
  • Python : pour tout orchestrer
  • Docker : pour éviter d'installer quoi que ce soit localement

Le code Python

import subprocess
import os
import sys
import json
import webvtt

LANGS = ["en", "fr"]

def download_subtitles(url, lang):
    filename = f"video_{lang}"
    subprocess.run([
        "yt-dlp",
        "--write-auto-sub",
        "--sub-lang", lang,
        "--skip-download",
        "-o", f"{filename}.%(ext)s",
        url
    ])
    return f"{filename}.{lang}.vtt"

def vtt_to_json(vtt_path, lang):
    result = []
    for caption in webvtt.read(vtt_path):
        result.append({
            "start": caption.start,
            "end": caption.end,
            "text": caption.text
        })
    with open(f"output/transcript_{lang}.json", "w", encoding="utf-8") as f:
        json.dump(result, f, indent=2, ensure_ascii=False)

def main():
    os.makedirs("output", exist_ok=True)
    urls = sys.argv[1:]
    if not urls:
        print("Usage: docker run ... <url1> <url2> ...")
        return
    for url in urls:
        print(f"Processing {url}")
        for lang in LANGS:
            try:
                print(f"  ➜ Downloading subtitles in {lang}")
                vtt_file = download_subtitles(url, lang)
                print(f"  ➜ Converting to JSON with timestamps")
                vtt_to_json(vtt_file, lang)
            except Exception as e:
                print(f"Failed for language {lang}: {e}")

if __name__ == "__main__":
    main()

Le Dockerfile

FROM python:3.11-slim

RUN apt-get update && apt-get install -y ffmpeg curl && \
    pip install yt-dlp webvtt-py

WORKDIR /app

COPY requirements.txt ./
COPY extract_subs.py ./

ENTRYPOINT ["python", "extract_subs.py"]

Le script d'exécution (run.sh)

#!/bin/bash
chmod +x run.sh
mkdir -p output

if [ "$#" -eq 0 ]; then
  echo "❌ Tu dois fournir au moins une URL YouTube"
  echo "👉 Exemple : ./run.sh \"https://www.youtube.com/watch?v=xxx\""
  exit 1
fi

docker run --rm \
  -v "$(pwd)/output:/app/output" \
  transcripteur-youtube "$@"

💡 Astuce ZSH : si tu utilises ZSH, n'oublie pas de mettre l'URL entre guillemets pour éviter que les & ou autres caractères spéciaux ne soient interprétés par le shell. Sinon, tu peux désactiver temporairement l'expansion de glob avec setopt NO_NOMATCH.

Résultat attendu

À la fin de l'exécution, tu obtiens des fichiers comme :

output/
├── transcript_en.json
└── transcript_fr.json

Chaque fichier contient le texte complet, horodaté, et structuré, prêt à être utilisé pour la lecture ou l'archivage.

Pourquoi c'est utile ?

  • 🔍 Recherche rapide dans une vidéo longue (ctrl+F sur le JSON)
  • 🌐 Traduction multilingue
  • 🧠 Lecture rapide hors ligne ou imprimée
  • 📚 Constitution d'une base de savoir lisible et structurée

Prochaines étapes possibles

  • Générer un fichier texte ou Markdown lisible à partir du JSON
  • Ajouter d'autres langues si disponibles
  • Créer une interface plus user-friendly

Conclusion

Ce petit outil m'aide déjà à aller beaucoup plus vite dans ma veille tech. Il me permet de capturer l'essentiel de vidéos longues et d'en garder une trace exploitable. Et grâce à Docker, l'installation est propre et rapide.

Si vous aussi vous voulez mieux apprendre avec YouTube, testez cette méthode !

Vidéos tutorielles recommandées

Docker pour débutants : déployer simplement vos applications

Docker pour débutants

Python et l'automatisation des tâches répétitives

Python et l'automatisation