Video de curso / capacitación a partir de diapositivas
Lee primero video-studio. Probado en un curso de marketing de 22 minutos creado desde un PDF (el resumen era "edición normal, sin gráficos en movimiento pesados", voz masculina Indian-English). Reconstruye con la estructura a continuación: edit/course.py, render.py, mix.py.
Flujo de trabajo
- Diapositivas → imágenes:
pdftoppm -r 200 -png raw/deck.pdf work/slides/p(o exporta PPTX/Keynote a PDF primero). Revisa cada página. Para las construcciones por partes, encuentra los cuadros de cada elemento (título, viñeta 1..n, gráfico, imagen) — visualmente desde la imagen o con proyecciones de filas/columnas PIL de píxeles no de fondo — y guárdalos por diapositiva. - Guion (
edit/course.py): por diapositiva: párrafosvo+reveals[{box:[x,y,w,h], cue:"palabra hablada"}] + opcionalzoombox. Escribe para enseñar, no para leer la diapositiva: engancha la lección (por qué importa), una idea por párrafo, ejemplos, resumen al final de cada módulo, ~140–150 palabras/min. Hinglish si el público lo desea. Muestra el guion y obtén aprobación antes de cualquier VO (cuesta créditos). - Verificación de presupuesto:
eleven.py credits; un curso de 22 min ≈ 18k caracteres — Starter tiene 40k/mes, por lo que una nueva voz completa en el mismo mes puede no caber. Informa al usuario el costo. Voz gratuita de prueba con macOSsaysolo para probar tiempos. - VO: por párrafo
eleven.py tts "<texto>" work/vo/<slide>_<n>.mp3 --voice 05QRrdNgiglhuYOaTQvw --speed 1.05 --words work/vo/<slide>_<n>.json(Prem, aprobada). Almacenada en caché por texto — editar un párrafo solo vuelve a pagar por ese. Corrige pronunciaciones reescribiendo en el texto. Concatena con 0.35 s entre párrafos y 0.8 s entre diapositivas; construye el JSON de la línea de tiempo (inicio/fin de diapositiva, tiempos de palabras clave). - Renderizado (
edit/render.py): cada diapositiva comienza limpia (solo título), y cada parte aparece/desliza al entrar en su palabra clave; cámara de movimiento lento y suave (1.00 → 1.04) y un zoom en la parte que se está discutiendo para diapositivas densas; transiciones push/deslizamiento entre diapositivas (0.4 s), etiqueta de capítulo en la parte superior izquierda, barra de progreso delgada, número de diapositiva. Nítido: renderiza las diapositivas desde los PNG de 200 ppp a 1920x1080, sin desenfoque. Baja prioridad, en fragmentos por módulo para que un renderizado interrumpido se reanude. - Mezcla (
edit/mix.py): cadena de voz (pasa altos 80, compresión ligera), música de fondo a −20 dB con compresión lateral (assets/music/*underscore*), efectos de sonido suaves en revelaciones (pop/swish -14 dB) y transiciones (whoosh -12 dB) — más ligeros que reels. Master −14 LUFS,--tp -2.0. - Vista previa → aprobar → completo: primer módulo a
--scale 0.5, obtener retroalimentación, luego todo.qc.py --platform youtube. - Empaquetar: capítulos de YouTube (uno por grupo de diapositivas/módulo), descripción con esquema de la lección, archivos por módulo si es una plataforma de cursos (
exports/vN_module_<n>_<slug>.mp4), miniatura (thumbnail-designer), SRT opcional (captions_ass.py --style cleano desde las palabras del VO).
Reglas
- Los visuales siguen al habla: nada aparece antes de ser mencionado; nada importante aparece sin ser mencionado.
- Mantén el diseño original del material (es la marca del cliente); añade solo la cámara, revelaciones, etiqueta de capítulo y barra de progreso.
- Números y afirmaciones solo del material/usuario. Escribe correctamente los nombres de marca en pantalla incluso si se reescriben para la voz.
- Si el usuario se va a dormir y renuncia a las aprobaciones, mantén las vistas previas y notas para que pueda revisarlas por la mañana.