PTENES
MÓDULO 2.3

📝 Guion y narración TTS

Aprende a escribir un SCRIPT punto M D con 6–9 escenas en un arco dramático, generar narración PT-BR local con Kokoro, expandir siglas para el TTS y medir duraciones con ffprobe, todo sin una clave de API.

6
Temas
~30
Minutos
Práctico
Nivel
Práctico
Tipo
Guion → Narración TTS SCRIPT.md · sN.txt · pf_dora · sN.wav SCRIPT punto M D 6–9 escenas assets/txt/ sN punto txt voz expandida Kokoro pf_dora PT-BR --speed 0.98 audio/ sN punto wav ~12s/escena ① GUION ② TEXTO ③ TTS ④ WAV 📏 ffprobe: medir duración -show_entries format=duration · noprint_wrappers=1:nokey=1
1

🎬 SCRIPT punto M D con 6–9 escenas

SCRIPT punto M D es el corazón de tu video. Describe cada escena en texto: qué aparece en pantalla y qué se dice. Un arco bien estructurado garantiza la máxima retención en videos cortos.

Concepto principal

El SCRIPT punto M D sigue un arco dramático de 8 etapas: hook → primer principio → mecánica → concepto clave → aplicación → avanzado → ejemplo real → cierre → CTA. Cada etapa es una escena. El arco existe para mantener la atención desde el inicio hasta el CTA de inema punto club.

Los videos de ~100 segundos de voz (≈ 1:50 de video) tienen mejor retención y caben como Shorts. Cada escena debe tener 1–3 frases, nunca un monólogo.

Arco de 8–9 escenas
1
Hook — la promesa

La primera frase capta la atención de inmediato. Una pregunta, una afirmación audaz o un dato sorprendente. Ej.: "¿Y si pudieras crear videos profesionales sin pagar nada?"

2
Primer principio — fundamento

Explica el concepto más básico. Sin jerga. Un párrafo que cualquiera pueda entender. Aquí nace la comprensión.

3
Mecánica: cómo funciona

Detalla el mecanismo interno: Chrome captura frames, FFmpeg codifica, Kokoro habla. Técnico pero directo.

4
Concepto clave — la idea central

La idea que cambia la forma de ver el problema. Normalmente, una frase memorable. Ej.: "El navegador es una cámara de cine."

5
Aplicación — en la práctica

Primer comando o paso concreto. El espectador ve cómo usarlo. Ej.: "Ejecuta npx hyperframes init y el proyecto ya estará configurado."

6
Avanzado — nivel superior

Recurso que distingue a un principiante de un usuario avanzado. Hooks, flags, voces alternativas, dos formatos. Genera curiosidad y valor.

7
Ejemplo real: prueba social

Este video se hizo con la propia herramienta. O un enlace, una captura de pantalla, un resultado concreto. Rompe el escepticismo.

8
Cierre — síntesis

Una frase que cierra el ciclo del hook. Refuerza la transformación que tendrá el espectador. Breve y contundente.

9
CTA — inema punto club

Invita a tomar el curso completo en inema punto club. Siempre en la última escena. Directo y con una acción clara: "Accede a inema punto club ahora."

Estructura del SCRIPT punto M D
# SCRIPT.md — ejemplo para un video sobre HyperFrames Skills
## Escena 1 — Gancho
**Pantalla:** título "Skills en Claude Code" fadeIn
**Voz:** "¿Qué son realmente las Skills en Claude Code?"

## Escena 2 — Primer principio
**Pantalla:** diagrama de carpeta + SKILL.md
**Voz:** "Una Skill es solo una carpeta con un archivo llamado SKILL punto M D."

## ... (escenas 3–8)

## Escena 9 — CTA
**Pantalla:** logo INEMA.CLUB + URL
**Voz:** "Curso completo en inema punto club."
✓ Buenas prácticas de guion
  • ✓ Cada escena tiene un único enfoque — no mezcles dos conceptos
  • ✓ Narración de 1–3 frases por escena (≤15 segundos)
  • ✓ Duración total del habla ≈ 100s para un video de ~1:50
  • ✓ Terminar siempre con una CTA explícita
✗ Errores de guion
  • ✗ Escenas demasiado largas — la atención cae después de 15s
  • ✗ Hook sin tensión — no promete una transformación
  • ✗ Pasar directamente de los fundamentos a avanzado
  • ✗ Olvidar la CTA: sin ella, el video no convierte
Conceptos clave
🎯
Arco dramático
8–9 etapas
⏱️
~100s de habla
≈ 1:50 de video
📌
1–3 frases/escena
Retención máxima
📣
CTA final
inema.club
2

✂️ Narración breve por escena

Cada escena recibe de 1 a 3 frases de narración. El total de ~100 segundos de voz produce aproximadamente 1 minuto y 50 segundos de video — ideal para la retención y compatible con Shorts.

Regla de los 100 segundos

Las personas retienen más información en videos cortos. Con ~100s de narración en total, cada escena dura ≈11–17 segundos: tiempo suficiente para asimilar una idea y lo bastante rápido para no aburrir.

8 escenas
×12,5s de promedio
~100s
de habla total
≈1:50
de video final
Ejemplo real: 8 escenas del narration-template punto sh
# assets/narration.sh — fragmento con write() por escena
write s1 "¿Qué son realmente las Skills en Claude Code?"
write s2 "Una Skill es solo una carpeta con un archivo llamado SKILL punto M D."
write s3 "Todo SKILL punto M D empieza con dos líneas: name y description."
write s4 "Divulgación progresiva: Claude carga solo lo que necesita, cuando lo necesita."
write s5 "Las Skills se encuentran en punto claude barra skills de tu proyecto o en la carpeta global."
write s6 "En el nivel avanzado, una Skill incluye scripts, paletas y plantillas completas."
write s7 "Este video se hizo con la Skill HyperFrames. Una skill, un flujo, un resultado."
write s8 "Empieza de forma sencilla. Curso completo en inema ponto club."
💡
Frase corta = habla natural

Kokoro TTS funciona mejor con frases simples y directas. Evita el uso excesivo del gerundio, las subordinadas largas o las listas habladas. Si necesitas una pausa, divide el texto en dos frases separadas por un punto final.

Comparación: distribución del tiempo por escena
Escena 1
~8s
Escenas 2–7
~72s
Escena 8
~6s
CTA final
~5s
Narración
CTA/Cierre
Conceptos clave
✂️
1–3 frases
por escena
📐
~12s/escena
promedio ideal
⏱️
100s en total
voz acumulada
📱
Cabe en Shorts
≤60s en pantalla
3

🗣️ Expandir siglas para la narración

Kokoro TTS lee el texto literalmente. Las siglas, las extensiones de archivo y las URL deben escribirse tal como se pronuncian; de lo contrario, el TTS las pronunciará de forma extraña o incomprensible.

Regla de expansión

El texto del archivo sN.txt está escrito para oídos, no para los ojos. Cualquier símbolo, sigla o ruta que no sea una palabra pronunciable debe sustituirse por su pronunciación exacta.

Tabla de expansiones obligatorias
Texto escrito Habla en el sN.txt Razón
SKILL.md SKILL punto M D extensión de archivo
.claude/skills punto claude barra skills ruta con símbolos
inema.club inema punto club URL / dominio
build-index.mjs build guion index punto M J S nombre de archivo
s1.txt S un punto T X T nombre de archivo
--speed 0.98 velocidad cero punto noventa y ocho flag de CLI con número
pf_dora P F underscore dora identificador de voz
npx hyperframes N P X hyperframes sigla + comando
Ejemplo: s2.txt, texto expandido para TTS
# assets/txt/s2.txt — versión para que la lea el TTS
"Empieza por lo esencial. Una Skill es solo una carpeta con un archivo llamado
SKILL punto M D. Dentro, instrucciones en Markdown que enseñan a Claude
para hacer algo específico: crear videos, revisar código, diseñar interfaces.
Es conocimiento empaquetado."

# NO escribas: "SKILL.md" → el TTS leería "esquil punto md" o lo pronunciaría mal
# NO escribas: ".claude/skills" → se leería "punto claude barra skills" de forma incorrecta
✓ Expansiones correctas
  • ✓ "ponto claude barra skills" para .claude/skills
  • ✓ "inema punto club" para inema.club
  • ✓ "SKILL punto M D" para SKILL.md
  • ✓ Prueba la pronunciación en voz alta antes de guardar
✗ Errores de expansión
  • ✗ Dejar SKILL.md sin expandir
  • ✗ Usar URL literal https://inema.club
  • ✗ Escribir comandos bash como npx --help
  • ✗ Incluir listas con guiones: el TTS lee el guion en voz alta
💡
Consejo: dos archivos, dos propósitos

Mantén el SCRIPT punto M D con el texto "visual" (con siglas, paths y URLs normales) como referencia humana. El archivo sN.txt es la versión "para los oídos": texto ya expandido que va al TTS. Son documentos diferentes con propósitos diferentes.

Conceptos clave
👁️
Texto visual
SCRIPT.md
👂
Texto hablado
sN.txt
🔤
Expansión
punto, barra, guion
🎤
Prueba oral
Lee en voz alta
4

🔊 Generar WAV con Kokoro

Con los archivos sN.txt listos y expandidos, el comando npx hyperframes tts genera los WAV localmente. La primera ejecución descarga ~340 MB del modelo Kokoro automáticamente.

Comando exacto — npx hyperframes tts
# Genera la narración para la escena 1
npx hyperframes tts "assets/txt/s1.txt" \
--voice pf_dora \
--speed 0.98 \
--output assets/audio/s1.wav

# Bucle para todas las escenas (narration.sh)
for i in 1 2 3 4 5 6 7 8; do
npx hyperframes tts "assets/txt/s$i.txt" \
--voice pf_dora --speed 0.98 \
--output "assets/audio/s$i.wav"
done
⚠️
Primera ejecución: descarga de ~340 MB

La primera vez que lo ejecutas npx hyperframes tts, Kokoro descarga el modelo de voz (~340 MB) automáticamente. Sin clave, sin espeak-ng, sin configuración. Después de la descarga, las siguientes ejecuciones son instantáneas. Asegúrate de tener conexión la primera vez.

¿Por qué --speed 0.98?

La velocidad predeterminada de Kokoro suena un poco demasiado rápida para narraciones técnicas en portugués. Con --speed 0.98 la voz suena natural, sin parecer lenta. No subas de 1.05 — la voz queda metálica.

0.80
Muy lento
0.98 ✓
Ideal PT-BR
1.05+
Metálico
💡
Genera un WAV de prueba antes del ciclo completo

Ejecuta primero solo la escena 1. Escucha el resultado. Si la pronunciación de alguna expansión quedó extraña, corrige el s1.txt antes de generar los otros 7 archivos. Corregir cada escena por separado es mucho más rápido que rehacerlo todo.

Conceptos clave
🔊
npx hyperframes tts
comando generador
🎙️
pf_dora
voz predeterminada PT-BR
⚡
--speed 0.98
natural y fluido
📦
~340 MB
una sola descarga
5

📏 Medir duraciones con ffprobe

Antes de montar las escenas en el build-index.mjs, necesitas saber exactamente cuántos segundos dura cada narración. El ffprobe devuelve la duración del WAV en segundos en una línea.

¿Por qué medir antes de armar?

O build-index.mjs define cuánto tiempo permanece cada escena en pantalla mediante LEAD, TAIL y la duración del audio. Si no sabes la duración exacta del WAV, el texto desaparecerá de la pantalla antes de que termine la voz, o quedará estático demasiado tiempo.

Comandos ffprobe: duración de un WAV y loop completo
# Duración de un archivo único
ffprobe -v error \
-show_entries format=duration \
-of default=noprint_wrappers=1:nokey=1 \
assets/audio/s1.wav
# Salida: 12.384000

# Bucle — medir todas las escenas de una vez
for i in 1 2 3 4 5 6 7 8; do
d=$(ffprobe -v error -show_entries format=duration \
-of default=noprint_wrappers=1:nokey=1 \
"assets/audio/s$i.wav" 2>/dev/null)
echo "s$i: ${d}s"
done
📊 Valores de referencia (narration-template real)
s1
~8–10s
hook corto
s2–s6
~12–18s
desarrollo
s7
~8–12s
ejemplo real
s8
~5–8s
CTA rápida
✓ Workflow correcto
  • ✓ Genera primero todos los WAV y luego mide
  • ✓ Anota las duraciones en SCRIPT punto M D
  • ✓ Usa las duraciones en el build-index para definir el timing
  • ✓ LEAD=0.5 antes del habla + TAIL=0.9 después del habla
✗ Errores de sincronización
  • ✗ Usar duración estimada: siempre mide el WAV real
  • ✗ Cortar la escena antes de que termine el audio
  • ✗ No dejes el LEAD antes de que empiece la narración
  • ✗ Olvidar el FADE=0.45 al final de la escena
💡
Valores de timing estándar del pipeline

O build-index.mjs usa de forma predeterminada: LEAD=0.5 (silencio antes de la voz), TAIL=0.9 (silencio después de la voz) y FADE=0.45 (fundido de salida). La duración total de la escena = LEAD + duración_del_wav + TAIL.

Conceptos clave
📏
ffprobe
mide WAV
⏩
LEAD=0.5
antes de la voz
⏸️
TAIL=0.9
después de la voz
🌅
FADE=0.45
fundido de salida final
6

🎚️ Voces PT-BR disponibles

Kokoro tiene tres voces PT-BR listas para usar: pf_dora (femenina, opción predeterminada recomendada), pm_alex e pm_santa. Cada voz tiene un timbre distinto: elige según el tono del video.

🎙️
pf_dora
PT-BR · Femenina

Voz femenina clara y natural en portugués de Brasil. Es la voz predeterminada de narration-template.sh y la recomendada para todos los videos del pipeline HyperFrames.

--voice pf_dora --speed 0.98
🎤
pm_alex
PT-BR · Masculina

Voz masculina grave, buena para contenido más serio o técnico. Una alternativa para variar en series largas o cuando el tono requiere más autoridad.

--voice pm_alex --speed 0.98
🔈
pm_santa
PT-BR · Alternativa

Tercera opción PT-BR con un timbre diferente. Úsala para probar si el contenido específico suena más natural con esta voz o para hacer una prueba A/B de retención.

--voice pm_santa --speed 0.98
✓ Buenas prácticas de voz
  • ✓ Usa pf_dora como estándar: es la más probada
  • ✓ Mantén la misma voz en todo el video
  • ✓ Prueba primero la voz con la escena de mayor complejidad
  • ✓ Velocidad 0.95–1.00 para narración técnica
✗ Errores con las voces
  • ✗ Mezclar voces dentro del mismo video
  • ✗ Speed por encima de 1.05 — suena robótico
  • ✗ Speed por debajo de 0.85 — arrastra demasiado
  • ✗ Intentar instalar espeak-ng — Kokoro no lo necesita
📊 Comparación técnica de las voces
Voz Género Timbre Mejor para
pf_dora Femenina Claro, natural Cursos, tutoriales, estándar
pm_alex Femenina Grave, autoritativo Tech serio, demos
pm_santa Femenina Diferenciado prueba A/B, variedad
💡
Sin espeak-ng, sin clave, sin cuenta

Kokoro tiene un fonemizador PT-BR nativo: no necesita espeak-ng, que otros motores TTS de código abierto requieren. No necesitas ninguna clave de API ni cuenta en una plataforma. Instalar espeak-ng incluso puede entrar en conflicto con la fonética de Kokoro, así que evítalo.

Conceptos clave
🏆
pf_dora
estándar recomendado
3️⃣
3 voces PT-BR
dora, alex, santa
🚫
Sin espeak-ng
fonética nativa
🔑
Sin clave
local y gratuito

📋 Resumen del Módulo 2.3

Qué aprendiste
  • ✓ SCRIPT punto M D con arco de 8–9 escenas: hook → principio → mecánica → insight → aplicación → avanzado → ejemplo → cierre → CTA
  • ✓ Narración de 1–3 frases por escena; ~100s de voz en total ≈ 1:50 de video
  • ✓ Expansión de siglas: "SKILL.md" → "SKILL punto M D"; ".claude/skills" → "punto claude barra skills"; "inema.club" → "inema punto club"
  • ✓ Generar WAV: npx hyperframes tts "assets/txt/s1.txt" --voice pf_dora --speed 0.98 --output assets/audio/s1.wav
  • ✓ Medir la duración: ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 assets/audio/s1.wav
  • ✓ Voces PT-BR: pf_dora (predeterminado), pm_alex, pm_santa — sin espeak-ng, sin clave, ~340 MB de descarga única
Próximo módulo
2.4
🎞️ Composición de escenas
Monta las escenas en el build-index.mjs usando las duraciones de los WAV. Define LEAD, TAIL, FADE y los tiempos de cada animación para generar el index.html final listo para renderizar.
Ir al módulo 2.4 →