Video Studio - Edición automática de videos
Esta skill produce videos terminados, no solo da instrucciones. Todo pasa por una puerta: scripts/autovideo.py.
El conocimiento profesional (ángulos de cámara, ritmo, sonido, subtítulos, CapCut, cine con IA, lecciones prácticas) está en references/
para tomar las decisiones correctas al crear el storyboard y al leer los informes de QC.
Ruta del script: directorio que contiene este archivo + /scripts/ (instalar según el README: ~/.claude/skills/video-studio/scripts).
0. Comandos slash para el usuario
/video:plan discutir ideas - guión - storyboard - iluminación · /video:make crear nuevo video · /video:revoice cambiar voz en off ·
/video:subs subtítulos · /video:reframe cambiar a formato vertical/cuadrado · /video:library banco de escenas · /video:qc verificar ·
/video:voices seleccionar voz según propósito · /video:fix corregir vibración/fps/temblor · /video:critic crítica independiente · /video:slop detectar y corregir "AI slop" · /video:capcut exportar a CapCut.
Si el usuario habla de forma natural (sin escribir comandos), se sigue la tabla siguiente.
0b. Herramientas MCP video-studio (prioritarias cuando están disponibles)
Cuando las herramientas mcp__video-studio__* están disponibles en la sesión, úselas directamente en lugar de ejecutar scripts con Bash:
- Rápidas:
video_probe,video_qc,contact_sheet,voices_suggest,voices_catalogue,pronunciation_preview,shot_search,motion_stills,slop_check,slop_compare. - Tareas largas (devuelven
job_id, se rastrean conjob_status/job_list):make_video,revoice_video,subtitle_video,convert_fps,reframe_video,stabilize_video,motion_graphic,critic_kit,voice_samples. Registro único:claude mcp add --scope user video-studio -e PYTHONIOENCODING=utf-8 -- python <repo>/scripts/mcp_server.py.
1. Seleccionar comando según la solicitud
| El usuario quiere | Hacer |
|---|---|
| Crear video nuevo a partir de idea/guion + banco de fuentes (video, imagen) | Escribir project.json según templates/project_make.json → autovideo.py make project.json --out NOMBRE_v1.mp4 |
| Cambiar voz en off / redoblar un video existente | autovideo.py revoice VIDEO.mp4 --script texto.txt [--voice auto --proposito noticias] --out NOMBRE_v1.mp4 [--subs] |
| Añadir subtítulos a un video | autovideo.py subs VIDEO.mp4 --script texto.txt --out NOMBRE_sub.mp4 (detecta marcas de tiempo automáticamente) |
| Verificar video antes de entregar | autovideo.py qc VIDEO.mp4 (+ contact_sheet.py para inspección visual) |
| Cambiar fps a cualquier valor 24/25/30/50/60/120, cámara lenta, corregir vibración de fotogramas | fps_convert.py convert ORIGEN DESTINO --fps 24 [--slowmo 4] (RIFE GPU) |
| Video horizontal → vertical/cuadrado con seguimiento de sujeto; paneo/zoom virtual; estabilización | camera.py reframe / move / stabilize |
| Seleccionar las mejores escenas de un lote de metraje, buscar por descripción | shot_select.py scan / best / search |
| Igualar color entre escenas, look cinematográfico | grade.py match / look / apply |
| Exportar para plataforma, detectar ritmo musical | deliver.py export <preset> / beats |
| Discutir ideas, storyboard, iluminación, ángulos de cámara antes de editar | /video:plan + references/11-cinematografia-avanzada.md |
| Mapas de ruta animados, tarjetas de capítulo, gráficos de datos (gráficos animados con código) | motion_html.py stills/render + templates/motion/*.html, o escena "fuente": {"html": ...} |
| Guión/video que suena "a IA": frases cliché, números sin fuente, afirmaciones sin fundamento, ritmo uniforme, efectos excesivos | /video:slop (slop_guard.py mide → agente propone correcciones → compare vuelve a medir) |
| Evaluar video antes de enviar (evaluador diferente al editor) | /video:critic (critic.py + agente nuevo, evaluar hasta que todos los ítems ≥ 8) |
| Seleccionar voz según propósito | voices.py suggest --proposito noticias --genero femenino, generar muestras de 2-3 voces sugeridas, enviar al usuario para escuchar |
| Llevar a CapCut para ajustes manuales | añadir --capcut NOMBRE_BORRADOR a make/revoice, o capcut_api.py build --spec |
| Cine IA/micro-drama | references/09-cine-ia-pipeline.md + storyboard.py jobs |
Todos los comandos automáticos: no sobrescriben archivos existentes, guardan archivos temporales en <salida>_work/, generan INFORME_QC.md (errores de imagen, vibración,
LUFS, % de discurso coincidente con el guión). Leer el informe antes de enviar e incluir las mediciones en la respuesta.
2. Crear project.json para make (el más importante)
- Cada
escenatiene una idea de discurso.fuentees uno de:{"archivo", "inicio", "fin"}(video),{"imagen", "efecto": zoom_in|zoom_out|pan_left|pan_right},{"color": "#0E2440"}. - La duración de la escena se calcula automáticamente = max(
duracion, duración del discurso + 0,9 s). Las escenas de video se colocan automáticamente dentro de un solo plano original; si la fuente no es lo suficientemente limpia, se retira la escena automáticamente, sin congelar. - La imagen debe corresponder exactamente al discurso (proyecto correcto, evento correcto) - seleccionar fuente usando
probe_qc.py --inventory+contact_sheet.pysobre las fuentes, no adivinar por nombre de archivo. transicion:cutdentro de la misma idea,dissolveal cambiar de idea/espacio. Escenas ≤ 7-8 s.- El discurso se escribe como se habla; números y unidades se mantienen (
119 km,100 km/h) -tts_vi.pylos normaliza automáticamente (guiones/rayas no se leen como "a"). texto_en_pantalla: breve, solo datos/nombres que aparecen en el discurso; no usar "—".- Avanzado:
fpsdel proyecto cualquiera (fuentes con diferente fps pasan automáticamente porfps_convert), escenas de video conslowmo,camera(push/pan virtual),estabilizar,encuadre_inteligente(seguimiento automático del sujeto al exportar vertical); proyecto concolor(igualación de color + look) ycortar_por_musica(cortar en los beats). - Voz no forzada:
"voz": "auto"(por defecto) selecciona según"proposito"(empresarial,noticias,documental,publicidad,redes_sociales,tutorial,solemne,infantil,evento) +"genero","region","tono"(grave/medio/agudo), basado en perfiles medidos de cada voz (voices.py profile: precisión de lectura, tono, velocidad). O especificar: nombre de voz VieNeu,{"edge": "vi-VN-HoaiMyNeural"},{"clonar": "muestra_voz.wav"}(el hablante debe dar su consentimiento), o grabación real"grabacion": "frase3.wav"para cada escena. Cada escena/personaje puede tener su propia voz. Siempre ofrecer 2-3 voces sugeridas (voices.py suggest) para que el usuario escuche antes de decidir. - Precisión: diccionario de pronunciación
templates/pronunciacion.json+"pronunciacion"específica del proyecto (abreviaturas, nombres propios); cada frase es verificada por Whisper, las frases con <"precision"(0,97) se releen automáticamente hasta"releer"veces, informando frase por frase; los subtítulos se alinean con cada palabra real. - Opciones de edición:
"estilo":solemne|cinematografico(letterbox 2.39, filmico) |documental|dinamico(corte por beat) |redes_sociales(encuadre con seguimiento de sujeto). Transición por escena:cut,dissolve,fade_black,dip_white,wipe_left/right,slide_left/right,zoom_in. Encuadre:"encuadre":fill(llenar) |fit_blur(mantener imagen completa, fondo borroso) |smart(seguimiento de sujeto)."letterbox": 2.39. Todas las opciones se pueden sobrescribir por escena. - Gráficos animados:
"fuente": {"html": "templates/motion/route_map.html", "params": {...}}(mapa de ruta que se dibuja gradualmente, tarjetas de capítulo...).makeexporta automáticamente una versión solo música_solo_musica.mp4. Brief de director +facts.mdantes de editar una película grande (references/12). - Antídoto contra AI slop:
"facts": "facts.md"(cada número + frase original + documento + fecha) y"reglas": ["~/.video_studio/reglas/<cliente>.json"](libro de reglas del cliente, fuera del repositorio).makeverifica automáticamente y escribe la sección "Antídoto contra AI slop" en el informe;"detener_si_slop": truepara detener si aún hay números inventados/violaciones de reglas. Si el cliente corrige una frase manualmente, copiar el texto literal al libro de reglas (slop_guard.py registrar) para que la siguiente película lo detecte automáticamente (references/13). - Selección automática de escenas:
"banco_escenas": "banco.json"(deshot_select.py scan --clip) y"fuente": {"buscar": "aerial view of a highway at sunset"}→ tomar la escena más coincidente, suficientemente larga, no usada, con alta puntuación de calidad. Escribir la descripción de búsqueda en inglés.
3. Reglas inmutables
- No borrar/sobrescribir la versión entregada. Nueva versión
_vN. Reemplazar la versión principal solo cuando el usuario la apruebe:mv -nla versión antigua a_guardado_<descripcion>,cp -nla nueva,cmppara confirmar. - Medir antes de hablar - usar los números de
INFORME_QC.md; si no se ha medido, decir que no se ha medido. - Contenido veraz: proyecto/entidad correctos, sin stock extranjero, códigos QR, publicidad, eslóganes extraños, personas no autorizadas.
- Traducción 100% fiel al significado y contexto; si una frase genera duda, preguntar.
- No introducir contraseñas/claves API en lugar del usuario.
- Descargar modelos solo de fuentes originales, priorizar
.safetensors, instalar venv propio. - Comunicación en español.
- No dar números inventados: todo número en pantalla/discurso debe estar en
factso declararse como[calculo: ...]. Las correcciones escritas por el agente solo se aceptan después de queslop_guard.py comparelas vuelva a medir (el escritor no se auto-verifica).
4. Cargar referencias cuando sea necesario
| Cuándo | Archivo |
|---|---|
| Proceso, versiones, informes para el cliente | references/01-proceso.md |
| Ángulos de cámara, planos, ritmo de corte, transiciones, imágenes fijas | references/02-lenguaje-visual.md |
| Vibración, congelamiento, fotogramas perdidos, cambio de fps | references/03-fotogramas-movimiento.md |
| Color, escala/recorte, logo, exportación | references/04-imagen-color-exportacion.md |
| Voz en off, TTS, música, LUFS | references/05-sonido-voz.md |
| Subtítulos, traducción, texto en pantalla | references/06-subtitulos-traduccion-texto.md |
| CapCut (MCP, VectCutAPI, web) | references/07-capcut.md |
| QC antes de entregar | references/08-qc-entrega.md |
| Cine IA / micro-drama | references/09-cine-ia-pipeline.md |
| Lecciones aprendidas | references/10-lecciones-practicas.md |
| Iluminación, lentes, apertura/obturador/ISO/ND según situación, prompt video IA, ángulos de cámara, color, sonido, edición | references/11-cinematografia-avanzada.md |
| Antídoto contra "AI slop": números con fuente, libro de reglas del cliente, revisor ciego, re-medir antes de aceptar | references/13-antídoto-ai-slop.md |
| Brief de director, reglas contra "movimiento tipo IA", gráficos con código, ciclo de crítica, proyectos grandes (GES, 3D, estado actual) | references/12-direccion-movimiento-y-critica.md |
5. Conjunto de scripts
| Script | Función |
|---|---|
autovideo.py | Puerta principal: make, revoice, subs, qc |
voices.py | Perfiles medidos de cada voz, sugerencia de voz según propósito, múltiples fuentes de voz (VieNeu, Edge, clonación, grabación) |
accuracy.py | Diccionario de pronunciación, verificación de cada frase, relectura automática de frases incorrectas |
motion_html.py | Gráficos animados con HTML + seek(t) (Playwright), motion blur sub-frame automático |
critic.py | Kit de evaluación independiente: contact/phone/strip, fotogramas perdidos, texto con tiempo suficiente, verificación de slop (junto con slop_guard) |
slop_guard.py | Antídoto determinista contra AI slop: números con fuente/deducidos, clichés, afirmaciones sin fundamento, ritmo, edición uniforme, libro de reglas del cliente; compare acepta/rechaza correcciones |
mcp_server.py | Servidor MCP: 21 herramientas (rápidas + cola de trabajos) para que Claude las llame directamente |
probe_qc.py | Inventario de fuentes / QC de video (fotogramas perdidos, parpadeos, fotogramas repetidos, congelados, vibración, cadencia, LUFS, bordes negros) |
contact_sheet.py | Hoja de contactos de 3 fotogramas/plano para inspección visual |
fps_convert.py | Conversor de fps 24-120, cámara lenta, motion blur 180°, detección de fotogramas interpolados (RIFE/flow) |
camera.py | Reencuadre inteligente (rostro humano + prominencia), paneo/zoom virtual, estabilización vidstab |
shot_select.py | Banco de escenas: segmentación de planos, puntuación, búsqueda por descripción (CLIP) |
grade.py | LUT de igualación de color, balance automático, look; aplicar LUT |
deliver.py | Presets de exportación por plataforma, detección de beats musicales |
cadence_fix.py | Corrección de cadencia por segmentos con optical flow (versión antigua, no requiere GPU) |
tts_vi.py | VieNeu-TTS en vietnamita (25 voces), normalización de texto, ejecución automática en venv propio |
speech_check.py | % de discurso coincidente con el guión (Whisper), estimación de dialecto |
voice_mix.py | Colocación de frases según marcas de tiempo, cadena de procesamiento de voz, ducking, LUFS, fusión de video |
subs.py | División de frases para subtítulos, SRT/ASS, burn-in |
demucs_split.py | Separación de voz/música |
capcut_api.py | Creación de borradores de CapCut desktop a través de VectCutAPI |
storyboard.py | Verificación de storyboard, shotlist, cola de trabajos de cine IA |
Entorno (instalar con install.ps1): ffmpeg en PATH; Python 3.12 (numpy, opencv, soundfile, librosa, Pillow, faster-whisper, torch, demucs);
VieNeu en ~/tools/venv_vieneu (cambiar con VIENEU_PY); RIFE en ~/tools/rife/ (RIFE_BIN); YuNet en ~/tools/models/ (YUNET_ONNX); VectCutAPI en ~/tools/VectCutAPI (puerto 9001).