# Corte seco

O vídeo já está pronto e aprovado, mas ficou espaço entre uma fala e outra. Este passo corta o vídeo final inteiro (imagem e som no mesmo quadro), então legenda, animação e efeito continuam grudados na fala. Em cada pausa maior que 0,25 s sobra só 0,15 s de silêncio, e o vídeo começa quase em cima da primeira palavra.

É mais barato e mais seguro do que voltar, re-cortar e renderizar tudo de novo. Foi assim no reel "uma IA editou este vídeo", aprovado pelo André.

## Quando usar aqui e quando voltar pro corte (Fase 1)

| Situação | Onde resolver |
|---|---|
| Vídeo pronto e aprovado, pausas de 0,25 a 1 s entre as frases | **Aqui** |
| A pessoa pediu "mais ritmo" depois de ver o vídeo final | **Aqui** |
| Uma tomada repetida curta que passou (até ~1 s) e não tem animação em cima | **Aqui**, com `--cortar` |
| O corte ainda não foi aprovado, ou ainda não tem animação | **Corte (Fase 1)**: re-corte lá. Sai mais barato e a legenda já nasce certa |
| Palavra comida, respiro no meio da frase, barulho, tomada repetida grande | **Corte (Fase 1)** (`bordas_precisas.py`, `conferir_corte.py`). É problema do corte de base |
| Quase toda frase tem pausa de mais de 1 s | **Corte (Fase 1)**: o corte de base está frouxo. Refaça lá |
| Uma animação longa atravessa a pausa (câmera girando, contagem, gráfico subindo) | **Corte (Fase 1)** e renderize de novo. Aqui a animação daria um pulo. Ou aceite essa pausa |
| Tirar mais de ~1 s num lugar com legenda ou animação em cima (frase inteira) | **Corte (Fase 1)** e remapeie os tempos (`remap_edit_data.py`). Aqui a legenda pularia |
| A trilha já está mixada no vídeo e não dá pra renderizar sem ela | **Corte (Fase 1)**. Com música por baixo não dá pra achar as pausas direito |

Regra do André pra pausa: o alvo é 0,12 a 0,20 s de silêncio na emenda. A partir de 0,25 s já incomoda. Nunca cortar a pessoa no meio da palavra, e nunca esticar trecho.

## Antes de rodar

1. **Vídeo sem trilha.** A trilha entra depois do corte seco (`references/som-e-trilha.md`). Se o vídeo já tem música, renderize de novo sem ela. O script avisa quando o fundo está alto demais.
2. **Plano de sons** (`plano_sfx.json` do `helpers/plano_sfx.py`, em `references/som-e-trilha.md`), se os efeitos entraram por ele. Protege o ataque de cada efeito.
3. **Áudio só da voz** no mesmo tempo do vídeo, se tiver: o `cut.mp4` do corte (Fase 1) quando o vídeo final começa no zero do corte. Com ele as pausas são medidas na voz limpa, e o ataque de qualquer som que não é voz fica protegido.
4. **Render só com grafismo** (opcional, bom em vídeo com muita animação): o mesmo projeto renderizado sem a pessoa, com a mesma duração. No HyperFrames, esconda os vídeos da pessoa com CSS (`video{visibility:hidden!important}`) e renderize de novo. Com ele o corte cai onde os grafismos estão parados. Sem ele, o script usa a diferença entre quadros do próprio vídeo.

## Rodar

Com o `--directory` o comando roda dentro da pasta da skill: passe cada arquivo com o caminho completo, entre aspas.

```bash
# 1) só o plano, sem renderizar (confira o que vai sair)
uv run --directory "<SKILL>" python helpers/corte_seco.py final.mp4 --sfx plano_sfx.json --voz edit/cut.mp4 --so-plano
# 2) valendo
uv run --directory "<SKILL>" python helpers/corte_seco.py final.mp4 --pausa-max 0.15 --sfx plano_sfx.json \
    --voz edit/cut.mp4 --sem-grafismo final_so_grafismo.mp4 --saida final_seco.mp4
```

Opções:

- `--pausa-max 0.15`: silêncio que fica entre as frases. Suba pra 0.20 se ficar corrido demais.
- `--pausa-min 0.25`: só mexe em pausas a partir disso.
- `--inicio 0.08`: silêncio antes da primeira palavra.
- `--cortar 41.06-41.76,50.2-51.0`: trechos que saem de qualquer jeito (tempos do vídeo de entrada). Para tomada repetida escondida: a transcrição às vezes junta duas tomadas numa palavra só (palavra longa demais, duas rajadas de voz com silêncio no meio). Ache os tempos na onda, corte a primeira tomada e deixe a última.
- `--limiar -42`: força o nível de silêncio (o padrão é medido no vídeo: 30 dB abaixo da fala).
- `--crf 16`: qualidade da imagem.

O vídeo de entrada nunca é alterado. A saída padrão é `<video>_seco.mp4`.

## Ler o resultado

O script mostra cada pausa cortada (quanto saiu, quanto sobrou) e as pausas que ficaram, com o motivo. No fim ele confere tudo sozinho:

- **duração** da imagem e do som, que têm que bater com o esperado;
- **imagem**: cada quadro da saída comparado com o quadro certo da entrada ("1657 de 1657 quadros no lugar certo");
- **som**: cada trecho comparado com a entrada ("desvio máximo 0,1 ms"). Acima de 5 ms é voz escorregando: não entregue;
- **volume**: -14 LUFS, pico real até -1 dBTP;
- **pausas que sobraram** acima de 0,22 s: em geral são pausas com efeito sonoro no meio ou consoante fraca na borda.

Se aparecer "ATENÇÃO", leia o aviso e não entregue sem conferir.

O relatório `SAIDA.corte.json` tem os cortes e o **mapa de tempo** (`mapa`: início na entrada, fim na entrada, início na saída), pra converter qualquer tempo do vídeo antigo pro novo.

## Depois

- Assista aos trechos que o script marcou como pausa mantida e a 2 ou 3 emendas. Mande à pessoa só o vídeo, com uma linha: "tirei X pausas, o vídeo foi de A pra B segundos".
- Trilha agora: `references/som-e-trilha.md`, `helpers/mixar_trilha.py` no vídeo seco.
- Se alguma emenda ficou visível (pulo de imagem), um whoosh ou pop forçado em cima disfarça (`plano_sfx.py` com `"forcar": true` e `--aplicar`).

## Como falar com a pessoa

- "Vou tirar os espaços que ficaram entre as frases, deixando só um respiro curtinho. A legenda e as animações continuam no lugar."
- Se ela achar corrido demais: `--pausa-max 0.20`. Se achar que ainda sobrou espaço: confira no relatório as pausas mantidas e o motivo antes de apertar mais.
- Se a pausa que incomoda está no meio de uma animação longa, explique em uma frase e ofereça as duas saídas: deixar essa pausa ou re-cortar e renderizar de novo.

## Pegadinhas conhecidas

- **Trilha antes do corte**: a música pula em cada emenda e as pausas somem no meio dela. Sempre corte seco primeiro, trilha depois.
- **Consoante fraca no começo da palavra** ("S" de "Só", "F"): o limiar pega a vogal e morderia a consoante. O script anda até 0,12 s pra trás enquanto ainda tem som fraco e protege esse trecho.
- **Micro pausa dentro da frase** (menos de 0,25 s): não mexe. Cortar ali come consoante.
- **Cauda de efeito sonoro** pode ser cortada (a emenda tem micro fade de 8 ms). O **ataque** nunca.
- **Tomada repetida escondida**: palavra longa demais na transcrição ou uma rajada de voz com uma palavra só. Ouça antes de entregar e use `--cortar`.
- O áudio é cortado por amostra e a imagem por quadro, nos mesmos instantes. Por isso a voz não escorrega, mesmo com dezenas de cortes.

Como o script decide cada corte, em detalhe: `references/corte-seco-como-funciona.md`.
