CommunityRedacción y edicióngithub.com

BingWuJ/podcast2md-skill

Convierte enlaces de episodios de podcasts en transcripciones completas organizadas por capítulos (reconocimiento de voz local con CapsWriter-Offline, genera chapters.md, no es un resumen).

¿Qué es podcast2md-skill?

El skill `podcast2md` toma un enlace de un episodio de podcast compatible con yt-dlp (página del episodio o enlace directo de audio) y produce una transcripción completa, dividida según los capítulos existentes del programa, en un archivo `chapters.md`. No genera resúmenes ni inventa contenido; se basa exclusivamente en la transcripción local mediante CapsWriter-Offline (que utiliza FunASR-Nano para el reconocimiento de voz). El script levanta automáticamente un servidor y un cliente para realizar el proceso. Es especialmente útil para desarrolladores, investigadores o creadores que necesitan el texto íntegro de un episodio para su análisis, indexación o edición, sin recurrir a servicios externos de transcripción. El skill admite parámetros como `--force` para sobrescribir trabajos anteriores, `--polish` para una limpieza básica de muletillas (sin modelos de lenguaje), y tiempos de espera configurables para transcripciones largas. También incluye advertencias importantes sobre tiempos de procesamiento en CPU, dependencias (ffmpeg en PATH), y cómo manejar archivos de audio locales o vídeos con subtítulos (Bilibili, etc.) mediante flujos alternativos.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add BingWuJ/podcast2md-skill

Installed? Explore more Redacción y edición skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

podcast2md — Enlace de episodio de podcast → Transcripción por capítulos

Orientación

  • Entrada: página de episodio de podcast compatible con yt-dlp o enlace directo de audio
  • Salida: <out-dir>\<slug>\chapters.md — transcripción completa dividida según los capítulos existentes del programa; no es un resumen, no inventa contenido
  • Motor: CapsWriter-Offline local (fun_asr_nano), el script inicia automáticamente el servidor/cliente

Ejecución (usar la copia desplegada, debe estar en el mismo directorio que start_server.exe)

python "D:\iStall\CapsWriter-Offline\podcast2md.py" "URL_del_episodio"
python "D:\iStall\CapsWriter-Offline\podcast2md.py" "URL_del_episodio" --transcribe-timeout 10800
  • Repositorio fuente: D:\iStall\podcast2md\ (podcast2md.py + README.md + PODCAST2MD.md). Modificar solo la versión del repositorio, luego copiar a D:\iStall\CapsWriter-Offline\ para desplegar.
  • Tabla completa de parámetros, detalles del pipeline, códigos de salida: leer D:\iStall\podcast2md\PODCAST2MD.md según sea necesario, no leer todo por defecto.

Parámetros clave

ParámetroValor por defectoDescripción
--out-dir<directorio_del_script>\workEl resultado final está en work\<slug>\chapters.md
--forceDesactivadoElimina el directorio del episodio existente y vuelve a ejecutar; perderá modificaciones manuales
--polishoffbasic solo elimina muletillas mediante reglas, no es un pulido con modelo; usar off para transcripción fiel
--server-timeout600sTiempo de espera para iniciar el servidor
--transcribe-timeout7200sTiempo de espera para la transcripción; aumentar para programas largos (ej. 10800)

Advertencias (leer antes de ejecutar)

  • Audio largo (>1h): la transcripción puede tardar decenas de minutos: ejecutar como proceso en segundo plano + consultar registros, no esperar en primer plano y chocar con el tiempo de espera de la herramienta.
  • El servidor permanece en ejecución después de transcribir (acelera la siguiente ejecución); detenerlo desde la bandeja del sistema.
  • Códigos de salida: 3=fallo de descarga, 4=fallo del servidor, 5=fallo de transcripción, 6=resultado ya existe/ocupado, 7=fallo de división o verificación.
  • Registros: <out-dir>\_podcast2md_server.log y <slug>\logs\.
  • ffmpeg debe estar en PATH, de lo contrario la transcripción del cliente falla.
  • No se realiza diarización de hablantes; las transcripciones con múltiples hablantes requieren postprocesamiento.

Hechos verificados localmente (verificado el 2026-10-19, citar directamente sin necesidad de volver a detectar)

  • ffmpeg 8.1.2 ya está en PATH — el requisito previo para la transcripción de archivos por parte del cliente está cumplido; en caso de duda, probar con ffmpeg -version antes de hacer suposiciones
  • No hay GPU NVIDIA dedicada, la transcripción usa CPU: programas de 30–60 minutos tardan aproximadamente 10–30 minutos en generar el texto, más de 1 hora tarda 40–90 minutos; FunASR-Naro probado con una grabación de 95 minutos: transcripción pura ~46 minutos (aproximadamente 0.5x tiempo real, incluyendo carga del modelo, ver work\full.out.log 2026-10-17)
  • Características observadas del script de referencia FunASR-Nano: segmentos de 15 segundos (segmentos completos de 60s repiten "嗯"), escritura JSONL por segmento para reanudación tras interrupción, segmentos silenciosos saltados según umbral de energía
  • Cobertura de subtítulos de Bilibili: los subtítulos CC oficiales/del UP no están disponibles en todos los videos, los subtítulos AI son más comunes — primero detectar con yt-dlp --list-subs antes de decidir la ruta, no asumir cobertura basándose en suposiciones

Audio local / División de escenarios adyacentes

  • Archivos de audio locales (grabaciones, mp3/wav ya descargados, sin enlace): no usar este CLI. Usar FunASR-Nano: venv D:\iStall\FunASR-Nano\.venv, pesos D:\iStall\model-cache\huggingface\local\Fun-ASR-Nano-2512-hf; el audio largo debe segmentarse y transcribirse por partes (segmentos completos de 60s repiten "嗯"), referencia D:\iStall\FunASR-Nano\work\full_transcribe.py.
  • Videos con subtítulos (Bilibili, etc.): primero detectar subtítulos (yt-dlp --list-subs), si hay subtítulos CC/AI, extraerlos directamente como texto, sin necesidad de transcripción de voz.
  • Convertir subtítulos a texto (eliminar marcas de tiempo, dar formato): ese es el flujo de trabajo de srt-translator, no de este CLI.

Skills relacionados