Communitygithub.com

Ahmed-OC/motion-video-skills

Genera voces en off con sincronización a nivel de palabra: TTS multilingüe gratuito mediante edge-tts (por defecto), Kokoro/Piper local o ElevenLabs, y convierte cualquier audio en marcas de tiempo de palabras con faster-whisper. Produce vo.mp3, un JSON de palabras/leyendas (páginas de subtítulos de 1 a 3 palabras con ventanas de tiempo por palabra) y un vo.js incrustable para pipelines de vídeo en canvas/web. Úsalo cuando el usuario necesite narración, voz en off, TTS, pista doblada, texto a voz en cualquier idioma o subtítulos sincronizados con palabras (estilo TikTok/Hormozi) para un vídeo o animación.

¿Qué es motion-video-skills?

Esta habilidad proporciona un generador de voces en off con sincronización precisa a nivel de palabra, ideal para crear subtítulos animados (estilo TikTok/Hormozi) o narrar vídeos con tiempos exactos. Soporta múltiples plataformas de TTS: edge-tts gratuito (multilingüe, sin clave API), Kokoro/Piper local (offline) o ElevenLabs (pago). También puede extraer marcas de tiempo de palabra de cualquier audio existente usando faster-whisper. La salida incluye tres archivos: vo.mp3 (audio), un JSON detallado con palabras y grupos de subtítulos (páginas de 1-3 palabras con tiempos de inicio/fin por palabra), y un archivo JavaScript (vo.js) incrustable en proyectos de canvas web. El flujo de trabajo recomendado es generar primero la voz en off y luego animar el vídeo ajustándose a sus tiempos reales, no al revés. Incluye tablas de voces para múltiples idiomas (francés, inglés, japonés, español, alemán, portugués, chino) y consejos prácticos sobre tasas de habla, solución de problemas comunes (como versiones antiguas de edge-tts) y mezcla de audio con música de fondo.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Ahmed-OC/motion-video-skills/tree/HEAD/skills/tts-voiceover

Preguntar en tu IA favorita

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

Documentación

Voz en off TTS — narración con sincronización a nivel de palabra

Los tiempos de palabra son lo que hace que los subtítulos resalten en la palabra correcta y que las escenas avancen al ritmo correcto. Genera SIEMPRE la voz en off PRIMERO y anima según sus tiempos reales — nunca al revés.

Inicio rápido (gratuito, sin clave API)

pip install edge-tts
python scripts/vo_gen.py --text "Pythagore. Dans un triangle rectangle…" --voice fr-FR-DeniseNeural --rate -4%

Salidas (prefijo vo por defecto):

  • vo.mp3 — el audio
  • vo_words.json — { words:[{text,fromMs,toMs}], captions:[{startMs,durationMs,text,tokens[]}] } donde los subtítulos son páginas agrupadas de ≤3 palabras (un espacio >700ms rompe la página) con ventanas por palabra
  • vo.js — window.VO_B64 (mp3 en base64) + window.VO_DATA (el JSON), listo para un pipeline de canvas/seek: <script src="vo.js"> luego decodeAudioData para reproducción y VO_DATA.captions para dibujar

Listar voces: python scripts/vo_gen.py --list-voices fr (también: en, ja, es, de, pt, zh, ar…).

Menú de voces (selección rápida)

IdiomaNarrador tranquiloEnérgico
frfr-FR-DeniseNeuralfr-FR-HenriNeural
enen-US-AriaNeuralen-US-GuyNeural
jaja-JP-NanamiNeuralja-JP-KeitaNeural
eses-ES-ElviraNeurales-ES-AlvaroNeural
dede-DE-KatjaNeuralde-DE-ConradNeural
ptpt-BR-FranciscaNeuralpt-BR-AntonioNeural
zhzh-CN-XiaoxiaoNeuralzh-CN-YunjianNeural

Sintaxis de velocidad: --rate -4% más lento / +10% más rápido. Las frases cortas dan límites de palabra más limpios; regenera por frase para corregir una línea mala sin rehacer toda la pista.

Problemas conocidos (aprendidos por experiencia)

  • edge-tts ≥ 7: los límites de palabra están DESACTIVADOS por defecto — boundary="WordBoundary" es obligatorio (vo_gen.py ya lo pasa). Síntoma del error: el audio está bien, words vacío.
  • HTTP 403 del servicio: tu edge-tts es demasiado antiguo para el esquema de token actual — pip install -U edge-tts (usa un venv si la instalación del sistema está bloqueada).
  • Los desplazamientos de palabra están en unidades de 100 nanosegundos en el flujo original; divide entre 10⁴ para obtener ms.

Alternativas y mejoras

  • Kokoro (pip install kokoro) — TTS neuronal local, 82M parámetros, varios idiomas.
  • Piper — completamente offline, rápido, descargas de voz por idioma.
  • ElevenLabs — de pago, multilingüe v2; la API with-timestamps devuelve tiempos a nivel de carácter que alimentan directamente los subtítulos.
  • VOICEVOX (japonés) — API HTTP local en localhost:50021, tiempos por fonema (ideal para animación de labios en JP).
  • Cualquier audio existente → tiempos de palabra mediante faster-whisper:
    pip install faster-whisper
    python - <<'EOF'
    from faster_whisper import WhisperModel; import json
    m = WhisperModel("small"); segs, _ = m.transcribe("track.mp3", word_timestamps=True)
    json.dump([w._asdict() for s in segs for w in s.words], open("words.json","w"))
    EOF
    

Mezcla en un vídeo (referencia rápida)

Voz, música y SFX como pistas SEPARADAS, luego: base musical −18…−22 LUFS bajo la voz, ducking con sidechaincompress de ffmpeg (voz como disparador), final loudnorm=I=-14:TP=-1.5:LRA=11. Estilo de subtítulo que funciona: mayúsculas en negrita, 1–3 palabras por aparición, palabra activa en color de acento con un aumento de escala ~20%, fondo negro tipo píldora o borde para contraste, y manteniéndose fuera de las zonas de la interfaz de la plataforma.

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

Skills relacionados