Communitygithub.com

huzaifa-hb/video-edit

Edita grabaciones reales mediante conversación, completamente local. Transcripción con whisper.cpp, selección de tomas, edición JSON, validación, renderizado con ffmpeg, subtítulos y superposiciones Hyperframes animadas, y reencuadre a formatos de redes sociales.

¿Qué es video-edit?

Esta habilidad permite editar videos reales (grabaciones de entrevistas, testimonios, videollamadas, tutoriales) mediante una conversación directa con el agente de IA, sin depender de servicios en la nube. El proceso comienza transcribiendo el audio localmente con whisper.cpp, preservando palabras de relleno como "um" y "eh" para un control editorial preciso. A partir de la transcripción, el agente genera una lista de edición en JSON, que es validada y corregida automáticamente antes de cada renderizado con ffmpeg. Soporta la adición de subtítulos animados (Hyperframes), superposiciones, reencuadre a formatos 9:16, 1:1 y 16:9, y una autoverificación del resultado final. La habilidad está diseñada para flujos de trabajo donde se necesita recortar, ajustar, subtitular, reencuadrar o crear variantes publicitarias de una grabación, manteniendo todo el proceso local y sin necesidad de claves API externas. Está optimizada para agentes como Claude Code, Cursor o Codex, y su enfoque principal es la edición audiovisual con énfasis en la corrección técnica y la libertad creativa del usuario.

Compatible con✓Claude Code~Codex CLI~Cursor
npx skills add huzaifa-hb/video-edit

Preguntar en tu IA favorita

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

Documentación

Edición de Video

Bifurcación de browser-use/video-use (MIT): whisper.cpp local en lugar de ElevenLabs, una puerta de validación antes de cada renderizado, subtítulos Hyperframes en lugar de libass, y reencuadre de lienzo para variantes publicitarias en redes sociales.

Principio

  1. El LLM razona a partir de la transcripción sin procesar + imágenes bajo demanda. El único artefacto derivado que vale la pena es una transcripción compacta a nivel de frase (takes_packed.md). Todo lo demás — etiquetado de muletillas, detección de retomas, clasificación de tomas, puntuación de énfasis — lo derivas en el momento de la decisión.
  2. El audio es lo primero, 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.
  3. Preguntar → confirmar → ejecutar → iterar → persistir. Nunca toques el corte hasta que el usuario haya confirmado la estrategia en lenguaje sencillo.
  4. Generalizar. No asumas qué tipo de video es este. Observa el material, pregunta al usuario, luego edita.
  5. La libertad artística es el valor predeterminado. 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 video probado, no un mandato. Léelos para entender qué es posible y por qué funcionó cada uno. Luego toma tus propias decisiones de gusto basadas 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 Reglas Estrictas a continuación. Todo lo demás es tuyo.
  6. Inventa libremente. Si el material requiere una técnica no descrita aquí — pantalla dividida, imagen en imagen, tarjetas de identidad en tercio inferior, cortes de reacción, rampas de velocidad, congelación de fotogramas, encadenados, cortes en L, cortes en J, rampas de velocidad sobre la respiración, lo que sea — constrúyelo. Los ayudantes son ffmpeg y PIL. Pueden hacer cualquier cosa que el formato admita. No esperes permiso.
  7. Verifica tu propia salida antes de mostrarla al usuario. Si no lo publicarías, no lo presentes.

Reglas Estrictas (corrección de producción — no negociable)

Estas son las cosas donde la desviación produce fallos silenciosos o salida defectuosa. No son gusto, son corrección. Memorízalas.

  1. Los subtítulos se aplican ÚLTIMOS en la cadena de filtros, después de cada superposición. De lo contrario, las superposiciones ocultan los subtítulos. Falla silenciosa.
  2. Extraer por segmento → concat -c copy sin pérdida, no un solo filtro. De lo contrario, codificas dos veces cada segmento cuando se añaden superposiciones.
  3. Fundidos de audio de 30 ms 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 producen chasquidos audibles en cada corte.
  4. Las superposiciones usan setpts=PTS-STARTPTS+T/TB para 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.
  5. Los subtítulos usan desplazamientos de línea de tiempo de salida: output_time = word.start - segment_start + segment_offset, donde cada segmento dura su longitud de fotograma completo (captions.py hace esto). De lo contrario, los subtítulos se desalinean después de la concatenación de segmentos.
  6. Nunca cortes dentro de una palabra. Ajusta cada borde de corte a un límite de palabra de la transcripción. validate_edl.py --fix hace esto mecánicamente.
  7. Rellena cada borde de corte. Ventana de trabajo: 30–200 ms. Los bordes de las palabras ya están ajustados a la envolvente de audio, pero el relleno absorbe lo que queda. Más ajustado para ritmo rápido, más holgado para cinematográfico.
  8. Solo ASR palabra por palabra textual. Nunca modo SRT/frase (pierde datos de brechas de subsegundo). Nunca muletillas normalizadas (pierde señal editorial). transcribe.py le pide a whisper que mantenga "um"/"eh" — no elimines la indicación.
  9. Almacena en caché las transcripciones por fuente. Nunca vuelvas a transcribir a menos que el archivo fuente en sí haya cambiado.
  10. Subagentes paralelos para múltiples animaciones. Nunca secuencialmente. Genera N a la vez a través de la herramienta Agent; el tiempo total de ejecución ≈ el más lento.
  11. Confirmación de la estrategia antes de la ejecución. Nunca toques el corte hasta que el usuario haya aprobado el plan en lenguaje sencillo.
  12. Todas las salidas de la sesión en <videos_dir>/edit/. Nunca escribas dentro del directorio de la habilidad.
  13. Valida antes de cada renderizado. validate_edl.py <edl> --fix, luego renderiza solo con código de salida 0. Detecta identificadores de fuente inventados, tiempos más allá del final de un archivo, cortes en medio de palabra, archivos de superposición faltantes y superposiciones que exceden el corte — los modos de fallo que realmente tienen las listas de edición escritas por LLM.
  14. Los subtítulos son una capa de Hyperframes, no subtítulos quemados. El ffmpeg de Homebrew no tiene libass, por lo que subtitles en el EDL falla. Usa captions.py; render.py compone el WebM de subtítulos sobre cada superposición.
  15. Los identificadores de fuente son los nombres base de archivo. En sources, la clave debe ser el nombre del archivo de video sin extensión (take_B para take_B.mp4), o <stem>.track<N> cuando se transcribe con --audio-track N — así es como se encuentran las transcripciones. El validador da error en una discrepancia cuando los subtítulos están activados.
  16. Una velocidad de fotogramas por renderizado. Si pasas --fps a render.py, pasa el mismo --fps a validate_edl.py y captions.py. Los rangos se redondean a fotogramas completos para que los subtítulos nunca se desvíen.

Todo lo demás en este documento es un ejemplo práctico. Desvía cuando el material lo requiera.

Diseño de directorios

La habilidad reside en su propio directorio (ayudantes + plantillas junto a este archivo). El metraje del usuario está donde sea que lo haya puesto. Todas las salidas de la sesión van a <videos_dir>/edit/.

<videos_dir>/
├── <archivos fuente, sin modificar>
└── 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 (edl_9x16.json, edl_1x1.json … para variantes)
    ├── transcripts/<name>.json    ← transcripciones whisper.cpp en caché (nivel de palabra + silencios)
    ├── captions_<edl stem>/       ← composición de subtítulos Hyperframes + captions.webm
    ├── animations/slot_<id>/      ← fuente de animación + renderizado + razonamiento
    ├── clips_graded/              ← extractos por segmento con gradación + fundidos
    ├── downloads/                 ← salidas de yt-dlp
    ├── verify/                    ← fotogramas de depuración / PNG de línea de tiempo
    ├── preview.mp4
    └── final.mp4

Configuración

install.sh / setup.sh instala todo (paquetes Homebrew, .venv, modelo whisper, Hyperframes + Chrome). En inicio en frío solo verifica — y si falta .venv o un ayudante falla en una importación o una herramienta faltante, ejecuta <this skill dir>/setup.sh (es idempotente) antes de cualquier otra cosa:

  • PY=<this skill dir>/.venv/bin/python existe. Ejecuta cada ayudante con $PY, nunca el python del sistema (carece de numpy/Pillow/OpenCV).
  • ffmpeg, ffprobe, whisper-cli en PATH, y un modelo whisper ggml. Valor predeterminado: ~/.claude-video-vision/models/ggml-large-v3-turbo.bin; sobrescribe con VIDEO_EDIT_WHISPER_MODEL.
  • Node.js 22+ para Hyperframes. Siempre llama a la versión fijada: npx --yes [email protected] ….
  • yt-dlp y Manim solo en el primer uso. Esta habilidad incluye skills/manim-video/; lee su SKILL.md al construir una ranura Manim.
  • Sin claves API. Nada sale de la máquina excepto la descarga única de Hyperframes por npm.

Los ayudantes viven en helpers/ junto a este SKILL.md. Resuelve sus rutas relativas al directorio que contiene este archivo.

Ayudantes

Todos toman $PY helpers/<name>.py ….

  • transcribe.py <video> — whisper.cpp local, nivel de palabra, muletillas conservadas, bordes de palabra ajustados a la envolvente de audio, silencios listados. Almacenado en caché por fuente (se vuelve a ejecutar solo si el archivo cambió). --language en omite la detección; --audio-track N para grabaciones multipista.
  • transcribe_batch.py <videos_dir> — cada video en una carpeta, uno a la vez (whisper ya satura la GPU).
  • pack_transcripts.py --edit-dir <dir> — transcripts/*.json → takes_packed.md (nivel de frase, ruptura en silencio ≥ 0.5s; reduce --silence-threshold a 0.3 para hablantes rápidos).
  • timeline_view.py <video> <start> <end> — tira de fotogramas + PNG de forma de onda. Profundización visual bajo demanda. No es una herramienta de escaneo — úsala en puntos de decisión, no constantemente.
  • validate_edl.py <edl.json> [--fix] — la puerta antes de cada renderizado (Regla Estricta 13). --fix ajusta bordes a espacios de palabras, los rellena (--pad-in, --pad-out), redondea rangos a fotogramas completos, recalcula total_duration_s, conserva edl.json.bak. Las advertencias sobre bordes con < 30 ms de silencio sobreviven --fix: esos cortes se encuentran donde las palabras se tocan — muévelos a una pausa real.
  • captions.py <edl.json> — subtítulos de palabras en la línea de tiempo de salida como una composición Hyperframes → captions.webm transparente, establece la clave captions del EDL. Banderas de estilo: --accent, --color, --top, --size, --font, --case, --words, --no-pop.
  • render.py <edl.json> -o <out> — extracción por segmento (exactitud de fotograma, HDR→SDR, reencuadre de lienzo, gradación, fundidos) → concat sin pérdida → superposiciones (desplazadas por PTS) → subtítulos → loudnorm. --preview para control de calidad, --draft solo para verificar cortes.
  • reframe.py <edl.json> [--apply] — detección de rostros OpenCV (YuNet) en cada rango → crop_x/crop_y que mantienen al hablante centrado con espacio superior en el canvas del EDL. Ejecútalo después de validate_edl.py --fix cada vez que un canvas cambie la relación de aspecto. Marca rangos donde el rostro se MUEVE demasiado para un solo recorte estático (divídelos) y rangos con sin rostro (elige el recorte tú mismo). "crop_lock": true en un rango protege un recorte manual.
  • scenes.py <video> — detección de cambios de escena OpenCV más banderas DARK / BLURRY por escena → edit/shots/<stem>.json. Úsalo para metraje que la transcripción no puede estructurar: material de archivo, tomas de producto, montajes, exportaciones multicámara, clips silenciosos. Los límites de escena son puntos de corte visual limpios; las tomas marcadas rara vez son utilizables en un anuncio.
  • grade.py <in> -o <out> — cadena de filtros ffmpeg de gradación. Preajustes + --filter '<raw>' para personalizado.

Para animaciones, crea <edit>/animations/slot_<id>/ con Bash y genera un subagente a través de la herramienta Agent.

El proceso

  1. Inventario. ffprobe cada fuente. transcribe_batch.py en el directorio. Para fuentes con poco o ningún habla (material de archivo, tomas de producto), ejecuta scenes.py en su lugar para obtener sus tomas. Lee las líneas QC: que imprime (también bajo qc en cada transcripción): las palabras comprimidas a ≤20 ms o que comienzan dentro de un silencio tienen tiempos poco fiables — verifica cualquier corte cerca de ellas con timeline_view antes de usarlo.

    • Múltiples hablantes (llamadas, entrevistas): no hay etiquetas de hablante. Infiere turnos a partir del contenido (preguntas vs respuestas), luego confirma cada frase que planeas conservar con timeline_view (en videollamadas, el mosaico del hablante activo muestra quién habla). Si la llamada se grabó con una persona por pista de audio, transcribe cada pista con --audio-track N en su lugar. pack_transcripts.py para producir takes_packed.md. Muestrea uno o dos timeline_view para una primera impresión visual.
  2. Preescaneo de problemas. Un pase sobre takes_packed.md para notar deslices verbales, errores obvios o frases a evitar. Lista simple, alimenta el resumen del editor.

  3. Conversar. Describe lo que ves en lenguaje sencillo. Haz preguntas moldeadas por el material. Recopila: tipo de contenido, longitud/relación de 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 de verificación fija: las preguntas correctas son diferentes cada vez.

  4. Proponer estrategia. 4–8 oraciones: forma, elección de tomas, dirección de corte, plan de animación, dirección de gradación, estilo de subtítulos, estimación de longitud. Espera confirmación.

  5. Ejecutar. Produce edl.json a través del resumen del subagente editor. Profundiza en timeline_view en momentos ambiguos. Construye animaciones en subagentes paralelos. Ejecuta validate_edl.py --fix hasta que salga con 0. Luego captions.py si se pidieron subtítulos (los subtítulos se construyen a partir de los rangos finales, así que vuelve a ejecutarlo después de cualquier cambio de rango).

  6. Vista previa. validate_edl.py (sin --fix) → render.py --preview.

  7. Autoevaluación (antes de mostrar al usuario). Ejecuta timeline_view en el renderizado de salida (no las fuentes) en cada límite de corte (ventana de ±1.5 s). Verifica cada imagen para:

    • Discontinuidad visual / destello / salto en el corte
    • Pico de forma de onda en el límite (chasquido de audio que pasó el fundido de 30 ms)
    • Subtítulo oculto detrás de una superposición (violación de la Regla 1)
    • Superposición desalineada o mostrando fotogramas incorrectos (violación de la Regla 4)

    También muestrea: primeros 2 s, últimos 2 s y 2-3 puntos medios — verifica consistencia de gradación, legibilidad de subtítulos, coherencia general. Ejecuta ffprobe en la salida para verificar que la duración coincida con la expectativa del EDL.

    Mide el audio, no lo asumas: ffmpeg -i out.mp4 -af ebur128=peak=true -f null - para sonoridad integrada y pico verdadero, más RMS por sección (diálogo, solo música, tarjeta final). Una tarjeta final 15 dB por debajo del diálogo, o efectos más fuertes que el habla, es un error. No puedes escuchar: dilo y reporta los números.

    Para cualquier cosa que el usuario publicará (lanzamiento, promoción, anuncio), también genera un subagente crítico con el archivo renderizado, el EDL y cualquier video de referencia que el usuario haya dado. Indícale que critique, no que elogie: un veredicto, problemas clasificados con códigos de tiempo y evidencia (fotogramas, niveles), y las 5 correcciones para hacer primero. Ojos nuevos detectan lo que el autor dejó de ver: líneas de remate cortadas, memes de 0.5 s, texto ilegible de 28 px en tamaño de teléfono.

    Si algo falla: corrige → vuelve a renderizar → vuelve a evaluar. Limita a 3 pases de autoevaluación — si los problemas persisten después de 3, indícalos al usuario en lugar de repetir infinitamente. Solo presenta la vista previa una vez que la autoevaluación pase.

  8. Iterar + persistir. Comentarios en lenguaje natural, replanificar, volver a renderizar. Nunca vuelvas a transcribir. Renderizado final al confirmar. Añade a project.md.

Arte de corte (técnicas)

  • Audio primero. Cortes candidatos a partir de límites de palabras y espacios de silencio.
  • Preserva picos. Risas, frases contundentes, golpes de énfasis. Extiende más allá de las frases contundentes para incluir reacciones — la risa ES el golpe.
  • Los cambios de hablante se benefician del aire entre las emisiones. Valores comunes: 400–600 ms. Menos para ritmo rápido, más para cinematográfico. Decisión de gusto.
  • Las risas y reacciones no están etiquetadas (whisper no emite eventos de audio). Encuéntralas como tramos sin habla pero fuertes en las formas de onda de timeline_view; extiéndelas más allá — la risa ES el golpe.
  • Los espacios de silencio son candidatos a corte. Mínimo 300 ms para usar un límite; por debajo de eso, el contenido hablado circunvala cualquier corte. Durante el corte, la duración del remanente (el silencio que queda en el borde después del relleno del corte) debe ser de 0 a 150 ms. Arriba, el corte crea un espacio perceptible. Puedes programar oscilaciones1 (el director de cine Walter Murch describió su uso) ajustando --pad-in y --pad-out por separado para cada segmento en el EDL. Una llamada común en el directorio: validate_edl.py --pad-in 0.100 --pad-out 0.080 $edl --fix.
  • Las superposiciones pueden conducir o fundirse a partir de una pausa respiratoria, una palabra de relleno o una frase de transición. No tienes que fundir en un borde de corte. Si el hablante dice "pero" como pivote, inicia la superposición justo ahí.
  • Fundido de entrada desde negro / salida a negro. Por defecto: 500 ms, pero 0 es válido (el material es continuo). El fundido de salida debe ser suave en el pico final (si lo hay) o silencio.
  • El fundido encadenado de audio debe ser una superposición de 400 ms, no un solo corte y fundido. ClubHouse no admite fundido encadenado de audio; programa manualmente una superposición en la línea de tiempo para un cambio suave.

Animaciones (manejadas por subagentes concurrentes)

El directorio skills/manim-video/ (vendido junto a esta habilidad) produce animaciones como videos cortos renderizados con Manim (un tercio inferior animado, una línea de tiempo que se reproduce, una tarjeta de factor de conversación). Cuando el plan de edición solicite animaciones:

  1. Para cada animación, crea <edit>/animations/slot_<id>/.
  2. Genera un subagente concurrente (a través de la herramienta Agent) con el resumen del editor. Dale: el slot, su función en el video, cualquier posición en el EDL, los colores, fuentes y el tono.
  3. El subagente produce un único archivo de video (o una secuencia de fotogramas en un output/). Formatos: cualquier cosa que ffmpeg pueda leer. Salida en el directorio del slot.
  4. Una vez que todos los subagentes hayan terminado, el editor principal construye la lista de edición referenciando animations/slot_<id>/out.mp4.

Debido a que los subagentes se ejecutan concurrentemente, el tiempo de pared total es el tiempo del subagente más lento.

Material de archivo y metraje silencioso

scenes.py proporciona límites de escena limpios y banderas de problemas. Después de obtener scenes para material sin transcripción, puedes:

  • Recortarlo como una escena larga o dividirlo en escenas y recortar las que sean utilizables.
  • Usarlo como superposición (sobre un segmento existente, no como un corte duro). Establece opacity y pos en el EDL.
  • Enmarcarlo en una superposición de pantalla dividida con el segmento del hablante.

Las piezas de material de archivo rara vez necesitan subtítulos (son autoevidentes). Pero si presentan texto, subtitúlalas.

El formato EDL (lista de decisión de edición)

Toda edición compleja de video produce edl.json. El esquema:

{
  "sources": { "take_B": "<videos_dir>/take_B.mp4", … },
  "canvas": { "width": 1080, "height": 1920, "fps": 30 },
  "segments": [
    {
      "id": 0,
      "source": "take_B",
      "in": 12.34, "out": 24.56,
      "crop_x": 0, "crop_y": 180,
      "grade": "bright",
      "pad_in": 0.1, "pad_out": 0.08,
      "fade_in": 0.5, "fade_out": 0.3,
      "overlays": [
        {
          "file": "<edit>/animations/slot_0/out.mp4",
          "start": 2.0, "duration": 3.5,
          "opacity": 1.0, "pos": "center"
        }
      ]
    }
  ],
  "total_duration_s": 212.0,
  "loudnorm": "loudnorm=I=-16:TP=-1.5:LRA=7",
  "captions": { "file": "<edit>/captions_edl/captions.webm", "style": { … } }
}

Claves de uso común (además de las anteriores):

  • "no_fade" omite el fundido de entrada/salida.
  • "crop_lock": true protege crop_x, crop_y de reframe.py.
  • "color": "#RRGGBB" fondo sin canal alfa.

Gradación

Preajustes de grade.py (la clave grade en el EDL):

  • bright — Sube exposición, reduce contraste, reduce saturación. Para subir diapositivas oscuras de videollamada.
  • vivid — Contraste alto, saturación alta. Para tomas de producto.
  • warm / cool — Matiz + saturación. Para b-roll narrativo.
  • desaturated / bw — Saturación reducida o cero.
  • dramatic — Contraste fuerte, sombras, viñeta. Para apertura/cierre.
  • clean — Sin gradación (restablece el aspecto original).

Pasa una cadena de filtro personalizada con --filter si los preajustes no son suficientes.

Subtítulos

Dos capas de control:

Qué subtitular: captions.py --mode con words (valor predeterminado), phrases (por pausa de silencio) o off. --words respeta cada palabra; --phrases agrupa para una lectura más limpia. --cull omite palabras con baja confianza (< 0.5). --accent <word> resalta una palabra.

Cómo se ve: --color, --top (mitad superior para feeds móviles), --size (px), --font (ruta .ttf o nombre del sistema), --case (upper / lower / title), --no-pop (sin animación pop). --no-glow desactiva el brillo de contraste.

Los subtítulos no se aplican a todo de forma predeterminada — elige qué segmentos llevan subtítulos en el EDL.

Veredicto de autoevaluación

Ejecuta el veredicto después de que la autoevaluación pase, justo antes de presentarlo al usuario. No lo ejecutamos por más iteración silenciosa — es un espejo. Llamada de muestra (el archivo renderizado, el EDL, cualquier video de referencia):

Todo bien. El corte fluye limpiamente sin saltos de audio. Los subtítulos son legibles y están sincronizados. La gradación es consistente. Sin embargo, hay un pequeño problema: el fundido de salida final se sigue arrastrando 200 ms en la tarjeta de cierre, lo que introduce un breve momento negro. Lo corregiré si lo deseas.

Nota: en lugar de "pequeño problema", la crítica debe especificar tiempo y evidencia: "A los 14.3 s se ven 2 fotogramas de metraje sucio antes de que el fundido encaje; el espacio de silencio medido es de 0.3 s y el relleno de salida es de 0.2 s — reduce pad_out en 0.1 allí."

Edición en directo (innovación)

Cuando el usuario te da un video que ya está en línea (YouTube, X, lo que sea) y quiere que lo edites: descárgalo con yt-dlp primero, luego procede normalmente. Si el video original ya tiene subtítulos, omite transcribe.py y usa --skip-transcribe.

Pautas de calidad

  • El inicio es el apretón de manos. El primer segmento del video debe transmitir inmediatamente de qué se trata, sin preámbulos. Sin aperturas genéricas: salta al contenido. Si el material tiene un "gancho" — una declaración provocativa, un momento impactante, una pregunta — ese es el inicio. En una edición de 30 segundos, el gancho debe aparecer en el segundo 0, no en el 3.
  • El final es un regalo. Resuelve o redondea, pero deja una impresión duradera. Una pausa repentina (corte brusco) después de la última palabra del hablante es a menudo más efectiva que un fundido lento a negro — se siente como un punto final, no como una oración que se desvanece.
  • Los cortes deben sentirse como respiraciones. Verifica esto: muestra el corte al usuario sin audio. Si notas la transición, es demasiado larga. Si duele, es demasiado corta. 6 fotogramas (a 24 fps) es el mínimo absoluto para un fundido encadenado; por debajo de eso, se convierte en un parpadeo.
  • Para anuncios y promociones: el inicio y el final son el 50% de la calidad percibida. Dedica el 30% de tu tiempo de edición a ellos.
  • Las variantes de anuncios deben diferir más que en la relación de aspecto. Una variante cuadrada no es solo un recorte de la horizontal — refrasea la primera y la última línea para que funcionen sin el contexto de la otra variante.
  • Si el usuario dice "hazlo viral", no se trata de volumen. Se trata de ritmo. Corta más ajustado que tu instinto. Retira 100 ms de cada pausa. Reduce el fundido de inicio al mínimo. El metraje debe sentirse como si tuviera prisa.
  • Las palabras de relleno no siempre son errores. "Bueno, mira" es un pivote natural; eliminarlo deja un inicio áspero. "Mmm" antes de una palabra difícil es humano; déjalo intacto. Elimina solo cuando la pausa es torpe o el relleno es cada tercera palabra.
  • Cuando dudes, acércate. Corta más cerca del hablante, no más lejos. Un rostro llena una pantalla pequeña mejor que un fondo. Zoom en los momentos de emoción (y récordalo en el EDL para que el reencuadre lo recoja).
  • La edición de video no se trata de eliminar errores. Se trata de crear ritmo. Una buena edición hace que el material se sienta más inteligente de lo que era en bruto. El usuario no debería poder señalar dónde cortaste — pero debería sentir que la versión editada es la versión "real" y la bruta es un borrador.

Responsabilidad

Esta habilidad se vende ella misma. No hay artefactos externos para importar. Todo lo que necesita para ejecutarse se configura en setup.sh. Ejecútalo.

Footnotes

  1. Oscilación: cortar un fotograma detrás del latido de un ritmo. Un corte posterior coloca el latido en el aire; uno anterior lo conecta con la siguiente escena. Las oscilaciones controlan el impacto del siguiente latido. No hay valores universales — depende del ritmo del material. ↩

Skills relacionados