Cortar Erros e Repetições (Agente 2 do Pipeline)
Segunda etapa da edição automatizada, executada após cortar-silêncios. Remove aquilo que um editor humano corta numa segunda passagem: gaguejos ("o o", "eu- eu-"), palavras imediatamente repetidas, falsos começos (uma frase abandonada que recomeça) e retakes (uma linha regravada — mantenha a toma limpa, descarte a estragada).
Decidir o que conta como erro é julgamento, não fórmula — repetição enfática ("nunca, nunca") e duplicação retórica ("a primeira peça é, é esta…") parecem mecanicamente idênticas a um gaguejo. Portanto, este agente é revisão-obrigatória por padrão: ele apresenta candidatos com contexto completo; o agente (e o utilizador) decidem; apenas os cortes aprovados são renderizados.
Quando usar
- "corta os erros", "remove gaguejos / repetições", "limpa as falhas", "mantém a melhor toma", "corta falsos começos"
- Como segunda fase do fluxo de edição mestre, sobre o resultado de cortar-silêncios.
O fluxo em três 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
A entrada é normalmente o <stem>.silence-transcript.json do Agente 1, para que os cortes incidam sobre a linha do tempo já silenciada. Escreve:
<stem>.cut-candidates.json— candidatos estruturados (tipo, confiança, intervalo decutproposto, textoremoves/keeps, contexto, recomendação)<stem>.cut-candidates.md— proposta legível
Tipos de candidatos: stutter (repetição imediata de palavra), retake (segmento duplicado/quase duplicado via similaridade de Jaccard), false_start (frase curta abandonada que recomeça).
2. Revisar (o portão — OBRIGATÓRIO)
Leia cada candidato em contexto e decida manter-ou-cortar. O detector mecânico não consegue distinguir ênfase/rétorica intencional de um erro real, por isso não confie cegamente no recommend — leia removes + context. Falsos positivos comuns: repetição enfática ("nunca é, nunca é hands-off"), cópula-seguida-de-pergunta ("a peça é, é esta…"), listagens.
Apresente os candidatos ao utilizador com uma recomendação por item; recolha as aprovações. Escreva os cortes aprovados num ficheiro:
{ "cuts": [ { "start": 100.93, "end": 101.06, "reason": "I- false start" }, ... ] }
(start/end em segundos na linha do tempo do vídeo/transcrição de entrada. Pode alargar o intervalo de um candidato — por exemplo, para um retake, corte do início da toma estragada até ao recomeço limpo.)
3. Aplicar cortes aprovados
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
Escreve a EDL, uma transcrição re-temporizada <stem>.mistakes-transcript.json (alimenta o agente de motion graphics + validate-beat-sync.mjs), um registo de decisões e — com --apply — o vídeo cortado (ffmpeg trim+concat, A/V sincronizados). Remova --apply para uma execução simulada.
Revisar o resultado
Use a ferramenta de revisão partilhada para inspecionar os cortes e verificar limites:
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
- Uma gravação muito limpa pode resultar em poucos ou nenhum corte real — isso é um resultado válido; não corte discurso natural apenas para atingir uma cota.
- Cortes entre duas palavras faladas são junções duras. Geralmente são limpos para gaguejos/falsos começos; para áudio mais apertado, um fade de 20-30ms pode ser adicionado posteriormente.
- Passe o
mistakes-transcript.json+ o vídeo limpo para o Agente 3 (motion graphics / cartões em camadas).