podcast2md — Lien d'épisode de podcast → Transcription par chapitres
Positionnement
- Entrée : pages d'épisode de podcast ou URL audio directes supportées par yt-dlp
- Sortie :
<out-dir>\<slug>\chapters.md — transcription complète découpée selon les chapitres existants du programme ; pas de résumé, pas de contenu inventé
- Moteur : CapsWriter-Offline local (fun_asr_nano), le script lance automatiquement le serveur/client
Exécution (utiliser la copie de déploiement, doit être dans le même répertoire que start_server.exe)
python "D:\iStall\CapsWriter-Offline\podcast2md.py" "URL_épisode"
python "D:\iStall\CapsWriter-Offline\podcast2md.py" "URL_épisode" --transcribe-timeout 10800
- Dépôt source :
D:\iStall\podcast2md\ (podcast2md.py + README.md + PODCAST2MD.md). Ne modifier le script que dans la version du dépôt, puis copier vers D:\iStall\CapsWriter-Offline\ pour le déploiement.
- Tableau complet des paramètres, détails du pipeline, codes de sortie : lire
D:\iStall\podcast2md\PODCAST2MD.md selon les besoins, ne pas tout lire par défaut.
Paramètres clés
| Paramètre | Défaut | Description |
|---|
--out-dir | <répertoire_script>\work | Le résultat se trouve dans work\<slug>\chapters.md |
--force | désactivé | Supprime le répertoire existant de l'épisode et relance ; les modifications manuelles seront perdues |
--polish | off | basic supprime uniquement les tics de langage par des règles, pas de polissage par modèle ; pour une transcription fidèle, utiliser off |
--server-timeout | 600s | Temps d'attente pour le démarrage du serveur |
--transcribe-timeout | 7200s | Temps d'attente pour la transcription ; augmenter pour les programmes longs (ex. 10800) |
Pièges (lire avant d'exécuter)
- Audio long (>1h) : la transcription prend des dizaines de minutes : lancer en processus d'arrière-plan + surveiller les logs, ne pas attendre au premier plan et faire face à un timeout de l'outil.
- Le serveur reste actif après la transcription (accélère les prochaines utilisations) ; l'arrêter via l'icône dans la barre des tâches.
- Codes de sortie : 3=échec du téléchargement, 4=échec du serveur, 5=échec de la transcription, 6=le résultat existe déjà/est verrouillé, 7=échec de la division ou de la validation.
- Logs :
<out-dir>\_podcast2md_server.log et <slug>\logs\.
- ffmpeg doit être dans le PATH, sinon la transcription du client échoue.
- Pas de diarisation (séparation des locuteurs) ; les transcriptions multi-locuteurs nécessitent un post-traitement.
Faits vérifiés localement (vérifié le 2026-10-19, citer directement sans re-détection)
- ffmpeg 8.1.2 est dans le PATH — condition préalable à la transcription fichier client remplie ; en cas de doute, exécuter
ffmpeg -version pour vérifier, ne pas faire de suppositions
- Pas de GPU NVIDIA dédié, la transcription utilise le CPU : un programme de 30–60 minutes prend environ 10–30 minutes, plus d'une heure prend 40–90 minutes ; FunASR-Nano a transcrit un enregistrement de 95 minutes en environ 46 minutes (environ 0.5x temps réel, incluant le chargement du modèle, voir work\full.out.log 2026-10-17)
- Caractéristiques observées du script de référence FunASR-Nano : segmentation par 15 secondes (un segment de 60s répète "euh"), sauvegarde incrémentale par segment JSONL pour reprise après interruption, saut des segments silencieux selon un seuil d'énergie
- Couverture des sous-titres Bilibili : les sous-titres CC officiels/UP ne sont pas universels, les sous-titres IA sont plus courants — utiliser d'abord
yt-dlp --list-subs pour détecter avant de choisir la méthode, ne pas présumer de la couverture
Fichiers audio locaux / Répartition avec les scénarios voisins
- Fichier audio local (enregistrement, mp3/wav déjà téléchargé, sans lien) : ne pas utiliser ce CLI. Utiliser FunASR-Nano : venv
D:\iStall\FunASR-Nano\.venv, poids D:\iStall\model-cache\huggingface\local\Fun-ASR-Nano-2512-hf ; l'audio long doit être segmenté par parties (un segment de 60s répète "euh"), se référer à D:\iStall\FunASR-Nano\work\full_transcribe.py.
- Vidéos avec sous-titres (ex. Bilibili) : détecter d'abord les sous-titres (
yt-dlp --list-subs), s'il y a des sous-titres CC/IA, les extraire directement en texte, sans passer par la reconnaissance vocale.
- Sous-titres vers article (supprimer les timestamps, mettre en forme) : cela relève du workflow srt-translator, pas de ce CLI.