Cortar Errores y Repeticiones (Agente 2 del Pipeline)
Segundo paso de la edición automatizada, ejecutado después de cortar silencios. Elimina lo que un editor humano cortaría en un segundo pase: tartamudeos ("el el", "yo- yo-"), palabras repetidas inmediatamente, falsos comienzos (una frase abandonada que se reinicia) y retomas (una línea regrabada — conserva la toma limpia, descarta la fallida).
Decidir qué cuenta como error es cuestión de juicio, no de fórmula — la repetición enfática ("nunca, nunca") y el doblete retórico ("la primera pieza es, es esta…") se ven mecánicamente idénticos a un tartamudeo. Por eso, este agente requiere revisión por defecto: presenta candidatos con contexto completo; el agente (y el usuario) deciden; solo se renderizan los cortes aprobados.
Cuándo usarlo
- "cortar los errores", "eliminar tartamudeos / repeticiones", "limpiar los fallos", "conservar la mejor toma", "cortar falsos comienzos"
- Como segunda etapa del flujo de trabajo de edición maestro, sobre la salida de cortar silencios.
El flujo de tres partes
1. Encontrar candidatos (mecánico)
node .agents/skills/cut-mistakes/scripts/find-cut-candidates.mjs \
<silence-transcript.json> --out-dir video-projects/<slug>/assets
La entrada normalmente es el <stem>.silence-transcript.json del Agente 1, por lo que los cortes caen en la línea de tiempo ya silenciada. Escribe:
<stem>.cut-candidates.json— candidatos estructurados (tipo, confianza, rangocutpropuesto, textoremoves/keeps, contexto, recomendación)<stem>.cut-candidates.md— propuesta legible
Tipos de candidatos: stutter (repetición inmediata de palabra), retake (segmento duplicado/casi duplicado mediante similitud de Jaccard), false_start (frase corta abandonada que se reinicia).
2. Revisión (la compuerta — OBLIGATORIA)
Lee cada candidato en contexto y decide entre conservar o cortar. El detector mecánico no puede distinguir entre énfasis/retórica intencional y un error real, así que no confíes ciegamente en recommend: lee removes + context. Falsos positivos comunes: repetición enfática ("nunca, nunca es manos libres"), cópula seguida de pregunta ("la pieza es, es esta…"), enumeraciones.
Presenta los candidatos al usuario con una recomendación por cada elemento; recopila las aprobaciones. Escribe los cortes aprobados en un archivo:
{ "cuts": [ { "start": 100.93, "end": 101.06, "reason": "yo- falso comienzo" }, ... ] }
(start/end en segundos sobre la línea de tiempo del video/transcripción de entrada. Puedes ampliar el rango de un candidato — p. ej., para una retoma, cortar desde el inicio de la toma fallida hasta el reinicio limpio).
3. Aplicar cortes aprobados
node .agents/skills/cut-mistakes/scripts/apply-cuts.mjs \
<silence-transcript.json> --cuts approved-cuts.json \
--video video-projects/<slug>/assets/edited-silenced.mp4 \
--output video-projects/<slug>/assets/edited-clean.mp4 --apply
Escribe el EDL, un <stem>.mistakes-transcript.json re-sincronizado (alimenta al agente de gráficos en movimiento + validate-beat-sync.mjs), un registro de decisiones y — con --apply — el video cortado (ffmpeg trim+concat, A/V sincronizado). Omite --apply para una simulación.
Revisar el resultado
Usa la herramienta de revisión compartida para inspeccionar visualmente los cortes y verificar los límites:
node scripts/build-edl-review.mjs <stem>.mistakes-edl.json \
--original video-projects/<slug>/assets/edited-silenced.mp4 \
--edited video-projects/<slug>/assets/edited-clean.mp4 \
--output video-projects/<slug>/assets/mistakes-review.html
npx serve . -p 8080 -n
Notas
- Una entrega muy limpia puede generar pocos o ningún corte real — eso es un resultado válido; no cortes el habla natural para alcanzar una cuota.
- Los cortes entre dos palabras habladas son uniones duras. Generalmente son limpios para tartamudeos/falsos comienzos; para audio más ajustado se puede añadir un fade de 20-30 ms más adelante.
- Entrega el
mistakes-transcript.json+ el video limpio al Agente 3 (gráficos en movimiento / tarjetas escalonadas).