Revisão do processo de edição — 14/10/2026
Escrito a pedido dele, depois de os 6 reels da Dani serem reprovados por inteiro e de ele dizer: "estou tendo muito problema com sua edição de vídeo, vc n segue as alterações que passo" e "o problema não é só cor, mas a própria edição, cortar silêncios, cortar pessoas falando de fundo, fazer os cortes direitos sem cortar palavras q estão sendo ditas, tudo isso que eu já venho reclamando".
Este documento tem três partes: o que eu errei (com a evidência da sessão), o que a pesquisa achou (testado, não listado) e o processo novo.
PARTE 1 — O que eu errei
Não é um erro, é um padrão. Os seis reels foram reprovados por nove motivos, e oito deles têm a mesma origem.
O padrão: eu meço o que é fácil e invento o que é difícil
| O que ele reprovou | O que eu tinha feito | O que eu deveria ter medido |
|---|---|---|
| "a cor está bem feia" | escolhi temperature=5300 porque "pareceu bom" |
o ponto branco das refs. Quando medi (depois), estava 3 a 7× mais amarelo: R−B +47,6 contra +1,8…+14,1 das refs |
| "não é para deixar a voz de fundo" | calculei o ganho da trilha e não conferi o resultado | a separação voz/música no arquivo pronto: 5,8–9,0 dB contra 8,0–12,7 das refs |
| "siga a mesma legenda da referência, até a fonte" | medi 40px e usei 54 porque achei que "lê melhor" | nada. A medida estava certa e eu a descartei |
| "n entendi essa edição, ta fazendo umas inserções aleatórias" | inventei alternância de enquadramento a cada emenda | as refs não têm isso |
| "segue as referências de motion" | inventei um pop de 110 ms na legenda corrida | a ref: a corrida não anima, e o destaque é máquina de escrever a 50 ms/caractere |
| "centraliza o vídeo" | centralizei no meio do quadro | a posição do rosto dela: o R1 estava 238px fora |
| "os cortes da voz" | usei o timestamp do Whisper como borda | a energia. Cinco cortes partiam palavra ou traziam a tentativa descartada |
Oito dos nove são a mesma coisa: existia uma medida possível e eu escolhi um número.
Isso já está escrito no CLAUDE.md desde 12/08 — "eu troco o que ele julga por um número que
eu consigo calcular" — e eu repeti assim mesmo.
O segundo erro: validei tarde
Renderizei seis reels completos antes de mostrar qualquer coisa. Cada rodada de ajuste custou de 8 a 15 minutos de render. Para descobrir que a legenda estava no corpo errado eu não precisava de um mp4 — precisava de um frame.
Contagem desta sessão: 9 rodadas de render completo, quase todas para ajustar um parâmetro que um frame teria respondido.
O terceiro erro: a decupagem foi feita no escuro
É o que ele mais reclama, e é onde eu tinha menos instrumento.
- Usei o
transcrever.pycomvad_filter=True, contra a regra escrita da casa. O VAD pendurou 4,3s de silêncio dentro da palavra "vida" e escondeu uma leitura inteira ("sem burocracia" virou "sem confusão"). - Troquei pelo MLX sem VAD. Ele alucinou — "seu colégio" 27 vezes no take 894, "이" 20 vezes no 897 — e eu refinei bordas de corte em cima de timestamps inventados.
- Em nenhum momento tive uma medida de quem está falando. A direção fala dentro dos takes ("fala de novo", "não encosta, tá?", "pode ser") e a única defesa que eu tinha era ler a transcrição e cortar na mão.
PARTE 2 — O que a pesquisa achou (testado, não listado)
Instalei e rodei cada ferramenta no material real da Dani. O que não passou no teste está marcado como reprovado — vale tanto quanto o que passou.
✅ WhisperX — alinhamento forçado (resolve o problema nº 1)
github.com/m-bain/whisperX · BSD-4
Transcreve com faster-whisper e depois alinha cada palavra com um modelo wav2vec2. A borda da palavra deixa de ser um palpite do Whisper e passa a ser o resultado de um alinhamento acústico. É exatamente o remédio para "cortar sem cortar palavras q estão sendo ditas".
Traz também diarização (pyannote) — rotula quem fala em cada trecho. É o remédio para "pessoas falando de fundo": a direção vira um locutor diferente e sai do corte por medida, não por eu ler a transcrição e decidir.
Testado no take 894, o que me custou duas rodadas de retrabalho:
| com VAD (o que eu usei) | sem VAD / MLX | WhisperX alinhado | |
|---|---|---|---|
| a palavra "vida" | 4,30s (silêncio pendurado dentro dela) | — | 0,28s ✅ |
| as 3 leituras de "montamos um plano" | o VAD escondeu duas | alucinou "seu colégio" 27× | 124,60 · 129,96 · 134,16, limpas ✅ |
| duração mediana de palavra | — | — | 0,200s (realista) |
| palavras com mais de 1,5s | várias | várias | 2 de 344 |
Isso é a prova: o defeito que me obrigou a transcrever trechos isolados na mão, um a um, o alinhamento forçado resolve na origem.
⚠️ O custo, medido no mesmo teste: neste Mac, em CPU, o take de 2min35 levou 169s de transcrição + 843s de alinhamento — cerca de 17 minutos para um take, mais de uma hora para os nove da Dani. Isso não derruba a ferramenta, mas define onde ela entra: alinhamento forçado não é para varrer o material inteiro, é para os blocos onde a borda do corte importa. A varredura segue no faster-whisper rápido; o alinhamento roda só nos trechos escolhidos.
✅ auto-editor — corte de silêncio com saída pro editor
auto-editor.com · testado no take 894
Achou os trechos silenciosos e exportou .xml do Premiere e .fcpxml do Resolve. Isso muda
a entrega: em vez de você receber um mp4 fechado que só dá pra aprovar ou reprovar, você recebe
a timeline decupada pra abrir e ajustar.
⚠️ Ele corta silêncio e só. Não sabe quem fala nem qual leitura é a boa — essas duas continuam sendo decisão, e é por isso que ele entra como primeira camada, não como solução.
✅ PySceneDetect — mede o ritmo da referência
Rodado nas 6 refs: plano mediano de 1,50 a 4,83s. ⚠️ Mas essa régua não vale para estes vídeos: as refs são b-roll puro e ele confirmou que "esses vídeos em si não precisam de brolls". Fica registrado para quando houver b-roll.
❌ color-matcher — REPROVADO no teste
github.com/hahnec/color-matcher · testado e descartado
Transfere a cor de uma imagem de referência para outra (reinhard, mkl, mvgd, hm). Parecia
a resposta para a cor. Não é. Ele copia a cor da cena da referência, não o look: a ref é
ela de vermelho num átrio de vidro, o take é ela de branco num sofá — o reinhard deixou a pele
acinzentada e o hm-mvgd-hm deixou verde e laranja. A calibração por ponto branco, na mão,
ficou melhor. Fica a lição: ferramenta open-source não entra por ser open-source, entra por
passar no teste.
❌ PyonFX — não instala neste Mac
Biblioteca de efeitos ASS. Depende de pycairo, que precisa do cairo nativo, e este Mac não tem
Homebrew. A digitação do destaque foi feita em ASS puro e funciona — não precisa dela.
🔴 video-use — o achado principal
github.com/browser-use/video-use · MIT · clonado e lido
Uma skill de Claude Code para editar vídeo, aberta, feita pelo time do browser-use. Não é uma biblioteca: é o processo inteiro, e as regras duras dele são, uma por uma, as lições que eu aprendi apanhando nesta sessão. Três delas eu ainda estava fazendo errado:
| Regra dura deles | O que eu fazia |
|---|---|
| Fade de 30 ms em TODA emenda | eu só punha fade quando o vão era < 0,25s. É por isso que sobrava um "tá" fantasma na emenda do R3 — o pop do corte |
| Nunca cortar dentro de palavra; borda sempre em word boundary, com pad de 30–200 ms porque o ASR deriva 50–100 ms | eu usava o timestamp do Whisper direto. Cinco cortes partiram palavra |
| ASR word-level verbatim, nunca phrase-level, nunca filler normalizado — "perde o sinal editorial" | eu lia a transcrição em frases e perdia exatamente o sinal das repetições |
| Silêncio ≥ 400 ms é o corte limpo; 150–400 ms só com conferência visual; < 150 ms é inseguro | minha régua era 250 ms, ou seja, na zona que eles mandam conferir |
| Confirmar a estratégia em português claro antes de tocar no corte | eu montei seis reels e mostrei no fim |
| Auto-avaliação no arquivo renderizado, olhando cada emenda numa janela de ±1,5s | eu conferia transcrevendo o vídeo todo |
| Um sub-agente crítico para qualquer peça que vai ser publicada, instruído a "roast, not praise" | não existia |
E a ferramenta que me faltava: timeline_view.py — dado um vídeo e um intervalo, gera uma
tira de frames com a forma de onda embaixo, as palavras rotuladas e os silêncios sombreados.
É isso que permite olhar uma emenda em vez de adivinhar. É o oposto do que eu vinha fazendo:
renderizar o filme inteiro para descobrir que um parâmetro estava errado.
⚠️ Ele transcreve via ElevenLabs Scribe (pago, por API). O fork freecut troca por Whisper local. Aqui a troca natural é WhisperX, que já está instalado e dá alinhamento forçado + diarização sem sair da máquina.
📋 Avaliado, não testado ainda
| Ferramenta | Para quê | Por que ainda não |
|---|---|---|
| OpenTimelineIO | timeline como dado, troca com Resolve/Premiere | o auto-editor já exporta nos dois formatos; OTIO entra se precisar de algo mais fino |
| stable-ts | timestamps com supressão de silêncio por Silero | o WhisperX cobre o mesmo com alinhamento mais forte |
| Hush (Apache 2.0) | suprimir vozes de fundo mantendo o locutor | é a camada de áudio depois da diarização, se a direção vazar por cima da fala dela |
| davinci-resolve-mcp (MIT) | controlar o Resolve por MCP em vez dos meus scripts | trocaria montar_*_resolve.py por chamadas diretas; vale testar na próxima timeline |
| loudcheck · eko/qc | portão de entrega automático (loudness, preto, barras, fase) | o nosso portão hoje é manual |
| AutoCut Repeat · Descript · FireCut | agrupar as repetições de uma mesma frase | são pagos e fechados — mas o padrão deles é o que importa (ver Parte 3) |
PARTE 3 — O processo novo
3.1 🔴 A regra que faltava
Se dá para medir, mede. Se não dá para medir, pergunta. Nunca escolhe.
Já existe no CLAUDE.md em três formas diferentes e eu violei as três. A diferença agora é que
ela vira checklist executável, não lembrete.
3.2 O portão de referência — antes de montar, não depois
Nenhum frame é renderizado antes de a referência estar medida por inteiro, numa tabela, com o número e de onde saiu:
| Dimensão | O que medir | Como |
|---|---|---|
| formato | proporção, fps, resolução | ffprobe |
| legenda corrida | corpo (% da altura), fonte, cor, posição, caixa, palavras por bloco | OCR Apple Vision quadro a quadro |
| destaque | corpo, fonte, cor, posição, como entra | OCR quadro a quadro — foi assim que achei a máquina de escrever |
| cor | ponto branco (R−B), saturação, luma, preto | percentil 99 da luminância |
| som | separação voz/fundo | RMS em janela de 50 ms |
| ritmo | duração de plano | PySceneDetect |
Sem essa tabela preenchida, a montagem não começa. Foi a falta dela que gerou sete dos nove pontos de reprovação.
3.3 O portão de amostra — 10 segundos antes do lote
A pesquisa de human-in-the-loop diz a mesma coisa que o bom senso: o checkpoint vale no último momento barato, antes de o esforço se multiplicar.
Regra nova: nunca mais seis reels de uma vez. Um trecho de ~10s do primeiro, você aprova o estilo, e só então o lote. Se eu tivesse feito isso, a reprovação teria custado 1 render em vez de 12.
3.4 🔴 A decupagem deixa de ser cega — é o centro de tudo
É o que ele mais reclama ("cortar silêncios, cortar pessoas falando de fundo, fazer os cortes direitos sem cortar palavras") e era onde eu tinha menos instrumento. Ordem nova, cada passo com uma medida:
- WhisperX transcreve e alinha palavra a palavra (wav2vec2). A borda deixa de ser palpite do Whisper. Medido: a palavra que o VAD esticava por 4,30s passa a medir 0,28s.
- Diarização separa a voz dela da voz da direção. Tudo que não é ela sai por medida, não porque eu li a transcrição e achei que era o Luan falando.
- Repetições agrupadas — e eu NÃO escolho sozinho. Quando a mesma frase aparece 2, 3, 4 vezes, monto a lista com cada tentativa e o tempo dela, e você escolhe. É o que as ferramentas do mercado fazem (FireCut lista e deixa o editor escolher), e é exatamente a decisão que eu vinha tomando no escuro — e errando.
- A borda do corte, com as réguas do video-use somadas às nossas:
- cai sempre em fronteira de palavra do alinhamento forçado, nunca no meio
- pad de 30–200 ms em cada ponta (o ASR deriva 50–100 ms; os nossos 120/150 ms ficam na faixa)
- alvo preferencial: silêncio ≥ 400 ms. Entre 150 e 400 ms só com conferência visual. Abaixo de 150 ms é inseguro — era a minha régua de 250 ms sem conferência
- fade de 30 ms em TODA emenda, não só nas apertadas. É o que elimina o pop do corte
- Conferir a emenda OLHANDO, com
timeline_viewno arquivo renderizado, janela de ±1,5s em cada corte: frames em cima, forma de onda embaixo, palavras rotuladas. Testado e funciona. - Conferência de texto no áudio montado, antes de o vídeo existir.
3.5 Um crítico antes de você ver
Para qualquer peça que vai ser publicada, um sub-agente recebe o arquivo pronto, o plano de corte e as suas referências, com a instrução de procurar defeito, não elogiar: veredito, problemas ranqueados com timecode e evidência, e as cinco correções mais urgentes. Olho novo pega o que o autor parou de enxergar — foi o que faltou nos seis reels.
3.6 A entrega muda de forma
Hoje eu entrego um mp4 fechado: você só pode aprovar ou reprovar inteiro. Com o auto-editor
exportando .fcpxml, posso te entregar a timeline decupada pro Resolve — você abre, mexe no
que quiser, e o que eu errei você conserta em 30 segundos em vez de me devolver pra outra rodada.
3.7 Validar em frame, não em render
Nenhum parâmetro visual se ajusta renderizando o vídeo inteiro. Frame único para cor, legenda, posição e tipografia; trecho de 10s para ritmo e som. O render completo é só o último passo.
3.8 O que vira arquivo
| Arquivo | O que muda |
|---|---|
.claude/skills/decupagem-medida/ |
skill nova: WhisperX + diarização + repetições agrupadas + borda por alinhamento forçado |
.tools/timeline_view.py |
adotar do video-use (MIT): filmstrip + onda + palavras. É o instrumento de conferir emenda |
.tools/ |
adotar as 12 regras duras do video-use como regras da casa — oito já eram nossas, aprendidas apanhando |
.tools/medir_referencia.py |
promover o medir.py da aula-do-lucas a ferramenta da casa, com a tabela do 3.2 inteira |
.tools/transcrever.py |
o default passa a ser --sem-vad; o VAD vira exceção declarada |
clientes/dani-pod-prosperar/padrao-edicao.md |
✅ já atualizado com cor, legenda, som e motion medidos |
CLAUDE.md |
o portão de referência e o portão de amostra entram em _contexto/portoes.md |
O que eu preciso de você
- A ordem das rodadas. Prefere receber a amostra de 10s, ou a timeline no Resolve pra mexer você mesmo?
- As repetições. Quando ela grava a mesma frase 4 vezes, você quer escolher qual entra, ou quer que eu escolha e te diga o critério?
- A régua da legenda. A medida da ref dá 40px (2,1% da altura). A prática de tráfego pago pede legenda grande e de alto contraste, porque o feed roda mudo. São conflitantes — e a referência é sua, então a palavra é sua.