Uso de Vídeo
Princípio
- 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 - Á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
- Pergunte → confirme → execute → itere → persista. Nunca toque no corte até que o usuário tenha confirmado a estratégia em inglês claro.
- 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
- 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
- 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
- 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.
- 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
- Extração por segmento → concatenação com
-c copysem perdas, não um filtergraph de passagem única. Caso contrário, você codifica novamente cada segmento quando as sobreposições são adicionadas. - 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 - As sobreposições usam
setpts=PTS-STARTPTS+T/TBpara 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 - 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 - 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
- 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
- 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
- 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
- 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 - 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
- Todas as saídas da sessão em
<videos_dir>/edit/. Nunca escreva dentro do diretório do projetovideo-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_KEYem.envna raiz do projeto ou no ambiente. Pergunte e escreva.envse estiver faltando.ffmpeg+ffprobeno 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 Nopcional. 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.--previewpara 720p rápido.--build-subtitlespara 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
-
Inventário.
ffprobeem cada fonte.transcribe_batch.pyno diretório.pack_transcripts.pypara produzirtakes_packed.md. Amostre um ou doistimeline_views para uma primeira impressão visual. → verificar: a saída da etapa corresponde ao resultado esperado -
Pré-varredura de problemas. Uma passada por
takes_packed.mdpara 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 -
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
-
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
-
Execute. Produza
edl.jsonatravés do resumo do subagente editor. Aprofunde-se emtimeline_viewem momentos ambíguos. Construa animações em subagentes paralelos. Aplique gradação por segmento. Compose viarender.py. → verificar: código de saída do comando 0 -
Pré-visualização.
render.py --preview. → verificar: a saída da etapa corresponde ao resultado esperado -
Autoavaliação (antes de mostrar ao usuário). Execute
timeline_viewna 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
ffprobena 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.
-
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:
- Extrai cada segmento com codificação de qualidade total
- Aplica gradação por segmento se houver predefinições no EDL
- Aplica fades de áudio de 30ms
- Concatena sem perdas
- Aplica sobreposições PTS-deslocadas
- Aplica legendas por ÚLTIMO (Hard Rule 1)
Pós-produção
Após a renderização final:
- Apêndice
project.mdcom: 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.