Communitygithub.com

video-script-reverse-engineering

Use quando um utilizador fornece um ficheiro de vídeo (mp4/mov/m4a, etc.) e pede para engenharia reversa transformá-lo num script escrito — 视频脚本拆解、逐帧拉片、带货脚本还原、短剧/口播/剧情视频转脚本、

O que é video-script-reverse-engineering?

Esta skill é uma ferramenta de engenharia reversa de alta precisão para vídeos, que transforma conteúdo dinâmico (mp4/mov/m4a) num script estático com marcações de tempo. É ideal para quem precisa analisar vídeos de vendas, curtas-metragens, vídeos com narração ou cenas dramáticas, extraindo não só o diálogo, mas também a qualidade vocal (tom, volume, ritmo, respiração), a trajetória das expressões faciais, os alvos do contato visual e detalhes de ação. A skill suporta plataformas como Claude Code, Codex e outras ferramentas de agente de IA, utilizando um fluxo em 8 etapas (P0-P7) que inclui sondagem do material, transcrição completa de áudio com marcação de falantes, extração de frames em lote, construção de uma grade de legendas segundo a segundo (P3.5) para verificação cruzada da atribuição de falas, e uma dupla verificação de transcrição (P6) que corrige erros comuns de diarização, como troca de falantes, confusão de pronomes (ele/ela) e fusão de frases. O resultado final é um script detalhado em Markdown, com tabelas de verificação e anotações de revisão, garantindo que o leitor possa 'ver' o vídeo sem assisti-lo. É particularmente útil para criadores de conteúdo, roteiristas e profissionais de marketing que precisam replicar estruturas de vendas, analisar performances ou criar guias de atuação.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/ZHIXIAO-XJY/video-script-reverse-engineering/tree/HEAD

Perguntar na sua IA favorita

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

Documentação

Engenharia Reversa de Script de Vídeo de Alta Precisão

Transformar um vídeo dinâmico num script de texto estático que pode ser reproduzido em filmagens. Critério central: o leitor deve ser capaz de "ver" o vídeo mesmo sem o assistir — o que é dito, como é dito, como o rosto muda, para quem o olhar se dirige e por que é dito dessa maneira.

Quando Utilizar

  • O utilizador fornece um ficheiro de vídeo e solicita "extrair o script / analisar quadro a quadro / converter para script de texto / como este vídeo foi feito"
  • Necessidade de extrair estrutura de discurso de vendas a partir de um vídeo de referência (problema → empatia → prova → preço → chamada para ação)
  • Necessidade de fornecer a atores/diretores uma ficha de instruções de atuação (tom, expressões, direção do olhar)
  • Necessidade de reverter a divisão de cenas e ritmo de edição a partir de um vídeo de referência

Não aplicável a: extração simples de legendas (basta usar ASR), edição de vídeo propriamente dita, transcrição musical.

Regras de Ferro (Leia estas cinco primeiro)

  1. Limpeza zero das falas: Mantenha "éh / ah / hum / ia / xi / oh / hm" — são evidências chave para autenticidade e atribuição de personagens; não os embeleze ou remova.
  2. O olhar deve ser nomeado: Escreva "【A】dirige o olhar para 【identidade específica/parte do corpo de B】+ duração da fixação". Proibido usar descrições vagas como "olha para o outro" ou "olhar profundo".
  3. Expressões devem descrever uma trajetória de mudança: Siga o formato [início] → [meio] → [fim] em etapas (exemplo: arregalar os olhos → pupilas dilatarem → sobrancelhas relaxarem, lábios franzidos). Proibido usar apenas um adjetivo estático.
  4. Tom deve descrever a textura da voz: Tom, volume, velocidade, respiração (sussurro/descontrole/sopro/suspiro), acento tónico, duração da pausa — pelo menos três destes cinco itens.
  5. O falante deve passar por uma cadeia de verificação: A ATRIBUIÇÃO de falantes pelo ASR está sempre errada → re-transcrição segmentada e comparação (P6) → tabela de referência de legendas segundo a segundo (P3.5) → decisão com base nos quadros dos lábios. Só após passar por todas as quatro camadas de evidência é permitido escrever 【Falante】.

Fluxo de Execução (P0–P7)

P0 Sonda de Material

ffprobe -v error -show_entries format=duration,size:stream=codec_type,codec_name,width,height,r_frame_rate \
  -of default=noprint_wrappers=1 "<video>"

Com base nisto, determinar a densidade de amostragem (ver tabela abaixo) e confirmar se a faixa de áudio existe (se não, saltar P1 e inferir a partir das imagens).

DuraçãoEstratégia de Extração de QuadrosLimite de QuadrosDescrição
≤2 min1 quadro/2s + segmentos chave a 1 quadro/s60–80Vídeos curtos/anúncios, todos os detalhes necessários
2–10 min1 quadro/5s60–100Curtas-metragens
10–30 min1 quadro/10s + segmentos de gancho mais densos80–120Curtas-metragens/narrações longas, primeiros e últimos 90s a 1 quadro/3s
>30 min1 quadro/20s + amostragem segmentada100–150Apenas reconstrução a nível de capítulo, primeiro um esboço, depois aprofundamento

Regra de Custo: O número total de chamadas ViewImage por tarefa deve ser controlado em 60 vezes, com 8 imagens em paralelo por lote; quando o número de quadros for insuficiente, dar prioridade a "pontos de viragem de expressão, close-ups de produto, close-ups de adereços, cartões de legenda".

P1 Transcrição Completa do Áudio

ffmpeg -y -v error -i "<video>" -vn -ac 1 -ar 16000 -b:a 96k audio.mp3

Usar AudioTranscribe (suporta mp3/wav/m4a/mp4, etc., ≤1GB ou 5 horas) para transcrição. Produzir texto com carimbos de tempo [início, fim, ID do falante] — será o esqueleto de todas as linhas temporais subsequentes.

Nota: Os IDs de falante devolvidos são apenas números de clusters, não são personagens; devem ser determinados em conjunto por semântica + tom + imagem.

P2 Extração de Quadros

# Primeiro, tentar deteção de mudança de cena (para vídeos com muitas transições)
ffmpeg -y -v error -i "<video>" -vf "select='gt(scene,0.15)',showinfo" -vsync vfr -q:v 3 kf_%03d.jpg 2> scene_log.txt
grep -o "pts_time:[0-9.]*" scene_log.txt | head -100
  • Se menos de 10 quadros forem detetados → significa que é uma filmagem contínua com uma única câmara (narração/ato), usar extração uniforme: -vf "fps=1/10,scale=576:-1"
  • O limiar pode ser reduzido para 0.08 e tentar novamente; se ainda não houver transições, abandonar a deteção de cenas
  • Para vídeos verticais curtos, usar uniformemente scale=576:-1, suficiente para ver expressões sem desperdiçar tokens

P3 Visualização em Lote de Quadros

Visualizar 8 quadros em paralelo por lote com ViewImage, template de consulta uniforme (para garantir comparabilidade):

Descreve este quadro de vídeo vertical: aparência da pessoa, expressão, ação, cenário, vestuário, texto da legenda, composição

Pontos importantes na leitura dos quadros:

  • Direção das relações entre personagens (quem puxa quem, quem persegue quem, quem é levado, quem entra em que carro) deve ser confirmada pelos quadros — o ASR nunca te dirá isto; quando dois adultos do mesmo sexo aparecem na mesma cena, o ID do cluster não pode ser usado diretamente como personagem
  • Texto da legenda é uma informação de alto valor gratuita (marca de água do título, nome da marca, legenda do produto, preço, aviso legal, nome de personagem na fala) — copiar quadro a quadro; os nomes que aparecem na legenda (ex.: «Gu Chuan, não demores») combinados com "quem está a ser puxado" na imagem são provas irrefutáveis de atribuição de fala
  • Notar elementos constantes (marca de água, legenda de aviso, logótipo) — colocá-los no cabeçalho do documento
  • Lembrar os segundos correspondentes a cada quadro (kf_001 = 0s, kf_002 = 10s…) — serão necessários mais tarde para as descrições de cena

P3.5 Grelha de Legendas do Vídeo Inteiro: Criar Tabela de Referência de Fala Segundo a Segundo (Primeira Evidência de Atribuição de Falante)

Para vídeos com legendas incorporadas (curtas-metragens/vídeos de vendas quase sempre têm), obter primeiro a "resposta oficial" das falas:

# Cortar uma faixa de legenda por segundo (primeiro extrair um quadro completo para confirmar a posição vertical da legenda, neste exemplo y=710 altura 140)
ffmpeg -y -v error -i "<video>" -vf "fps=1,crop=576:140:0:710,drawtext=fontfile='<font>':text='%{pts\:hms}':x=8:y=6:fontsize=24:fontcolor=white:box=1:[email protected],tile=3x10" -q:v 3 sub/grid%02d.jpg
  • 30 quadros/imagem → para um vídeo de 14 minutos, cerca de 29 imagens, ler cada uma com ViewImage para extrair «carimbo de tempo → texto da legenda»
  • Legendas com borda azul/branca são geralmente legendas de transição de narração (ex.: «Os dois foram forçados a separar-se»), categorizar separadamente, não misturar com falas
  • Legendas de duas linhas podem ser cortadas, perdendo a metade superior — em caso de dúvida, voltar ao quadro completo desse segundo

Esta tabela de referência segundo a segundo resolve de uma só vez quatro tipos de problemas: frases em falta, frases a mais, erros de texto (ele/ela), atribuição de partículas de fala — quando ASR e legenda entram em conflito, confiar primeiro no texto da legenda e depois usar os quadros dos lábios para decidir o falante (a legenda não indica quem fala).

P4 Construir o Esqueleto: Dividir o Fluxo de Fala em Segmentos de Cena

  1. Usar os carimbos de tempo do ASR como eixo, cortar por mudança de cena/espaço (mudança de local, mudança de interlocutor, mudança de tom emocional)
  2. Formato de nome de cada segmento: ⏱️ [mm:ss - mm:ss] Nome do Evento (Anotação Funcional), ex.: [04:15 - 05:10] A Tentativa na Mesa de Cuidados · Primeira Aparição do Bálsamo Labial
  3. No início do segmento, escrever > Descrição da Cena: (luz, composição, posição dos objetos principais, posição das personagens)
  4. As falas dentro do segmento são organizadas linha por linha por ordem cronológica; quando várias pessoas falam ao mesmo tempo, colocar em linhas separadas e anotar "(aqui, a falar simultaneamente com X)"

P5 Preenchimento das Cinco Dimensões (Cinco Etiquetas Abaixo de Cada Linha de Fala)

EtiquetaConteúdo Obrigatório
🎙️ Textura da VozDireção do tom / Volume / Velocidade / Respiração (sussurro·descontrole·sopro·suspiro) / Acento tónico em que palavra / Pausa de quantos segundos
😐 Trajetória da Mudança de ExpressãoTrês fases [início]→[meio]→[fim], escrevendo movimentos específicos de sobrancelhas, olhos, boca, asas do nariz, mandíbula
👀 Interação VisualO olhar de 【sujeito】 dirige-se para 【objeto nomeado】, duração da fixação; o movimento do olhar deve descrever o percurso
🙌 Detalhes da AçãoPostura das mãos, orientação do corpo, trajetória de movimento, interação com adereços (dar prioridade a microações como nós dos dedos a branquear/cerrar/pontas dos dedos a tremer)
🫧 Aura e AtitudeUma frase para定性 o estado psicológico da pessoa naquele momento (perspetiva do realizador, não repetir a expressão)

As partículas de fala devem ser analisadas como frases separadas: um "hm" deve ser descrito se é um som nasal ou gutural, se é um riso de desprezo ou uma rendição, e o intervalo até à próxima frase — isto determina de quem é a fala.

P6 Segunda Ronda de Verificação Cruzada (Valor Central desta Skill, Não Pode Ser Ignorada)

Problema: A transcrição do vídeo inteiro de uma só vez pode juntar as falas de duas pessoas adjacentes, escrever "ele" e "ela" como o mesmo caractere, transformar perguntas em afirmações.

Procedimento: Selecionar 4–6 "segmentos de alto risco" para re-transcrição e comparar linha a linha com o texto completo.

Características de segmento de alto risco (se alguma for encontrada, cortar o segmento):

  • Um segmento com ≥2 personagens a dialogar (especialmente segmentos sussurrados, discussões, cenas de multidão)
  • Dois adultos do mesmo sexo na mesma cena (tons de voz semelhantes, a clusterização facilmente funde-os num único ID)
  • Aparecimento de "ele/ela" com possível ambiguidade de referência
  • Sobreposição de frases, interrupções, fala simultânea
  • Partículas de fala isoladas como frases (hm/oh/éh/ah)
  • Cenas de despedida, luta, perseguição, estação de comboio ("quem é levado, quem persegue" é muito fácil de inverter)
  • Intervalo de carimbo de tempo >20 segundos com ID de falante inalterado (indica que foi fundido)
# Cortar segmento de 70–90 segundos (evitar limites de silêncio, deixar 1s de margem antes e depois)
ffmpeg -y -v error -ss 15 -t 75 -i "<video>" -vn -ac 1 -ar 16000 -b:a 96k seg1.mp3

Executar AudioTranscribe para cada segmento e depois julgar segundo a tabela:

Tipo de DiferençaMétodo de JulgamentoTratamento
Inversão de falantesVer no segmento se as posições de fala alternam (A/B/A/B); combinar com movimento dos lábios e causalidade da tramaSeguir o padrão de alternância + lógica da trama, adicionar 📌 Nota de Revisão no texto
Confusão ele/elaHomófonos estão sempre errados, reescrever de acordo com o género real da pessoa referidaCorrigir diretamente, não manter o caractere original
Frase em falta (ausente no texto completo)Frase que aparece no segmento mas não no texto principalAdicionar de volta, ajustando simultaneamente a linha temporal dentro do segmento
Frase fundida que precisa de ser divididaSujeito e verbo inconsistentes numa frase ("Vai rápido não demores eu espero")Dividir em 2–3 linhas por semântica, atribuir cada uma ao seu falante
Erro de julgamento pergunta/afirmaçãoVer se o tom sobe no final, se há semântica de "?"Frases de acusação usar "!", perguntas de investigação usar "?"
Voz off vs. sussurro audívelVer no segmento se a posição de fala é contínua com as anteriores, se há mudança de faixa de áudioPosição contínua = sussurro audível, anotar "o outro não ouviu" em vez de "monólogo interior"
Inversão de direção da açãoVer nos quadros: quem está a puxar quem, quem entra em que carro, a quem a legenda se dirigeInverter e reescrever todo o segmento, adicionar 📌 Nota de Revisão com evidência dos quadros

Terceira ronda de verificação visual: Para conclusões que envolvam direção da ação, relação entre personagens (quem é levado/quem persegue/quem puxa quem), a comparação puramente textual da segunda ronda não é suficiente para decidir — é necessário voltar à extração densa de quadros (1 quadro/s) para verificar e usar falas posteriores que referenciam o passado (ex.: "Há 15 anos, afastaste-me") para inferir e travar. Ver caso real em references/pitfalls.md #9.

Quarta ronda de verificação com tabela de referência de legendas: Antes da entrega, usar a tabela de referência de legendas segundo a segundo do P3.5 para alinhar uma a uma com o script — sempre que o texto do script não corresponder ao texto da legenda, ou houver uma frase na legenda que não está no script, corrigir/adicionar uma a uma; para pontos com dúvidas de atribuição, extrair quadro completo para ver o movimento dos lábios para decidir (momento de extração = segundo em que a legenda aparece). Duas regras especiais:

  • Flashback com áudio a transbordar: Após o fim da cena de flashback, o áudio original pode continuar na cena real (ex.: na cena real, a mãe está de lábios fechados, mas a legenda mostra um "xiu" de infância) — a atribuição segue a faixa de áudio, não a imagem;
  • O "ela" na legenda pode não ser feminino: As legendas originais muitas vezes confundem ele/ela, julgar pelo semântico e por referências posteriores para determinar a referência real, mas ao citar a legenda original, manter o texto original e anotar.

O registo de verificação deve ser incluído no entregável (tabela: ponto temporal / texto original / texto após verificação / base de julgamento + grau de coincidência + itens de incerteza restantes) — é o certificado de credibilidade do script.

P7 Entrega e Auto-Verificação

Produzir um único ficheiro Markdown, estrutura conforme references/script-template.md; antes da entrega, verificar item por item em references/qc-checklist.md.

Finalmente, usar present_files para apresentar e incluir na resposta: conclusão de identificação do vídeo (nome do programa/categoria/duração), resumo da trama principal numa frase, estrutura de vendas, número de correções feitas nesta verificação.

Ferramentas de Script

scripts/extract_assets.sh executa de uma só vez: sonda → áudio → deteção de cena → extração uniforme de quadros → corte de segmentos de alto risco:

bash scripts/extract_assets.sh "<video>" "<outdir>" [intervalo de quadros em segundos]
# Exemplo: bash scripts/extract_assets.sh ./v.mp4 ./frames 10

O script produz probe.txt, audio.mp3, kf_*.jpg (com tabela de correspondência número de quadro↔segundo), scene_log.txt, e imprime o número de quadros/duração como uma tabela de carga de trabalho.

Ficheiros de Referência

  • references/script-template.md — Esqueleto completo do entregável (perfil do personagem / tabela geral de tom e expressão / cinco dimensões por segmento / metodologia de vendas / ficha de instruções de atuação / registo de verificação)
  • references/qc-checklist.md — Lista de 16 itens de auto-verificação antes da entrega
  • references/pitfalls.md — 10 tipos de erros frequentes e contramedidas (com casos reais)

Convenções de Saída

  • Formato de tempo uniforme mm:ss (acima de 1 hora usar hh:mm:ss), no título do parágrafo escrever o intervalo, nos blocos de fala pode-se marcar segundos individuais
  • Nome do personagem uniforme: escrever o nome completo na primeira ocorrência, no texto principal usar 【】, ex.: 【Mãe Gu】
  • O mesmo personagem com identidades diferentes (pseudónimo/infância/adulto) deve ser arquivado separadamente, e no arquivo escrever a correspondência
  • Nome do produto, nome da marca, preço devem ser verificados quadro a quadro nas legendas (o ASR frequentemente ouve mal os nomes de marcas, ex.: "Suco de cenoura húmido" → "Beta-caroteno")

Habilidades Relacionadas