Durante meses, cada clase que grababa me costaba mucho más tiempo del que duraba la propia grabación. Producir un curso online no termina cuando apagas la cámara: empieza ahí.
Después de cada sesión venía la misma rutina:
- Escuchar la grabación entera para marcar silencios y respiraciones largas.
- Mover el video a DaVinci Resolve y cortar manualmente las pausas.
- Transcribir el audio para los subtítulos.
- Redactar la descripción para Udemy, un post para LinkedIn, otro para Instagram, otro para YouTube.
- Y todo eso, multiplicado por cada clase. Para un curso de 30 lecciones, eran varios días enteros de edición.
Hasta que decidí construirme una herramienta que hiciera el 80% de ese trabajo en mi propia máquina, sin pagar APIs externas, sin enviar mis grabaciones a la nube y sin depender de nadie. Este es el pipeline que terminé armando.
El problema concreto
Mi flujo tenía dos cuellos de botella muy claros:
- Eliminar silencios. Las pausas naturales al grabar suman fácilmente un 20–30% del video. Cortarlas a mano en DaVinci es tedioso, repetitivo y propenso a errores.
- Generar contenido derivado. Cada clase necesita una descripción para Udemy con enfoque SEO, un post para LinkedIn con tono profesional, un caption para Instagram con su bloque de hashtags y una descripción de YouTube con timestamps. Escribir todo eso desde cero, después de horas editando, era el momento en que más procrastinaba.
Necesitaba un sistema que, a partir del video crudo de OBS, me devolviera sin intervención manual:
- Un FCPXML para importar a DaVinci con los silencios ya marcados.
- Una transcripción precisa con timestamps palabra por palabra.
- Los cuatro textos para redes y plataformas, listos para revisar y publicar.
¿Por qué 100% local?
Cuando empecé a investigar, las soluciones obvias eran APIs en la nube: Whisper de OpenAI para transcribir, modelos comerciales para redactar. Funcionan muy bien, pero tienen tres problemas que no me cerraban:
- Costo recurrente. Una clase de 40 minutos transcrita y procesada en la nube cuesta varios dólares. Multiplica por 30 clases por curso y por varios cursos al año.
- Privacidad. Hay material que prefiero no subir a servidores ajenos antes de tenerlo editado y aprobado.
- Dependencia de red. Si Internet se cae a mitad de un batch, se interrumpe todo el flujo.
Mi laptop tiene una NVIDIA RTX 3070 con 8 GB de VRAM y 32 GB de RAM. Suficiente para correr modelos modernos sin pagar ni un centavo por inferencia, y sin que ningún archivo salga de mi disco.
El stack (todo gratis, todo local)
| Componente | Tecnología |
|---|---|
| GUI de escritorio | Python + CustomTkinter |
| Transcripción | faster-whisper (modelo large-v3) |
| Detección de silencios | Script propio en Python sobre pydub |
| Generación de texto | Ollama con qwen3.5:9b (Qwen 3, 9 mil millones de parámetros, excelente en español) |
| Extracción de audio | FFmpeg |
| Persistencia | SQLite |
Todo conectado en una interfaz simple en la que organizo el trabajo como cursos, y dentro de cada curso, módulos. Cada módulo apunta a una carpeta de videos.
Cómo funciona el pipeline
El sistema corre en dos etapas, pensadas para encajar en mi flujo real de edición.
Etapa 1 — Eliminar silencios (antes de editar)
- Apunto al video crudo recién salido de OBS.
- FFmpeg extrae el audio en formato compatible con DaVinci (WAV 48 kHz, 24 bits, estéreo).
- Mi script detecta los segmentos con voz y descarta los silencios largos según un umbral configurable.
- Se genera un FCPXML que abro en DaVinci: la timeline aparece ya con los cortes hechos.
Resultado: en lugar de cortar manualmente, abro un archivo y arranco a editar el contenido del video, no las pausas.
Etapa 2 — Generar contenido (después de editar)
- Tomo el video editado final.
- FFmpeg extrae el audio en formato optimizado para Whisper (16 kHz, mono).
faster-whisperlo transcribe en GPU. Salen tres archivos: texto plano, subtítulos SRT y un JSON con timestamps palabra por palabra.- La transcripción se le pasa a Ollama con cuatro prompts especializados, uno por canal:
- Udemy: título con SEO y descripción con bullets de aprendizajes.
- LinkedIn: post profesional con hook inicial, párrafos cortos y hashtags.
- Instagram: caption breve con su bloque de 15-25 hashtags.
- YouTube: título y descripción larga con capítulos basados en timestamps reales del video.
Los cuatro textos quedan en una subcarpeta junto al video, listos para revisar y publicar.
Una historia real: el bug de la VRAM
Voy a ser honesto: la primera vez que mandé un batch de nueve videos seguidos, el primero salió perfecto. El segundo falló con este mensaje:
VRAM insuficiente para cargar Whisper.
Libre: 720 MB
Requerido: 5000 MB
¿Qué estaba pasando? Mi GPU tiene 8 GB. Whisper large-v3 ocupa unos 5 GB. El modelo de Ollama ocupa otros 6.6 GB. No caben juntos. El diseño contempla esto: Whisper corre en un subproceso aislado que se cierra al terminar y libera la VRAM completa. Pero Ollama es un servicio persistente: por defecto mantiene el modelo cargado durante cinco minutos después de cada pedido, esperando otro request.
Cuando el pipeline pasaba al video 2, Ollama todavía estaba acaparando la VRAM y Whisper no tenía dónde cargarse.
La solución fue una llamada extra al final de cada video: pedirle a Ollama que descargara el modelo de manera explícita con el parámetro keep_alive=0. Quince líneas de código bien puestas y el batch volvió a correr limpio para cualquier cantidad de videos seguidos.
Lo cuento porque es exactamente el tipo de detalle que solo aparece cuando uno usa la herramienta en serio. Construir un MVP es fácil. Hacer que aguante un fin de semana real de producción, sin caerse, requiere iterar sobre los casos que la primera versión del diseño no había contemplado.
Lo que gané
Antes, una clase de 40 minutos me consumía dos o tres horas entre edición y redacción de contenidos para redes. Ahora el reparto cambió radicalmente:
- Mientras me tomo un café, la Etapa 1 deja la timeline lista para abrir en DaVinci.
- Mientras almuerzo, la Etapa 2 deja los cuatro textos generados y guardados.
- Yo solo edito el contenido del video y reviso o ajusto los textos finales.
El tiempo ahorrado por curso completo se mide en días de trabajo. Y dado que todo corre local, el costo marginal de procesar un curso adicional es exactamente cero.
Próximos pasos
Las siguientes mejoras que tengo en el roadmap son:
- Watchers que detecten archivos nuevos en las carpetas y disparen el pipeline en automático.
- Modo batch multi-módulo: marcar varios módulos con un checkbox y procesar el curso entero de un tirón.
- Ajuste fino de los prompts con ejemplos reales de mis clases, para que el tono se vaya pareciendo cada vez más al mío.
Cierre
Construir herramientas a medida del propio flujo de trabajo es, probablemente, la inversión de tiempo con mejor retorno que existe para un creador de contenido. No hace falta SaaS, no hace falta nube, no hace falta pagar por tokens. Una laptop decente, los modelos open source que ya están dando vueltas y un par de fines de semana alcanzan para automatizar lo que hace dos años parecía imposible automatizar.
Si te dedicas a producir contenido educativo y reconoces este dolor, te invito a pensar qué parte de tu propio pipeline podrías delegarle a una máquina que ya tienes en casa.
Sigo construyendo y documentando este sistema dentro de mis cursos de Beat Data. Si te interesa el detalle técnico — cómo se invoca FFmpeg, cómo se mantiene una GUI no bloqueante, cómo se diseña una base SQLite para gestionar cursos y módulos — déjamelo en los comentarios y lo cubro en el próximo artículo.

Deja una respuesta