Communitygithub.com

rough-cut: corte inicial sem gordura

Remove pausas, hesitações e repetições de gravações de fala. Transforma o vídeo bruto em um primeiro corte enxuto, mantendo apenas as tomadas boas, e verifica o resultado escutando o áudio novamente. Use quando o usuário disser "corte inicial", "primeiro corte", "corte as pausas", "remova os 'ã's", "corte as retomadas", "deixe rápido" ou entregar a gravação bruta para editar.

O que é rough-cut: corte inicial sem gordura?

O skill **Rough Cut** automatiza o processo de montagem e corte bruto de vídeos de fala, convertendo horas de gravação bruta em um corte limpo e direto. Ele transcreve o áudio palavra por palavra, identifica e remove automaticamente pausas, hesitações ("ã", "ah"), repetições, retomadas múltiplas e falsos começos, mantendo sempre a última tomada boa de cada fala. Além disso, ele ajusta os cortes nos pontos exatos de início e fim da voz, e verifica o render escutando o áudio novamente para garantir que nenhuma palavra foi cortada e que não há vazamentos de ruídos. O skill funciona em qualquer hardware (Apple Silicon com mlx-whisper, demais com faster-whisper) e cria um relatório detalhado de cada corte, permitindo ajustes manuais no julgamento final (escolha da melhor tomada, pausas intencionais, etc.). É ideal para criadores de conteúdo, editores de vídeo e qualquer pessoa que precise transformar rapidamente gravações de fala em versões polidas para próximas etapas de pós-produção.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/dotslashsimran/simcraft/tree/HEAD/skills/rough-cut

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Rough cut: corte inicial sem gordura

Editores chamam isso de montagem e corte bruto. Cada linha utilizável entra, na ordem, e tudo que não merece seu lugar sai. Não é o vídeo finalizado. É a versão onde cada segundo é o falante dizendo a linha bem, para que os passes posteriores (ritmo, cor, gráficos, som) trabalhem em material de qualidade.

A ideia por trás disso: edite as palavras, não a forma de onda. Obtenha uma transcrição onde cada palavra tenha um horário de início e fim, decida o que manter lendo, e os cortes seguem as marcações. Descript e a edição baseada em texto no Premiere e Resolve funcionam assim. Este skill adiciona duas coisas que eles não fazem: ele encaixa cada corte no som real, e verifica a renderização escutando novamente.

Configuração (uma vez)

sh ~/simcraft/skills/rough-cut/setup.sh

Cria .venv ao lado deste arquivo com Whisper (mlx-whisper no Apple Silicon, faster-whisper nos outros). Precisa do ffmpeg: ffmpeg no PATH, ou $FFMPEG, ou ~/neatlogs-motion/ffmpeg. Execute cada script abaixo com ~/simcraft/skills/rough-cut/.venv/bin/python.

Espaço de trabalho

Uma pasta por vídeo. Se o usuário não criou uma, crie ~/Movies/edits/YYYY-MM-DD-<slug>/ e copie (nunca mova) os arquivos brutos para raw/. Scripts escrevem audio/, cuts/ e renders/ ao lado dela. Nada em raw/ é alterado.

O passe, em ordem

1. Transcrever

python scripts/transcribe.py <workspace> [--lang en]

Escreve audio/words.json (cada palavra: início, fim, texto, confiança) e audio/transcript.txt (uma linha por tomada). Cerca de 1 minuto para cada 2 minutos de gravação em um Mac da série M.

Passe --lang en quando for inglês (mais preciso). Deixe sem para fala mista Hindi/Inglês.

Como mantém a precisão (cada um corrige uma falha que encontramos em gravações reais):

  • Cada tomada é transcrita individualmente. O áudio é dividido em cada pausa de 0,5s ou mais. Transcrever o arquivo inteiro de uma vez faz o Whisper escrever uma linha dita cinco vezes apenas uma, então as tomadas extras não têm palavras e não podem ser cortadas.
  • Os preenchimentos são mantidos na transcrição. Whisper remove "ã" e "ah" por padrão. Um prompt cheio de hesitações os traz de volta para que possam ser cortados.
  • Loops de transcrição são descartados. Whisper às vezes repete uma frase dezenas de vezes sobre ruído ("lá vai você lá vai você..."). Mais de 7 palavras por segundo é impossível, então essas linhas são descartadas.

2. Encontrar os cortes

python scripts/find_cuts.py <workspace> [--gap 0.35] [--keep-fillers]

Escreve cuts/edl.json (trechos a manter, em ordem) e cuts/cut_sheet.md (cada corte e o motivo, além de palavras de baixa confiança para verificar).

CorteRegra
SilêncioQualquer pausa maior que --gap (0,35 s). Silêncio no início e fim também.
Preenchimentosã, ah, hmm, mm, ah.
RepetiçõesUma palavra ou trecho de até 4 palavras dito duas vezes seguidas ("então o então o"): mantém o segundo.
RetomadasA mesma linha dita novamente em até 20s, combinada por letras para que falhas de audição ainda correspondam ("Vanta" / "Wanda", "1" / "um"): mantém a última tomada.
Falsos começosUma linha abandonada no meio e depois dita por completo ("Um negócio de 300 bilhões." e depois "Um negócio de 300 milhões de dólares.").
Mesmo finalUma linha reformulada no início mas terminando da mesma forma ("Isso é, é o próprio fundador da Vanta" e depois "E não sou eu dizendo, é o próprio fundador da Vanta").
Palavras fantasmaUma palavra isolada sem voz por baixo. Whisper as inventa em silêncio ("Obrigado.", "aleluias").

Onde cada corte cai:

  • Cada borda é encaixada no ponto onde a voz realmente começa e termina, medido a partir da intensidade em passos de 10ms com um limite que se adapta ao ambiente. Os tempos de palavra do Whisper podem estar errados em 0,1–0,3 s.
  • Uma borda só se move para mais tarde em até 0,12 s, porque cortar uma palavra é pior do que manter uma respiração.
  • 0,06 s de ambiente são deixados antes da voz e 0,10 s depois.
  • Quando não há pausa real, como um "ã" colado na próxima palavra, o corte vai no ponto mais silencioso de 10ms entre elas.
  • Uma pausa escondida dentro de uma "palavra" longa do Whisper ainda é encontrada e cortada.

3. Passagem de julgamento (a edição real, nunca pule)

Leia cuts/cut_sheet.md ao lado de audio/transcript.txt e corrija cuts/edl.json manualmente. Um script não pode julgar estes:

  • Qual tomada é melhor. A última tomada é mantida por padrão, mas a melhor é a que tem energia, final limpo e sem risada quebrando. Às vezes a primeira metade de uma tomada mais o fim de outra é o melhor.
  • Preenchimentos que fazem parte da piada. Um "ã" deliberado antes da piada permanece.
  • "tipo", "sabe", "quer dizer", "basicamente". Nunca são cortados automaticamente. Corte apenas os que são pura enrolação. Cortar todos eles faz o falante soar diferente de si mesmo.
  • Pausas que são tempo. Uma pausa antes de uma piada, uma reação ou um olhar para a câmera permanece. Nem todo silêncio é ar morto.
  • Dizer o mesmo ponto duas vezes com palavras diferentes. Corte frases inteiras.
  • Momentos não-falados, como uma música, uma piada visual ou um take de reação. Apenas a fala é mantida, então adicione esses trechos manualmente.
  • Ordem. Os trechos seguem a ordem dos arquivos. Mova a linha mais forte para o topo para uma abertura a frio, se o usuário quiser.
  • A lista "verifique estas palavras". Baixa confiança geralmente significa murmúrio. Se a linha não estiver clara, procure uma tomada mais limpa.

Cada trecho é {"clip", "in", "out", "text"}, e "speed" é opcional. Mantenha cortes entre palavras.

4. Ritmo (pergunte primeiro)

A folha de corte relata palavras por segundo. Conteúdo de fala rápida fica em torno de 3,3–3,8. Se o falante for mais lento, sugira uma velocidade de 1,05–1,2 e defina "speed" no edl.json para o vídeo inteiro, ou por trecho. O tom permanece o mesmo. Nunca acelere música ou reações.

5. Renderização de visualização

python scripts/render.py <workspace> --w 854 --v 1 [--aspect 9:16]

Uma visualização em 480p vai para renders/v1_854.mp4. Aumente --v para cada rodada de anotações para que versões antigas sejam mantidas.

  • Cada trecho é renderizado com contagem exata de quadros e áudio sem compactação, depois todos os trechos são unidos por decodificação. Uniões por cópia de stream perdem quadros nos cortes e o áudio derrapa cerca de 2s ao longo de alguns minutos.
  • Cada trecho recebe um fade in de 12ms e um fade out de 20ms, para que os cortes não estalem.
  • Clipes com formato diferente ficam sobre uma cópia desfocada de si mesmos, em vez de barras pretas.

6. Verificar (sempre, antes de mostrar ao usuário)

python scripts/verify.py <workspace> --v 1 [--lang en]

Ele escuta a renderização novamente, trecho por trecho, compara com a lista de cortes e escreve cuts/verify_v1.md. O relatório tem quatro seções:

  • Cortes que caem enquanto a voz ainda está rolando: um teste de som que não depende do Whisper. Este é o verdadeiro detector de palavras cortadas. Corrija cada um movendo essa borda no edl.json.
  • Palavras ausentes: esperadas mas não ouvidas.
  • Palavras inesperadas: um preenchimento ou um pedaço de retomada vazando.
  • Desentendimentos: as duas transcrições discordam na redação. Geralmente é murmúrio, não um problema de corte.

Em áudio limpo, o alvo é 100% das palavras presentes, 0 cortes dentro do som e 0 palavras inesperadas. Áudio ruidoso ou murmurando dá alguns pares ausente/inesperado que são na verdade desentendimentos. Confie no teste de som sobre eles.

Corrija o que ele encontrar, renderize novamente e verifique novamente.

7. Mostrar ao usuário, depois o final

  • Diga ao usuário: o comprimento antes e depois, o número de cortes, o resultado da verificação e quaisquer decisões de julgamento que você tomou (qual tomada manteve, uma pausa que manteve de propósito).
  • Anote as observações deles antes de fazer a próxima versão.
  • Só depois que eles aprovarem a visualização: python scripts/render.py <workspace> --w <largura da fonte> --v N.

Resultados em gravações reais

Em 3 minutos de gravação bruta de fala com muitas retomadas (9 tomadas de uma linha, 4 de outra), 2:55 de fala se tornaram 0:36. Manteve a última tomada limpa de cada linha, e a verificação encontrou 100% das palavras presentes, 0 cortes dentro do som e 0 vazamentos.

O gosto do usuário

  • Rápido. Cortes abruptos em lacunas de palavras são bons; zooms alternados constantes de aproximação não são.
  • Mantenha palavrões, brincadeiras e partes engraçadas. Nunca limpe a personalidade.
  • Sem swishes e sem correção de cor nesta fase.
  • Quando o usuário pedir "apenas as partes boas, no máximo X minutos", corte momentos inteiros, não apenas pausas.

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

dotslashsimran/clean-audio

Clean up voice audio in a video: rumble, electrical hum, background noise and hiss, muddy or harsh tone, sharp S sounds, uneven volume, and loudness for YouTube/Instagram/TikTok. Measures the audio first, picks the strongest cleanup that doesn't make the words less clear, and keeps lip sync exact. Use when the user says "clean up the audio", "fix the sound", "remove background noise", "remove hum", "my audio is too quiet/loud", "make it sound better", or after a rough cut.

dotslashsimran/image-gen

Generate images with the user's own API keys (Google Gemini "Nano Banana" or OpenAI gpt-image). Use when asked to generate, create or make an image, illustration, icon, cut-out, sticker, thumbnail, texture, mockup or visual asset, to edit an image, or to make several images that stay consistent (same character or object). Also used by the vox-explainer skill for collage cut-outs.

dotslashsimran/perspective-illusion

Make a looping illustrated 3D video that plays with perception, the way Japanese illusion artists do (e.g. @garments__): a scene squashed flat by a telephoto lens morphs into deep perspective, things that looked side by side turn out to be at different depths, and objects quietly swap position while the view is flat. Also for recreating a reference illusion video, or a new scene (street, supermarket, station, room) in that style. Use when asked for a perspective/optical-illusion video, a "dolly zoom" or "flat to 3D" effect, or to recreate one of these clips.

Habilidades Relacionadas