Cortar Erros & Repetições (Agente 2 do Pipeline)
Segunda etapa da edição automatizada, executada após cortar silêncios. Remove o que um editor humano cortaria em uma segunda passagem: gaguejos ("o o", "eu- eu-"), palavras imediatamente repetidas, falsos começos (uma frase abandonada que recomeça) e retomadas (uma linha regravada — mantenha a tomada limpa, descarte a errada).
Decidir o que conta como um erro é julgamento, não uma fórmula — repetição enfática ("nunca, nunca") e duplicação retórica ("a primeira peça é, é isso…") parecem idênticas a um gaguejo mecanicamente. Portanto, este agente é controlado por revisão por padrão: ele apresenta candidatos com contexto completo; o agente (e o usuário) decidem; apenas os cortes aprovados são renderizados.
Quando usar
- "corte os erros", "remova gaguejos / repetições", "limpe as escorregadelas", "mantenha a melhor tomada", "corte falsos começos"
- Como a segunda etapa do fluxo de edição mestre, na saída 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 se apliquem à 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 candidato: stutter (repetição imediata de palavra), retake (segmento duplicado/quase duplicado via similaridade 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 retórica intencional de um erro real, portanto não confie em recommend cegamente — leia removes + context. Falsos positivos comuns: repetição enfática ("nunca é, nunca é mão leve"), cópula seguida de pergunta ("a peça é, é isso…"), listagem.
Apresente os candidatos ao usuário com uma recomendação por item; colete aprovações. Escreva os cortes aprovados em um arquivo:
{ "cuts": [ { "start": 100.93, "end": 101.06, "reason": "eu- falso começo" }, ... ] }
(start/end em segundos na linha do tempo do vídeo/transcrição de entrada. Você pode ampliar o intervalo de um candidato — por exemplo, para uma retomada, corte do início da tomada errada até o 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 <stem>.mistakes-transcript.json re-temporizada (alimenta o agente de gráficos em movimento + validate-beat-sync.mjs), um registro de decisões e — com --apply — o vídeo cortado (ffmpeg trim+concat, A/V sincronizados). Remova --apply para uma execução de teste.
Revisando o resultado
Use a ferramenta de revisão compartilhada para examinar 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 entrega muito limpa pode resultar em poucos ou nenhum corte real — isso é um resultado válido; não corte a fala natural para cumprir uma cota.
- Cortes entre duas palavras faladas são uniões diretas. 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 (gráficos em movimento / cartões em camadas).