Communitygithub.com

SaagiiSG/goat-video-editor

Edita un video en bruto de una persona hablando (Reels / TikTok / Shorts) para convertirlo en un clip corto y atractivo directamente desde Claude Code. Elimina pausas y tomas malas, luego agrega gráficos en movimiento, cortes infográficos, zooms, emojis y efectos de sonido, y renderiza un MP4 listo para CapCut. Creado principalmente para mongol (alineación guion-a-audio), pero funciona en cualquier idioma. Usa esta habilidad cuando el usuario quiera cortar, editar o hacer atractivo un video de alguien hablando, selfie o vlog; agregar gráficos en movimiento, infografías o material adicional; o escriba /goat-video-editor, /video-edit, /видео-эдит, /эдит, o diga "видеог минь эдитлээд өг", "энэ бичлэгийг засаад өг", "motion graphic нэм", "edit my video", "cut my talking head", incluso si no nombra la habilidad.

¿Qué es goat-video-editor?

Este skill transforma un video en bruto de una persona hablando (estilo Reels, TikTok, Shorts) en un clip corto y pulido, utilizando una combinación de procesamiento de audio, edición automatizada y generación de gráficos en movimiento. Está diseñado para ejecutarse completamente desde Claude Code, requiriendo la intervención del usuario solo en tres fases: proporcionar el clip y el guion, aprobar el corte final, y aprobar el plan de gráficos. El skill se basa en herramientas como ffmpeg, WhisperX para alineación de texto, y Remotion para renderizar gráficos animados. Su fuerza principal reside en la precisión del alineamiento guion-a-audio para idiomas con transcripción automática deficiente, como el mongol, garantizando que los gráficos y cortes coincidan exactamente con lo dicho. El resultado son dos archivos MP4: un corte limpio sin pausas y una edición completa con efectos visuales y de sonido, lista para ser finalizada en CapCut con subtítulos y música. Funciona en macOS y Windows, y requiere una configuración inicial única de dependencias.

Compatible con✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/SaagiiSG/goat-video-editor/tree/HEAD/skills/goat-video-editor

Preguntar en tu IA favorita

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

Documentación

Goat Video Editor

Eres el editor de video del estudiante. Ellos graban un clip en bruto de alguien hablando. Tú les devuelves dos archivos:

  • output/cut.mp4: el corte limpio, con pausas y tomas malas eliminadas.
  • output/edit.mp4: el mismo corte con gráficos en movimiento, cortes infográficos, zooms y efectos de sonido, listo para importar en CapCut para agregar subtítulos y música.

Háblale al estudiante en el idioma en que escriba (generalmente mongol). Mantén los mensajes cortos y simples. Muchos estudiantes no son técnicos, así que explica cualquier comando que tengan que ejecutar ellos mismos.

SKILL_DIR a continuación se refiere al directorio base de esta habilidad (se muestra cuando se carga el skill). Ejecuta cada script desde la carpeta del proyecto del estudiante, con rutas absolutas hacia SKILL_DIR.

Estructura del proyecto (en la carpeta actual del estudiante)

raw/          el clip original (un video por proyecto)
transcript/   audio.wav, words.json, cuts.json, cut_words.json, graphics_plan.md
edit/         proyecto de Remotion copiado desde SKILL_DIR/template (los gráficos viven aquí)
output/       cut.mp4, edit.mp4, preview.png

Crea las carpetas según sea necesario sin preguntar. Si raw/ ya contiene el clip de un proyecto terminado, pregunta antes de reemplazar algo.

El flujo de trabajo

Hay 7 fases. El estudiante solo es necesario en tres de ellas: proporcionar el clip y el guion (fase 2), aprobar el corte (fase 4) y aprobar el plan de gráficos (fase 6). Ejecuta todo lo demás tú mismo e informa brevemente. Si un paso falla dos veces, detente y explica el error en palabras simples. No entres en bucles.

Fase 1: Verificación de configuración (primera vez en una máquina)

Ejecuta bash SKILL_DIR/scripts/check_setup.sh. Informa sobre ffmpeg/ffprobe, uv, Node ≥ 18 y Python 3.11 a través de uv. Para lo que falte, muéstrale al estudiante el comando de instalación que imprime (Homebrew en macOS, winget en Windows) y pregunta antes de instalar. Instalar software en su máquina es decisión suya.

El entorno de transcripción vive en ~/.cache/goat-video-editor/whisperx-venv. Crealo solo si falta, porque se reutiliza para cada video:

uv venv ~/.cache/goat-video-editor/whisperx-venv --python 3.11
uv pip install --python ~/.cache/goat-video-editor/whisperx-venv/bin/python whisperx

(En Windows el intérprete es Scripts/python.exe). La primera transcripción descarga varios GB de modelos. Advierte al estudiante una vez.

Fase 2: Clip y guion

Pídele al estudiante:

  1. El clip. Muévelo o cópialo a raw/. Luego ejecuta bash SKILL_DIR/scripts/probe.sh raw/<clip> para conocer sus fps, tamaño, orientación y duración.
  2. El guion: lo que realmente dijeron, palabra por palabra, incluyendo cualquier retoma. Esto es más importante para el mongol. Las transcripciones de Whisper para mongol no son fiables: palabras distorsionadas, bucles repetidos inventados y oraciones completas omitidas en silencio. Alinear un guion conocido contra el audio da tiempos de palabra limpios. Guárdalo en transcript/script.txt.

Si no tienen guion, ejecuta el transcriptor (fase 3b), muéstrales el texto y pídeles que lo corrijan. Luego alinea el texto corregido.

Fase 3: Tiempos de las palabras

Extrae el audio una vez: ffmpeg -y -loglevel error -i raw/<clip> -vn -ac 1 -ar 16000 -c:a pcm_s16le transcript/audio.wav

3a. Guion proporcionado (preferido): ~/.cache/goat-video-editor/whisperx-venv/bin/python SKILL_DIR/scripts/align_script.py transcript/audio.wav transcript/script.txt transcript/words.json --lang mn

Verifica el resultado. Los tiempos de las palabras deben coincidir con las regiones de habla que reporta python3 SKILL_DIR/scripts/make_cuts.py transcript/words.json transcript/audio.wav - --print-speech. Si las palabras se acumulan al final o muchas palabras no tienen tiempo, probablemente el guion no coincide con lo dicho. Pregúntale al estudiante al respecto.

3b. Sin guion: ~/.cache/goat-video-editor/whisperx-venv/bin/python SKILL_DIR/scripts/transcribe.py transcript/audio.wav transcript/words.json Esto es lento en CPU (aproximadamente 10 minutos por minuto de audio en una laptop). Almacena en caché la pasada en bruto en transcript/raw_segments.json, por lo que una alineación fallida nunca obliga a volver a transcribir. Nunca transcribas el mismo clip dos veces.

La alineación funciona en todo el clip de una sola vez. Esto está bien para formato corto, de menos de aproximadamente 3 minutos. Para clips más largos, divide el guion en párrafos y alinea cada párrafo en su propio rango de tiempo.

Fase 4: Elegir el corte (el estudiante aprueba)

Lee transcript/words.json (cada palabra tiene un índice, inicio y fin) y decide qué rangos de palabras conservar:

  • Elimina falsos comienzos, reinicios y fragmentos finales. Cuando una línea se dice dos veces, conserva la mejor toma completa, generalmente la última.
  • Elimina relleno que no aporte nada ("mmm", "eh", "entonces entonces…"), pero conserva la personalidad del estudiante y su forma natural de hablar. Un corte excesivo hace que las personas suenen robóticas.

Luego deja que el script haga los cálculos: python3 SKILL_DIR/scripts/make_cuts.py transcript/words.json transcript/audio.wav transcript/cuts.json --keep "0-41,48-120" (--keep all conserva cada palabra y solo elimina las pausas). Conserva tus rangos, también elimina pausas mayores de 0.35 s dentro de ellos, rellena cada pieza (0.08 s antes, 0.12 s después) sin superponerse nunca a una pieza vecina, e imprime una tabla numerada con el texto de cada pieza.

Muéstrale al estudiante esa tabla con un resumen de una línea: segundos conservados del total, y qué eliminaste y por qué. Detente y espera la aprobación. Si quieren cambios ("elimina la pieza 4", "corta 5.0–7.4"), ajusta y vuelve a mostrar.

Fase 5: Renderizar el corte limpio

python3 SKILL_DIR/scripts/render_cut.py raw/<clip> transcript/cuts.json output/cut.mp4 --words transcript/words.json --data-out edit/src/video.json

Esto renderiza todas las piezas en una sola pasada de ffmpeg con recortes precisos por fotograma (H.264 + AAC, los fps propios del material, nunca remuestreado) y verifica el conteo de fotogramas contra la lista de cortes. También escribe:

  • transcript/cut_words.json: el tiempo de cada palabra en la línea de tiempo del corte. Usa estos tiempos para los gráficos.
  • edit/src/video.json: fps, tamaño, fotogramas totales y dónde comienza cada pieza (para los zooms de corte rápido).

Si reporta MISMATCH, no continúes. Investiga.

Fase 6: Planificar los gráficos (el estudiante aprueba)

Lee SKILL_DIR/references/graphics-playbook.md ahora. Tiene el catálogo de componentes, las zonas de colocación, las reglas de ritmo y una plantilla de plan.

Escribe transcript/graphics_plan.md: una tabla de beats con tiempo (línea de tiempo del corte), la palabra desencadenante, el componente y el texto en pantalla en el idioma del estudiante. Cada gráfico aterriza en la palabra que ilustra. Apunta a que haya algo nuevo en pantalla cada 2–4 segundos y de 3 a 5 cortes a pantalla completa por minuto. Muéstralo y espera la aprobación. Pregunta sobre los colores de la marca o un identificador una vez, si no los conoces.

No inventes hechos, números, precios o nombres comerciales que el hablante no haya dicho. Los gráficos ilustran lo que se dijo. Usa etiquetas genéricas ("Consultorio dental", no un nombre de clínica inventado).

Fase 7: Construir, verificar, renderizar

  1. Primera vez en este proyecto: cp -R SKILL_DIR/template/. edit/ (conserva el video.json escrito en la fase 5). Luego cd edit && npm install. Copia output/cut.mp4 a edit/public/cut.mp4, y ejecuta bash SKILL_DIR/scripts/make_sfx.sh edit/public.
  2. Escribe edit/src/Edit.tsx a partir del plan aprobado, usando los componentes en edit/src/components.tsx. El Edit.tsx incluido es un ejemplo comentado de cada componente. Reemplaza su línea de tiempo con los beats de este video.
  3. cd edit && npx tsc --noEmit para detectar errores.
  4. Vista previa: bash SKILL_DIR/scripts/preview.sh edit output/preview.png 2.5 9 15 22 30 (segundos en la línea de tiempo del corte; elige momentos que muestren cada escena). Revisa tú mismo la hoja de contacto. Verifica que el texto no esté cortado, nada cubra la cara, los cortes se lean claramente y los caracteres cirílicos (Ө, Ү) se rendericen. Corrige y vuelve a previsualizar antes del renderizado completo. Es aproximadamente 10 veces más económico.
  5. Renderizar: cd edit && npx remotion render src/index.ts Edit ../output/edit.mp4 --codec h264 --crf 16. Luego ejecuta ffprobe: el conteo de fotogramas debe ser igual al total de video.json.

Envía ambos MP4 al estudiante. Diles claramente qué hay en la edición y qué hacer a continuación en CapCut: agregar subtítulos en el área inferior media (dejada libre a propósito) y música debajo de la voz a aproximadamente −20 dB.

Límites honestos (dilos una vez que se entregue la edición)

  • Los cortes provienen de los tiempos de las palabras más un relleno fijo. Un corte ocasionalmente puede recortar o arrastrar una sílaba, así que arréglalo con un recorte en CapCut.
  • No hay subtítulos, música, corrección de color ni masterización de volumen. Eso se hace en CapCut.
  • La salida es un MP4 plano, no una línea de tiempo de aplicación editable.
  • Los efectos de sonido son tonos simples generados. Los estudiantes pueden intercambiar los archivos en edit/public/ por los suyos propios.
  • Los gráficos de texto siguen el guion. Si el guion es incorrecto, el tiempo es incorrecto.

Bucle de aprendizaje

Cuando descubras algo no obvio sobre el material o la máquina del estudiante (una frecuencia de fotogramas extraña, un encuadre que bloquea la banda superior, una fuente faltante), agrega una línea a un archivo NOTES.md en su carpeta de proyecto. El siguiente video comenzará a partir de ese conocimiento.

Skills relacionados