Uso de Vídeo
Principio
- El LLM razona a partir de la transcripción bruta + imágenes bajo demanda. El único artefacto derivado que vale la pena es una transcripción comprimida a nivel de frase (
takes_packed.md). Todo lo demás — etiquetado de muletillas, detección de repeticiones, clasificación de tomas, puntuación de énfasis — lo derivas en el momento de la decisión. → verificar: la salida del paso coincide con el resultado esperado - El audio es primario, las imágenes siguen. Los candidatos a corte provienen de los límites del habla y los silencios. Profundiza en las imágenes solo en los puntos de decisión. → verificar: la salida del paso coincide con el resultado esperado
- Preguntar → confirmar → ejecutar → iterar → persistir. No toques el corte hasta que el usuario haya confirmado la estrategia en lenguaje sencillo.
- Generaliza. No asumas qué tipo de vídeo es este. Mira el material, pregunta al usuario, luego edita. → verificar: el diff coincide con el cambio previsto
- La libertad artística es el valor por defecto. Cada valor específico, preajuste, fuente, color, duración, estructura de tono y técnica en este documento es un ejemplo práctico de un vídeo probado — no un mandato. Léelos para entender qué es posible y por qué funcionó cada uno. Luego toma tus propias decisiones estéticas basándote en lo que el material realmente es y lo que el usuario realmente quiere. Las únicas cosas que DEBES hacer están en la sección de Reglas Estrictas a continuación. Todo lo demás es tuyo. → verificar: el contenido del archivo coincide con la forma esperada
- Inventa libremente. Si el material requiere una técnica no descrita aquí — pantalla dividida, imagen sobre imagen, tarjetas de identidad en tercio inferior, cortes de reacción, cambios de velocidad, fotogramas congelados, encadenados, cortes en L, cortes en J, cambios de velocidad sobre la respiración, lo que sea — constrúyela. Los ayudantes son ffmpeg y PIL. Pueden hacer cualquier cosa que el formato soporte. No esperes permiso. → verificar: la salida del paso coincide con el resultado esperado
- Verifica tu propia salida antes de mostrársela al usuario. Si no lo enviarías, no lo presentes.
Reglas Estrictas (corrección de producción — no negociables)
Estas son las cosas donde la desviación produce fallos silenciosos o salida rota. No son gusto, son corrección. Memorízalas.
- Los subtítulos se aplican al FINAL de la cadena de filtros, después de cada superposición. De lo contrario, las superposiciones ocultan los subtítulos. Fallo silencioso. → verificar: la salida del paso coincide con el resultado esperado
- Extracción por segmento → concatenación con
-c copysin pérdidas, no un filtro de un solo paso. De lo contrario, se vuelve a codificar cada segmento dos veces cuando se añaden superposiciones. - Fundidos de audio de 30ms en cada límite de segmento (
afade=t=in:st=0:d=0.03,afade=t=out:st={dur-0.03}:d=0.03). De lo contrario, se escuchan pops audibles en cada corte. → verificar: la salida del paso coincide con el resultado esperado - Las superposiciones usan
setpts=PTS-STARTPTS+T/TBpara desplazar el fotograma 0 de la superposición al inicio de su ventana. De lo contrario, ves la mitad de la animación durante la ventana de superposición. → verificar: la salida del paso coincide con el resultado esperado - El SRT maestro usa desplazamientos de línea de tiempo de salida:
output_time = word.start - segment_start + segment_offset. De lo contrario, los subtítulos se desalinean después de la concatenación de segmentos. → verificar: la salida del paso coincide con el resultado esperado - Nunca cortes dentro de una palabra. Ajusta cada borde de corte a un límite de palabra de la transcripción de Scribe. → verificar: la salida del paso coincide con el resultado esperado
- Rellena cada borde de corte. Ventana de trabajo: 30–200ms. Las marcas de tiempo de Scribe se desvían 50–100ms — el relleno absorbe la desviación. Más ajustado para ritmo rápido, más holgado para cinematográfico. → verificar: la salida del paso coincide con el resultado esperado
- Solo ASR palabra por palabra. Nunca modo SRT/frase (pierde datos de espacios sub-segundo). Nunca muletillas normalizadas (pierde señal editorial). → verificar: el diff coincide con el cambio previsto
- Almacena en caché las transcripciones por fuente. Nunca vuelvas a transcribir a menos que el archivo fuente haya cambiado. → verificar: la salida del paso coincide con el resultado esperado
- Subagentes paralelos para múltiples animaciones. Nunca secuenciales. Lanza N a la vez mediante la herramienta
Agent; el tiempo total de pared ≈ el más lento. → verificar: la salida del paso coincide con el resultado esperado - Confirmación de estrategia antes de la ejecución. No toques el corte hasta que el usuario haya aprobado el plan en lenguaje sencillo. → verificar: la salida del paso coincide con el resultado esperado
- Todas las salidas de la sesión en
<videos_dir>/edit/. Nunca escribas dentro del directorio del proyectovideo-use/. → verificar: la salida existe y se analiza sin errores
Todo lo demás en este documento es un ejemplo práctico. Desvía cuando el material lo requiera.
Estructura de directorios
El skill vive en video-use/. El metraje del usuario vive donde ellos lo pongan. Todas las salidas de la sesión van a <videos_dir>/edit/.
<videos_dir>/
├── <archivos fuente, sin tocar>
└── edit/
├── project.md ← memoria; se añade en cada sesión
├── takes_packed.md ← transcripciones a nivel de frase, la vista de lectura principal del LLM
├── edl.json ← decisiones de corte
├── transcripts/<name>.json ← JSON crudo de Scribe en caché
├── animations/slot_<id>/ ← por animación: fuente + render + razonamiento
├── clips_graded/ ← extracciones por segmento con gradación + fundidos
├── master.srt ← subtítulos con línea de tiempo de salida
├── downloads/ ← salidas de yt-dlp
├── verify/ ← fotogramas de depuración / PNGs de línea de tiempo
├── preview.mp4
└── final.mp4
Configuración
ELEVENLABS_API_KEYen.enven la raíz del proyecto o en el entorno. Pregunta y escribe.envsi falta.ffmpeg+ffprobeen PATH.- Dependencias de Python:
pip install -e .. yt-dlp,manim, Remotion instalados solo en el primer uso.- Este skill incluye
skills/manim-video/. Lee su SKILL.md al construir un slot de Manim.
Ayudantes
transcribe.py <video>— llamada a Scribe para un solo archivo.--num-speakers Nopcional. En caché.transcribe_batch.py <videos_dir>— transcripción paralela con 4 trabajadores. Úsalo para múltiples tomas.pack_transcripts.py --edit-dir <dir>—transcripts/*.json→takes_packed.md(a nivel de frase, rompe en silencio ≥ 0.5s).timeline_view.py <video> <inicio> <fin>— tira de fotogramas + forma de onda PNG. Exploración visual bajo demanda. No es una herramienta de escaneo — úsala en puntos de decisión, no constantemente.render.py <edl.json> -o <salida>— extracción por segmento → concatenación → superposiciones (desplazadas con PTS) → subtítulos AL FINAL.--previewpara 720p rápido.--build-subtitlespara generar master.srt en línea.grade.py <entrada> -o <salida>— cadena de filtros ffmpeg para gradación. Preajustes +--filter '<raw>'para personalizado.
Para animaciones, crea <edit>/animations/slot_<id>/ con Bash y lanza un subagente mediante la herramienta Agent.
El proceso
-
Inventario.
ffprobea cada fuente.transcribe_batch.pyen el directorio.pack_transcripts.pypara producirtakes_packed.md. Muestra uno o dostimeline_views para una primera impresión visual. → verificar: la salida del paso coincide con el resultado esperado -
Pre-escaneo de problemas. Un repaso a
takes_packed.mdpara anotar deslices verbales, errores obvios o frases a evitar. Lista simple, alimenta el resumen del editor. → verificar: la salida del paso coincide con el resultado esperado -
Conversar. Describe lo que ves en lenguaje sencillo. Haz preguntas basadas en el material. Recopila: tipo de contenido, duración/aspecto objetivo, dirección estética/de marca, sensación de ritmo, momentos que deben conservarse, momentos que deben cortarse, preferencias de animación y gradación, necesidades de subtítulos. No uses una lista fija — las preguntas correctas son diferentes cada vez. → verificar: todas las pruebas pasan
-
Proponer estrategia. 4–8 frases: forma, elecciones de toma, dirección de corte, plan de animación, dirección de gradación, estilo de subtítulos, estimación de duración. Espera confirmación. → verificar: la salida del paso coincide con el resultado esperado
-
Ejecutar. Produce
edl.jsonmediante el resumen del subagente editor. Profundiza entimeline_viewen momentos ambiguos. Construye animaciones en subagentes paralelos. Aplica gradación por segmento. Compón medianterender.py. → verificar: código de salida del comando 0 -
Vista previa.
render.py --preview. → verificar: la salida del paso coincide con el resultado esperado -
Autoevaluación (antes de mostrar al usuario). Ejecuta
timeline_viewsobre la salida renderizada (no las fuentes) en cada límite de corte (ventana ±1.5s). Revisa cada imagen para: → verificar: código de salida del comando 0- Discontinuidad visual / destello / salto en el corte
- Pico en la forma de onda en el límite (pop de audio que escapó del fundido de 30ms)
- Subtítulo oculto detrás de una superposición (violación de la Regla 1)
- Superposición desalineada o que muestra fotogramas incorrectos (violación de la Regla 4)
También muestra: primeros 2s, últimos 2s y 2–3 puntos intermedios — verifica consistencia de gradación, legibilidad de subtítulos, coherencia general. Ejecuta
ffprobeen la salida para verificar que la duración coincide con la expectativa del EDL.Si algo falla: corrige → vuelve a renderizar → vuelve a evaluar. Límite de 3 pases de autoevaluación — si persisten problemas después de 3, señálalos al usuario en lugar de iterar eternamente. Presenta la vista previa solo cuando la autoevaluación sea exitosa.
-
Iterar + persistir. Retroalimentación en lenguaje natural, replanificar, volver a renderizar. Nunca vuelvas a transcribir. Render final tras confirmación. Añade a
project.md. → verificar: la salida del paso coincide con el resultado esperado
Arte de corte (técnicas)
- Audio primero. Cortes candidatos desde límites de palabra y silencios.
- Preserva los picos. Risas, remates, golpes de énfasis. Extiende más allá de los remates para incluir reacciones — la risa ES el golpe.
- Los cambios de hablante se benefician de aire entre enunciados. Valores comunes: 400–600ms. Menos para ritmo rápido, más para cinematográfico. Decisión estética.
- Eventos de audio como señales.
(risas),(suspiros),(aplausos)marcan golpes. Extiende más allá de ellos. - Los silencios son candidatos a corte. Silencios ≥400ms suelen ser los más limpios. Los límites de frase de 150–400ms son utilizables con una verificación visual. <150ms no es seguro (mitad de frase).
- Ejemplo de relleno de corte (el vídeo de lanzamiento incluía esto): 50ms antes de la primera palabra mantenida, 80ms después de la última. Más ajustado para energía de montaje, más holgado para documental. Mantente en la ventana de trabajo de 30–200ms (Regla Estricta 7).
- Nunca razones audio y vídeo de forma independiente. Cada corte debe funcionar en ambas pistas.
La transcripción comprimida (vista de lectura principal)
pack_transcripts.py lee todos los transcripts/*.json y produce un archivo markdown donde cada toma es una lista de líneas a nivel de frase, cada una con su rango de tiempo [inicio-fin]. Las frases se rompen en cualquier silencio ≥ 0.5s O cambio de hablante. Este es el artefacto que el subagente editor lee para elegir cortes — da precisión de límites de palabra solo con texto a 1/10 de los tokens del JSON crudo.
Ejemplo de línea:
## C0103 (duración: 43.0s, 8 frases)
[002.52-005.36] S0 El noventa por ciento de lo que hace un agente web se desperdicia por completo.
[006.08-006.74] S0 Esto lo arreglamos.
Resumen del subagente editor (para selección de múltiples tomas)
Cuando la tarea sea "elegir la mejor toma de cada golpe entre muchos clips", lanza un subagente dedicado con un resumen con esta forma. La estructura es importante; el ejemplo de forma de tono no lo es.
Estás editando un vídeo de <tipo>. Elige la mejor toma de cada golpe y
ensámblalas cronológicamente por golpe, no por orden de clip fuente.
ENTRADAS:
- takes_packed.md (transcripciones a nivel de frase con marcas de tiempo de todas las tomas)
- Contexto de producto/narrativa: <2 frases del usuario>
- Hablante(s): <nombre, rol, nota sobre estilo de entrega>
- Estructura esperada: <elige un arquetipo o inventa uno>
- Deslices verbales a evitar: <lista del pase de pre-escaneo>
- Duración objetivo: <segundos>
Arquetipos estructurales comunes (elige, adapta o inventa):
- Lanzamiento técnico / demo: GANCHO → PROBLEMA → SOLUCIÓN → BENEFICIO → EJEMPLO → CTA
- Tutorial: INTRO → CONFIGURACIÓN → PASOS → TRUCOS → RESUMEN
- Entrevista: (PREGUNTA → RESPUESTA → SEGUIMIENTO) repetir
- Viaje / evento: LLEGADA → DESTACADOS → MOMENTOS TRANQUILOS → DESPEDIDA
- Documental: TESIS → EVIDENCIA → CONTRAPUNTO → CONCLUSIÓN
- Música / actuación: INTRO → VERSO → ESTRIBILLO → PUENTE → OUTRO
- O inventa el tuyo propio.
REGLAS:
- Las horas de inicio/fin deben caer en límites de palabra de la transcripción.
- Rellena los bordes de corte (ventana de trabajo 30–200ms).
- Pref