podcast2md — Link de episódio de podcast → Transcrição por capítulo
Posicionamento
- Entrada: Página de episódio de podcast ou link de áudio direto suportado pelo yt-dlp
- Saída:
<out-dir>\<slug>\chapters.md — Transcrição completa dividida pelos capítulos existentes no programa; não é resumo, não inventa conteúdo
- Motor: CapsWriter-Offline local (fun_asr_nano), script inicia automaticamente o servidor/cliente
Execução (usar a cópia de implantação, deve estar no mesmo diretório que start_server.exe)
python "D:\iStall\CapsWriter-Offline\podcast2md.py" "URL_do_episodio"
python "D:\iStall\CapsWriter-Offline\podcast2md.py" "URL_do_episodio" --transcribe-timeout 10800
- Repositório fonte:
D:\iStall\podcast2md\ (podcast2md.py + README.md + PODCAST2MD.md). Altere os scripts apenas na versão do repositório, depois copie para D:\iStall\CapsWriter-Offline\ para implantação.
- Tabela completa de parâmetros, detalhes do pipeline, códigos de saída: leia
D:\iStall\podcast2md\PODCAST2MD.md conforme necessário, não leia tudo por padrão.
Parâmetros principais
| Parâmetro | Padrão | Descrição |
|---|
--out-dir | <diretório_do_script>\work | Saída em work\<slug>\chapters.md |
--force | Desligado | Remove diretório do episódio existente e executa novamente; pode perder edições manuais |
--polish | off | basic apenas remove muletas por regras, sem refinamento por modelo; use off para transcrição fiel |
--server-timeout | 600s | Tempo de espera para iniciar o servidor |
--transcribe-timeout | 7200s | Tempo de espera para transcrição; aumente para episódios longos (ex.: 10800) |
Armadilhas (leia antes de executar)
- Áudio longo (>1h) leva dezenas de minutos para transcrever: execute em processo em segundo plano + monitore logs, não espere no terminal e colida com timeout da ferramenta.
- O servidor permanece residente após a transcrição (reutilização acelera a próxima); pare-o pelo menu de bandeja.
- Códigos de saída: 3 = falha no download, 4 = falha no servidor, 5 = falha na transcrição, 6 = saída já existe/ocupada, 7 = falha na divisão ou verificação.
- Logs:
<out-dir>\_podcast2md_server.log e <slug>\logs\.
- ffmpeg deve estar no PATH, caso contrário a transcrição do cliente falhará.
- Não faz diarização de falantes; transcrições com múltiplos falantes precisam de pós-processamento.
Fatos verificados na máquina local (verificado em 2026-10-19, cite diretamente sem redescobrir)
- ffmpeg 8.1.2 está no PATH — pré-requisito para transcrição de arquivos pelo cliente já satisfeito; se não tiver certeza, teste com
ffmpeg -version antes, não escreva suposições
- A máquina não possui GPU NVIDIA dedicada, transcrição via CPU: episódios de 30-60 minutos levam cerca de 10-30 minutos, mais de 1 hora leva 40-90 minutos; FunASR-Nano testado com gravação de 95 minutos levou ~46 minutos para transcrição pura (cerca de 0.5x a velocidade real, incluindo carregamento do modelo, veja work\full.out.log 2026-10-17)
- Características do script de referência FunASR-Nano testadas: segmentação de 15 segundos (segmentos inteiros de 60s repetem "hum"), gravação por segmentos em JSONL com retomada, segmentos de silêncio ignorados por limiar de energia
- Cobertura de legendas no Bilibili: legendas CC oficiais/do UP não são universais, legendas AI são mais comuns — primeiro use
yt-dlp --list-subs para detectar antes de decidir a rota, não assuma cobertura
Áudio local / Divisão de cenários próximos
- Arquivos de áudio locais (gravações, mp3/wav já baixados, sem link): não use este CLI. Use FunASR-Nano: venv
D:\iStall\FunASR-Nano\.venv, pesos D:\iStall\model-cache\huggingface\local\Fun-ASR-Nano-2512-hf; áudio longo deve ser segmentado e reconhecido parte por parte (segmentos inteiros de 60s repetem "hum"), veja D:\iStall\FunASR-Nano\work\full_transcribe.py.
- Vídeos com legendas (ex.: Bilibili): primeiro detecte legendas (
yt-dlp --list-subs), se houver legendas CC/AI, baixe diretamente como texto, não execute transcrição.
- Converter legendas em artigo (remover timestamps, formar texto): esse é o fluxo do srt-translator, não deste CLI.