findbene/skills

Skill de agente para edição profissional de vídeos baseada em transcrição de áudio, com foco em demonstrações de produtos e vídeos de lançamento.

O que é skills?

Este skill capacita um agente de IA (como Claude Code, Cursor ou Codex) a realizar edição de vídeo não linear de nível profissional, a partir de transcrições brutas de áudio. Em vez de depender de timelines visuais pesadas, o agente raciocina primeiro sobre a transcrição palavra-por-palavra (em formato `takes_packed.md`) e só consulta os quadros visuais nos momentos de decisão — seguindo o princípio de que "áudio é primário, visuais são secundários". O processo é altamente controlado por regras de produção rígidas (não negociáveis) que garantem correção técnica: legendas aplicadas por último na cadeia de filtros, fades de áudio de 30ms em cada corte, snap de cortes em limites de palavra, cache de transcrições, e paralelismo para animações. O skill suporta workflow em etapas: inventário, pré-varredura, conversa com o usuário para entender o conteúdo e estilo desejado, proposta de estratégia, execução (EDL + animações em subagentes + gradação), pré-visualização, autoavaliação em até 3 iterações, e iteração final. Inclui helpers Python para transcrição (Scribe), empacotamento de transcrições, visualização de timeline, renderização (ffmpeg, Manim) e gradação. É ideal para edição de vídeos de demonstração, tutoriais, entrevistas, documentários e muito mais.

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add findbene/skills

Installed? Explore more Programação e Desenvolvimento skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Perguntar na sua IA favorita

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

Documentação

Uso de Vídeo

Princípio

  1. O LLM raciocina a partir da transcrição bruta + recursos visuais sob demanda. O único artefato derivado que vale a pena manter é uma transcrição compactada a nível de frase (takes_packed.md). Todo o resto — marcação de preenchimentos, detecção de retomadas, classificação de planos, pontuação de ênfase — você deriva no momento da decisão. → verificar: a saída da etapa corresponde ao resultado esperado
  2. Áudio é primário, visuais seguem. Os candidatos a corte vêm de limites de fala e lacunas de silêncio. Aprofunde-se nos visuais apenas nos pontos de decisão. → verificar: a saída da etapa corresponde ao resultado esperado
  3. Pergunte → confirme → execute → itere → persista. Nunca toque no corte até que o usuário tenha confirmado a estratégia em inglês claro.
  4. Generalize. Não presuma que tipo de vídeo é este. Observe o material, pergunte ao usuário, depois edite. → verificar: diff corresponde à alteração pretendida
  5. Liberdade artística é o padrão. Todo valor específico, predefinição, fonte, cor, duração, estrutura de tom e técnica neste documento é um exemplo prático de um vídeo comprovado — não uma imposição. Leia-os para entender o que é possível e por que cada um funcionou. Depois, faça suas próprias escolhas de gosto com base no que o material realmente é e no que o usuário realmente quer. As únicas coisas que você DEVE fazer estão na seção Regras Rígidas abaixo. Todo o resto é seu. → verificar: o conteúdo do arquivo corresponde ao formato esperado
  6. Invente livremente. Se o material exigir uma técnica não descrita aqui — tela dividida, picture-in-picture, cartões de identificação no terço inferior, cortes de reação, rampas de velocidade, congelamento de quadro, crossfades, match cuts, L-cuts, J-cuts, rampas de velocidade sobre respiração, seja o que for — construa-a. Os ajudantes são ffmpeg e PIL. Eles podem fazer qualquer coisa que o formato suporte. Não espere permissão. → verificar: a saída da etapa corresponde ao resultado esperado
  7. Verifique sua própria saída antes de mostrá-la ao usuário. Se você não publicaria, não apresente.

Regras Rígidas (correção de produção — inegociáveis)

Estas são as coisas onde o desvio produz falhas silenciosas ou saídas quebradas. Não são gosto, são correção. Memorize-as.

  1. As legendas são aplicadas por ÚLTIMO na cadeia de filtros, depois de qualquer sobreposição. Caso contrário, as sobreposições escondem as legendas. Falha silenciosa. → verificar: a saída da etapa corresponde ao resultado esperado
  2. Extração por segmento → concatenação com -c copy sem perdas, não um filtergraph de passagem única. Caso contrário, você codifica novamente cada segmento quando as sobreposições são adicionadas.
  3. Fades de áudio de 30ms em cada limite de segmento (afade=t=in:st=0:d=0.03,afade=t=out:st={dur-0.03}:d=0.03). Caso contrário, estalos audíveis em cada corte. → verificar: a saída da etapa corresponde ao resultado esperado
  4. As sobreposições usam setpts=PTS-STARTPTS+T/TB para deslocar o quadro 0 da sobreposição para o início de sua janela. Caso contrário, você vê o meio da animação durante a janela de sobreposição. → verificar: a saída da etapa corresponde ao resultado esperado
  5. O SRT mestre usa offsets da timeline de saída: output_time = word.start - segment_start + segment_offset. Caso contrário, as legendas desalinham após a concatenação dos segmentos. → verificar: a saída da etapa corresponde ao resultado esperado
  6. Nunca corte dentro de uma palavra. Ajuste cada borda de corte a um limite de palavra da transcrição do Scribe. → verificar: a saída da etapa corresponde ao resultado esperado
  7. Acrescente margem a cada borda de corte. Janela de trabalho: 30–200ms. Os timestamps do Scribe têm deriva de 50–100ms — a margem absorve a deriva. Mais apertada para ritmo acelerado, mais folgada para cinematográfico. → verificar: a saída da etapa corresponde ao resultado esperado
  8. ASR palavra-por-palavra apenas. Nunca modo SRT/frase (perde dados de lacunas de submilissegundos). Nunca preenchimentos normalizados (perde sinal editorial). → verificar: diff corresponde à alteração pretendida
  9. Cacheie transcrições por fonte. Nunca retranscreva a menos que o próprio arquivo de origem tenha mudado. → verificar: a saída da etapa corresponde ao resultado esperado
  10. Subagentes paralelos para múltiplas animações. Nunca sequenciais. Inicie N de uma vez usando a ferramenta Agent; o tempo total de parede ≈ o mais lento. → verificar: a saída da etapa corresponde ao resultado esperado
  11. Confirmação da estratégia antes da execução. Nunca toque no corte até que o usuário tenha aprovado o plano em inglês claro. → verificar: a saída da etapa corresponde ao resultado esperado
  12. Todas as saídas da sessão em <videos_dir>/edit/. Nunca escreva dentro do diretório do projeto video-use/. → verificar: saída existe + é analisada sem erro

Todo o resto neste documento é um exemplo prático. Desvie sempre que o material assim o exigir.

Estrutura de diretórios

O skill reside em video-use/. A gravação do usuário fica onde ele a colocar. Todas as saídas da sessão vão para <videos_dir>/edit/.

<videos_dir>/
├── <arquivos de origem, intactos>
└── edit/
    ├── project.md               ← memória; anexado a cada sessão
    ├── takes_packed.md          ← transcrições a nível de frase, a principal visão de leitura do LLM
    ├── edl.json                 ← decisões de corte
    ├── transcripts/<name>.json  ← JSON do Scribe bruto em cache
    ├── animations/slot_<id>/    ← fonte + renderização + raciocínio por animação
    ├── clips_graded/            ← extrações por segmento com gradação + fades
    ├── master.srt               ← legendas na timeline de saída
    ├── downloads/               ← saídas do yt-dlp
    ├── verify/                  ← quadros de depuração / PNGs da timeline
    ├── preview.mp4
    └── final.mp4

Configuração

  • ELEVENLABS_API_KEY em .env na raiz do projeto ou no ambiente. Pergunte e escreva .env se estiver faltando.
  • ffmpeg + ffprobe no PATH.
  • Dependências Python: pip install -e ..
  • yt-dlp, manim, Remotion instalados apenas no primeiro uso.
  • Este skill fornece skills/manim-video/. Leia seu SKILL.md ao construir um slot do Manim.

Ajudantes

  • transcribe.py <video> — chamada Scribe para um arquivo. --num-speakers N opcional. Com cache.
  • transcribe_batch.py <videos_dir> — transcrição paralela com 4 workers. Use para múltiplas tomadas.
  • pack_transcripts.py --edit-dir <dir> — transcripts/*.json → takes_packed.md (nível de frase, quebra em silêncio ≥ 0.5s).
  • timeline_view.py <video> <start> <end> — tira de filme + forma de onda em PNG. Aprofundamento visual sob demanda. Não é uma ferramenta de varredura — use-a nos pontos de decisão, não constantemente.
  • render.py <edl.json> -o <out> — extração por segmento → concatenação → sobreposições (com deslocamento PTS) → legendas por ÚLTIMO. --preview para 720p rápido. --build-subtitles para gerar master.srt inline.
  • grade.py <in> -o <out> — cadeia de filtros ffmpeg para gradação. Predefinições + --filter '<raw>' para personalizado.

Para animações, crie <edit>/animations/slot_<id>/ com Bash e inicie um subagente usando a ferramenta Agent.

O processo

  1. Inventário. ffprobe em cada fonte. transcribe_batch.py no diretório. pack_transcripts.py para produzir takes_packed.md. Amostre um ou dois timeline_views para uma primeira impressão visual. → verificar: a saída da etapa corresponde ao resultado esperado

  2. Pré-varredura de problemas. Uma passada por takes_packed.md para anotar deslizes verbais, erros de fala óbvios ou frases a evitar. Lista simples, alimenta o resumo do editor. → verificar: a saída da etapa corresponde ao resultado esperado

  3. Converse. Descreva o que você vê em português claro. Faça perguntas moldadas pelo material. Colete: tipo de conteúdo, duração/proporção alvo, direção estética/de marca, sensação de ritmo, momentos a preservar, momentos a cortar, preferências de animação e gradação, necessidades de legenda. Não use uma lista de verificação fixa — as perguntas certas são diferentes a cada vez. → verificar: todos os testes passam

  4. Propor estratégia. 4–8 frases: forma, escolhas de tomada, direção de corte, plano de animação, direção de gradação, estilo de legenda, estimativa de duração. Aguarde confirmação. → verificar: a saída da etapa corresponde ao resultado esperado

  5. Execute. Produza edl.json através do resumo do subagente editor. Aprofunde-se em timeline_view em momentos ambíguos. Construa animações em subagentes paralelos. Aplique gradação por segmento. Compose via render.py. → verificar: código de saída do comando 0

  6. Pré-visualização. render.py --preview. → verificar: a saída da etapa corresponde ao resultado esperado

  7. Autoavaliação (antes de mostrar ao usuário). Execute timeline_view na saída renderizada (não nas fontes) em cada limite de corte (±1.5s de janela). Verifique cada imagem para: → verificar: código de saída do comando 0

    • Descontinuidade visual / flash / pulo no corte
    • Pico na forma de onda no limite (estalo de áudio que escapou do fade de 30ms)
    • Legenda escondida atrás de uma sobreposição (violação da Regra 1)
    • Sobreposição desalinhada ou mostrando quadros errados (violação da Regra 4)

    Também amostre: primeiros 2s, últimos 2s, e 2–3 pontos médios — verifique consistência da gradação, legibilidade das legendas, coerência geral. Execute ffprobe na saída para verificar se a duração corresponde à expectativa do EDL.

    Se algo falhar: corrija → re-renderize → re-avalie. Limite em 3 passadas de autoavaliação — se os problemas persistirem após 3, sinalize-os ao usuário em vez de entrar em loop infinito. Apresente a pré-visualização apenas quando a autoavaliação passar.

  8. Itere + persista. Feedback em linguagem natural, replaneje, re-renderize. Nunca retranscreva. Renderização final após confirmação. Anexe a project.md. → verificar: a saída da etapa corresponde ao resultado esperado

Técnicas de corte

  • Áudio primeiro. Cortes candidatos a partir de limites de palavra e lacunas de silêncio.
  • Preserve picos. Risadas, punchlines, batidas de ênfase. Estenda após punchlines para incluir reações — a risada É a batida.
  • Transições de locutor se beneficiam de ar entre as falas. Valores comuns: 400–600ms. Menos para ritmo acelerado, mais para cinematográfico. Decisão de gosto.
  • Eventos de áudio como sinais. (risos), (suspiros), (aplausos) marcam batidas. Estenda além deles.
  • Lacunas de silêncio são candidatos a corte. Silêncios ≥400ms geralmente são os mais limpos. Limites de frase de 150–400ms são utilizáveis com verificação visual. <150ms é inseguro (meio da frase).
  • Exemplo de margem de corte (o vídeo de lançamento enviado com este): 50ms antes da primeira palavra mantida, 80ms após a última. Mais apertado para energia de montagem, mais folgado para documentário. Permaneça na janela de trabalho de 30–200ms (Regra Rígida 7).
  • Nunca raciocine áudio e vídeo de forma independente. Cada corte deve funcionar em ambas as trilhas.

A transcrição compactada (principal visão de leitura)

pack_transcripts.py lê todos os transcripts/*.json e produz um arquivo markdown onde cada tomada é uma lista de linhas a nível de frase, cada uma prefixada com seu intervalo de tempo [início-fim]. As frases quebram em qualquer silêncio ≥ 0.5s OU mudança de locutor. Este é o artefato que o subagente editor lê para escolher cortes — ele fornece precisão de limite de palavra a partir do texto sozinho com 1/10 dos tokens do JSON bruto.

Exemplo de linha:

## C0103  (duração: 43.0s, 8 frases)
  [002.52-005.36] S0 Noventa por cento do que um agente web faz é completamente desperdiçado.
  [006.08-006.74] S0 Nós corrigimos isso.

Resumo do subagente editor (para seleção de múltiplas tomadas)

Quando a tarefa é "escolher a melhor tomada de cada batida em vários clipes", inicie um subagente dedicado com um resumo moldado como este. A estrutura é essencial; o exemplo de formato de apresentação não é.

Você está editando um vídeo de <tipo>. Escolha a melhor tomada de cada batida e
monte-as cronologicamente por batida, não pela ordem dos clipes de origem.

ENTRADAS:
  - takes_packed.md (transcrições a nível de frase com anotações de tempo de todas as tomadas)
  - Contexto do produto/narrativa: <2 frases do usuário>
  - Locutor(es): <nome, função, nota sobre estilo de entrega>
  - Estrutura esperada: <escolha um arquétipo ou invente um>
  - Deslizes verbais a evitar: <lista da passagem de pré-varredura>
  - Tempo de execução alvo: <segundos>

Arquétipos estruturais comuns (escolha, adapte ou invente):
  - Lançamento de tecnologia / demonstração: GANCHO → PROBLEMA → SOLUÇÃO → BENEFÍCIO → EXEMPLO → CTA
  - Tutorial: INTRODUÇÃO → CONFIGURAÇÃO → PASSOS → PEGADINHAS → RECAPITULAÇÃO
  - Entrevista: (PERGUNTA → RESPOSTA → COMPLEMENTO) repetir
  - Viagem / evento: CHEGADA → DESTAQUES → MOMENTOS CALMOS → PARTIDA
  - Documentário: TESE → EVIDÊNCIA → CONTRAPONTO → CONCLUSÃO
  - Música / performance: INTRODUÇÃO → VERSO → REFRÃO → PONTE → FINAL
  - Ou invente o seu próprio.

REGRAS:
  - Os horários de início/término devem cair nos limites de palavra da transcrição.
  - Acrescente margem às bordas de corte (janela de trabalho 30–200ms).
  - Prefira tomadas com entrega limpa e confiante.
  - Evite deslizes verbais da lista.
  - Mantenha a continuidade narrativa entre as batidas.
  - Use silêncio natural para transições; evite cortes abruptos no meio do pensamento.
  - Se uma tomada tiver uma pausa perfeita, considere usá-la para um corte.
  - Para demonstrações: garanta que a sequência das ações esteja clara.
  - Saída: uma lista JSON de segmentos, cada um com {source, start, end, note}.

Construção de animações (subagentes paralelos)

Cada slot de animação obtém seu próprio subagente (Agent tool) com este padrão de resumo mínimo:

Construa um slot de animação em <edit>/animations/slot_<id>/. Use ffmpeg, Manim ou Remotion conforme apropriado.

ENTRADAS:
  - Contexto do segmento de vídeo: <descrição do que acontece ao redor deste slot>
  - Duração do slot: <segundos>
  - Estilo solicitado: <animação de texto, visualização de dados, infográfico, etc.>
  - Paleta de cores / direção de marca: <do usuário ou inferido>

REGRAS:
  - Renderize em um arquivo de vídeo com canal alfa (prores ou PNG com transparência) se for sobrepor.
  - Inclua um REASONING.md com a lógica de design.
  - Mantenha a saída em <slot_dir>/ e informe o caminho ao agente principal.
  - Respeite os limites de tempo — se o Manim demorar muito, use ffmpeg com filtros.

Inicie todos os slots de animação em paralelo. Quando o mais lento terminar, o renderizador tem tudo de que precisa.

Renderização final

# Renderização de pré-visualização (720p, rápida)
python render.py edit/edl.json -o edit/preview.mp4 --preview --build-subtitles

# Renderização final (resolução total)
python render.py edit/edl.json -o edit/final.mp4 --build-subtitles

O renderizador:

  1. Extrai cada segmento com codificação de qualidade total
  2. Aplica gradação por segmento se houver predefinições no EDL
  3. Aplica fades de áudio de 30ms
  4. Concatena sem perdas
  5. Aplica sobreposições PTS-deslocadas
  6. Aplica legendas por ÚLTIMO (Hard Rule 1)

Pós-produção

Após a renderização final:

  • Apêndice project.md com: data da sessão, duração, contagem de tomadas, resumo das decisões.
  • Limpeza de artefatos temporários (clips_graded/, animations/ se as fontes forem mantidas em outro lugar).
  • Ofereça para fazer upload ou exportar.

Habilidades Relacionadas