Communitygithub.com

Material bruto a Shorts: edita tus tomas en final.mp4

Edita cualquier video conversando: deja las tomas en bruto en una carpeta y recibe edit/final.mp4. Transcripción Whisper local y gratuita, cortes de muletillas y silencios, etalonaje por segmento, fundidos de audio de 30 ms, subtítulos quemados y animaciones superpuestas, con autorrevisión en cada corte. No requiere claves API.

¿Qué es Material bruto a Shorts: edita tus tomas en final.mp4?

Receta Material bruto a Shorts, paso 1 (el máster terminado), de Moh4696/freecut, un fork de browser-use/video-use que sustituye la dependencia de pago de ElevenLabs por transcripción gratuita y enchufable. Funciona en Claude Code, Codex y cualquier agente con acceso a shell; se instala con npx skills add Moh4696/freecut. Transcribe las tomas en local (mlx-whisper o faster-whisper; VibeVoice o ElevenLabs opcionales para diarización), genera una transcripción por frases, hace preguntas según el material, propone una estrategia de edición de 4 a 8 frases y espera tu aprobación. Después escribe un EDL, etalona cada segmento con ffmpeg, añade fundidos de 30 ms en cada corte, crea animaciones en subagentes paralelos (HyperFrames, Remotion, Manim o PIL), quema los subtítulos al final, revisa el render en cada corte (hasta 3 pasadas) y guarda la memoria de la sesión en project.md.

Compatible con✓Claude Code✓Codex CLI~Cursor
npx skills add Moh4696/freecut

Preguntar en tu IA favorita

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

Documentación

freecut

Principio

  1. El LLM razona a partir de la transcripción bruta + elementos visuales bajo demanda. El único artefacto derivado que merece la pena mantener es una transcripción a nivel de frase empaquetada (takes_packed.md). Todo lo demás — etiquetado de relleno, detección de tomas repetidas, clasificación de planos, puntuación de énfasis — se deriva en el momento de la decisión.
  2. El audio es primario, los visuales siguen. Los candidatos a corte provienen de los límites del habla y de los silencios. Profundiza en los visuales 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 vídeo es. Observa el material, pregunta al usuario, luego edita.
  5. La libertad artística es el valor por defecto. Cada valor específico, ajuste preestablecido, 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 de gusto basándote en lo que el material realmente es y en 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.
  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, fotogramas congelados, encadenados, cortes de coincidencia, L-cuts, J-cuts, 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 soporte. No esperes permiso.
  7. 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 negociable)

Estas son las cosas en las que la desviación produce fallos silenciosos o salidas rotas. No son cuestión de gusto, son corrección. Memorízalas.

  1. Los subtítulos se aplican AL FINAL en la cadena de filtros, después de cada superposición. De lo contrario, las superposiciones ocultan los subtítulos. Falla silencioso.
  2. Extraer por segmentos → concatenación con -c copy sin pérdida, no un solo filtergraph de una pasada. De lo contrario, se re-codifica cada segmento dos veces cuando se añaden superposiciones.
  3. 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 producen clics 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, se ve la mitad de la animación durante la ventana de superposición.
  5. El SRT maestro usa desplazamientos de la 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.
  6. Nunca cortes dentro de una palabra. Ajusta cada borde de corte a un límite de palabra de la transcripción.
  7. Rellena cada borde de corte. Ventana de trabajo: 30–200ms. Las marcas de tiempo del ASR se desvían 50–100ms — el relleno absorbe la desviación. Más ajustado para ritmo rápido, más suelto para cinematográfico.
  8. Solo ASR palabra por palabra sin modificaciones. Nunca modo SRT/frase (pierde datos de espacio sub-segundo). Nunca rellenos normalizados (pierde señal editorial).
  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 secuenciales. Genera N a la vez a través de la herramienta Agent; el tiempo total de pared ≈ 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 del proyecto freecut/.

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

Diseño de directorios

La skill reside en freecut/. El metraje del usuario está donde sea que lo pongan. 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
    ├── transcripts/<nombre>.json  ← JSON de ASR normalizado en caché
    ├── animations/slot_<id>/    ← fuente + render + razonamiento por animación
    ├── clips_graded/            ← extractos por segmento con etalonaje + fundidos
    ├── master.srt               ← subtítulos de la 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

La instalación inicial está en install.md (clonar, dependencias, ffmpeg, registro de la skill, clave API). No lo ejecutes de nuevo en cada sesión; en un arranque en frío solo verifica:

  • El backend de transcripción está disponible. El predeterminado es whisper (gratuito, local) — verifica que mlx-whisper (Apple Silicon) o faster-whisper se pueden importar. Si ninguno está instalado, dile al usuario que pip install mlx-whisper (o faster-whisper) en lugar de recurrir silenciosamente a un backend de pago. Para los backends opcionales vibevoice / elevenlabs, verifica VIBEVOICE_ASR_URL / ELEVENLABS_API_KEY en el entorno o en .env en la raíz del repositorio de freecut.
  • ffmpeg + ffprobe en PATH.
  • Dependencias de Python instaladas (uv sync o pip install -e . dentro del repositorio).
  • Node.js + npm disponibles si la sesión necesita HyperFrames o slots de Remotion. HyperFrames actualmente requiere Node.js 22+.
  • yt-dlp, HyperFrames, Remotion, Manim instalados solo en el primer uso.
  • La configuración de animación en el primer uso ocurre dentro del directorio del slot, nunca en la raíz del repositorio de freecut. HyperFrames se puede invocar con npx --yes hyperframes ...; Remotion se puede preparar con npx create-video@latest o instalar como dependencia local del proyecto antes de usar su comando remotion render.
  • Esta skill distribuye skills/manim-video/. Lee su SKILL.md cuando construyas un slot de Manim.

Los ayudantes (helpers/transcribe.py, helpers/render.py, etc.) residen junto a este SKILL.md. Resuelve sus rutas relativas al directorio que contiene este archivo — la skill normalmente está enlazada simbólicamente en ~/.claude/skills/freecut/ o ~/.codex/skills/freecut/.

Ayudantes

  • transcribe.py <video> — transcripción de un solo archivo. Backend conectable mediante --backend {whisper,vibevoice,elevenlabs} (predeterminado whisper, local + gratuito, un solo orador). vibevoice usa VIBEVOICE_ASR_URL para diarización en tiempo real; elevenlabs usa ELEVENLABS_API_KEY y soporta --num-speakers. Almacenado en caché.
  • transcribe_batch.py <videos_dir> — transcripción paralela con 4 trabajadores. Misma bandera --backend. Úsalo para múltiples tomas.
  • pack_transcripts.py --edit-dir <dir> — transcripts/*.json → takes_packed.md (nivel de frase, se rompe en silencios ≥ 0.5s o cambio de orador). Funciona de manera idéntica en todos los backends porque la forma del JSON está normalizada.
  • 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.
  • render.py <edl.json> -o <out> — extraer por segmento → concatenar → superposiciones (desplazadas por PTS) → subtítulos AL FINAL. --preview para 720p rápido. --build-subtitles para generar master.srt en línea.
  • grade.py <in> -o <out> — cadena de filtros ffmpeg para etalonaje. Ajustes preestablecidos + --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 de cada fuente. transcribe_batch.py en el directorio. pack_transcripts.py para producir takes_packed.md. Muestrea una o dos timeline_views para una primera impresión visual.

  2. Pre-detección de problemas. Una pasada sobre takes_packed.md para anotar deslices verbales, errores obvios al hablar o frases a evitar. Lista simple, alimenta el resumen del editor.

  3. Conversar. Describe lo que ves en lenguaje sencillo. Haz preguntas formadas por 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 etalonaje, necesidades de subtítulos. No uses una lista de verificación fija — las preguntas correctas son diferentes cada vez.

  4. Proponer estrategia. 4–8 frases: forma, elección de tomas, dirección del corte, plan de animación, dirección del etalonaje, estilo de subtítulos, estimación de duración. Espera la 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. Aplica etalonaje por segmento. Compón mediante render.py.

  6. Vista previa. render.py --preview.

  7. Auto-evaluación (antes de mostrar al usuario). Ejecuta timeline_view sobre la salida renderizada (no las fuentes) en cada límite de corte (ventana ±1.5s). Comprueba cada imagen para:

    • Discontinuidad visual / destello / salto en el corte
    • Pico en la forma de onda en el límite (clic de audio que pasó el fundido de 30ms)
    • 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 2s, últimos 2s y 2–3 puntos intermedios — comprueba consistencia del etalonaje, legibilidad de subtítulos, coherencia general. Ejecuta ffprobe sobre la salida para verificar que la duración coincide con la expectativa del EDL.

    Si algo falla: corrige → re-renderiza → re-evalúa. Límite de 3 pasadas de auto-evaluació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 auto-evaluación haya sido exitosa.

  8. Iterar + persistir. Comentarios en lenguaje natural, re-planificar, re-renderizar. Nunca vuelvas a transcribir. Render final tras confirmación. Anexa a project.md.

Técnicas de corte

  • Audio primero. Cortes candidatos a partir de límites de palabra y silencios.
  • Conserva los picos. Risas, remates, tiempos de énfasis. Extiende más allá de los remates para incluir reacciones — la risa ES el compás.
  • Los intercambios de oradores se benefician de aire entre las expresiones. Valores comunes: 400–600ms. Menos para ritmo rápido, más para cinematográfico. Decisión de gusto.
  • Eventos de audio como señales. (risas), (suspiros), (aplausos) marcan los compases. Extiende más allá.
  • Los silencios son candidatos a corte. Los silencios ≥400ms suelen ser los más limpios. Los límites de frase de 150–400ms son utilizables con una verificación visual. <150ms es inseguro (mitad de frase).
  • Ejemplo de relleno de corte (el vídeo de lanzamiento distribuido con esto): 50ms antes de la primera palabra mantenida, 80ms después de la última. Más ajustado para energía de montaje, más suelto 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 empaquetada (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] como prefijo. Las frases se rompen en cualquier silencio ≥ 0.5s O cambio de orador. Este es el artefacto que el subagente editor lee para elegir cortes — proporciona precisión de límite de palabra a partir del texto solo con 1/10 de los tokens del JSON bruto.

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 Solucionamos esto.

Resumen del subagente editor (para selección de múltiples tomas)

Cuando la tarea es

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

Skills relacionados