Communitygithub.com

jun7799/video-autocut

Automação completa de edição de vídeos de tela/gravações de aula (sem depender do Jianying, saída direta com ffmpeg): transcrição com timestamps por palavra via faster-whisper → correção de legendas com IA → remoção automática de silêncios, gaguejos, repetições e erros → sobreposição de barras de correção em trechos errados → renderização final em um único passo.

O que é video-autocut?

A skill 'jun7799/video-autocut' automatiza todo o fluxo de pós-produção de vídeos de screencast, tutoriais e gravações de aula, eliminando a necessidade de editores manuais como o Jianying. O processo é dividido em etapas: transcrição (faster-whisper com timestamps por palavra), análise de IA para corrigir erros de transcrição, identificar trechos a serem cortados (silêncios, gaguejos, repetições, erros de fala) e marcar correções factuais, e renderização final com legendas duras e barras de correção no topo do vídeo. O usuário é consultado sobre cortes ambíguos e itens de correção antes da renderização. A saída é um vídeo pronto para publicação. A skill é recomendada para comandos como 'me ajude a cortar este vídeo', 'remova as pausas/travamentos/repetições', 'edição automática de vídeo de aula' e 'gere um vídeo final com legendas corrigidas'. É diferente da skill jianying-subtitle-fixer, que edita projetos do Jianying; esta skill produz vídeos finais diretamente com ffmpeg.

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/jun7799/video-autocut/tree/HEAD

Perguntar na sua IA favorita

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

Documentação

Edição Automática Completa de Vídeos de Aula (sem rota Jianying)

Problema que resolve

Após o usuário gravar um vídeo tutorial, a skill automatiza toda a cadeia: "transcrição → correção → remoção de pausas → exclusão de gaguejos/repetições → correção de erros de fala → geração do vídeo final". O fluxo inteiro não requer abrir o Jianying; o produto final é um vídeo pronto para publicação (com legendas hardcoded + barras de correção amarelas no topo). Qualquer parâmetro (tamanho da fonte, trechos a cortar, texto) pode ser alterado editando o cut_plan.json e executando novamente o script — iteração de 1 minuto.

Limite com a skill jianying-subtitle-fixer: aquela modifica rascunhos do Jianying (o usuário exporta manualmente); essa gera o vídeo final diretamente com ffmpeg. Se o usuário não mencionar Jianying, use essa.

Dependências do ambiente (já instalado)

  • Python: C:\Users\44162\AppData\Local\Programs\Python\Python312\python.exe (faster-whisper 1.2.1 + torch instalados; cache do modelo em ~/.cache/huggingface, com small)
  • ffmpeg: D:\Software\ffmpeg\bin\ffmpeg.exe (detectado automaticamente pelo script)

Fluxo de trabalho padrão (o AI deve seguir)

Step 0  ffprobe para obter duração/resolução do vídeo (usado para ajuste automático do tamanho da fonte)
Step 1  Transcrição: transcribe.py → raw.json (timestamps por frase + palavra)
Step 2  Análise de IA (o core da skill, veja abaixo) → escreve cut_plan.json
Step 3  Itens de corte: AskUserQuestion para o usuário aprovar (pergunte tudo de uma vez, sem enrolação)
Step 4  Renderização: render.py --plan cut_plan.json → vídeo final
Step 5  Verificação de qualidade: extrair quadros nos momentos das barras de correção (ler visualmente: texto completo, sem estourar largura)
Step 6  Entrega: relatar o que foi cortado, o que foi corrigido e o caminho do arquivo

Step 1 Comando de transcrição

& "C:\Users\44162\AppData\Local\Programs\Python\Python312\python.exe" "<skill>/scripts/transcribe.py" --video "<caminho do vídeo>" --outdir "<diretório de trabalho>" --prompt "Tutorial técnico em chinês sobre XXX, YYY etc."

--prompt use o tema do vídeo + termos frequentes (do glossário em ~/.claude/skills/jianying-subtitle-fixer/config/terms.json), melhora significativamente a precisão para nomes próprios. Diretório de trabalho sugerido: D:\Sistema de produção de conteúdo\Edição\workspace\<data-job>\.

Step 2 Análise de IA (etapa insubstituível, metodologia em references/cut-heuristics.md)

Após ler o raw.json por completo, produzir quatro itens:

  1. Correção de legendas fixed: corrigir erros de homófonos e termos mal interpretados. Manter o texto falado original, apenas corrigir erros (não reescrever — legendas devem casar com o áudio, reescrita causa dessincronia). Ver referências para padrões de erro do whisper.
  2. Cortes de conteúdo content_cuts: trechos inteiros a deletar (timestamp + motivo), tipos e critérios nas referências. Repetições no nível da palavra (dentro da frase "publiquei… publiquei") usar timestamps de palavras para localização precisa.
  3. deleted_ids: IDs das legendas cobertas pelos content_cuts (essas legendas não entram no vídeo).
  4. Barras de correção corrections: trechos com erro factual, barra amarela no topo. Escrever em cut_plan.json.

Step 3 Aprovação do usuário (princípios)

  • Cortes óbvios (gaguejos, recomeços, meias frases descartadas): incluir diretamente no plano, apenas informar ao relatar
  • Trechos com erro factual: perguntar ao usuário "Deletar / Manter + barra de correção", para conteúdo opinativo preferir manter + correção
  • Texto das barras de correção, conclusão da verificação factual (se precisar checar online, use WebSearch primeiro) — tudo para o usuário revisar
  • Use AskUserQuestion para perguntar todos os itens de uma vez

Step 4 Comando de renderização

& "C:\Users\44162\AppData\Local\Programs\Python\Python312\python.exe" "<skill>/scripts/render.py" --plan "<diretório de trabalho>/cut_plan.json"

Formato do cut_plan.json (comentários no cabeçalho do render.py têm explicação completa):

{
  "video": "C:/video_original.mp4",
  "out": "C:/video_final.mp4",
  "raw": "raw.json",
  "content_cuts": [[213.45, 230.98, "explicação gira experimental"]],
  "deleted_ids": [48, 49, 50],
  "fixed": {"1": "texto corrigido"},
  "corrections": [[12.95, 20.14, "Correção: O nome correto é XX"]],
  "silence": {"min_dur": 1.0, "keep": 0.25},
  "style": {"sub_size": 64, "cor_size": 48}
}

Todos os timestamps usam a linha do tempo do vídeo original (o script mapeia automaticamente para a nova linha do tempo). silence/style são opcionais. O estilo padrão das legendas é para telas de celular com fonte grande (base 2560 de largura, 64/48, escala proporcional conforme resolução). Se o usuário disser "fonte pequena", ajuste os valores em style e execute novamente.

Step 5 Verificação de qualidade (extrair quadros)

Ler o tempo real das barras de correção do final.ass (linhas Cor), extrair quadros na nova linha do tempo:

& "D:\Software\ffmpeg\bin\ffmpeg.exe" -y -i "<vídeo final>" -vf "select='eq(n\,<número do quadro>)',scale=1100:-1" -vsync vfr "<diretório qc>/qc_%d.jpg"

Número do quadro = segundos × 20fps. Ler cada quadro + inspeção visual: texto completo, não estoura largura, não conflita com legendas inferiores.

Arquivo de armadilhas (lições aprendidas, não pise)

  1. aselect silencioso falha: em alguns streams AAC, aselect não corta nenhum quadro e não reporta erro → corte de áudio deve usar asplit+atrim+concat (já embutido no render.py, não volte para aselect)
  2. concat não pode ser usado após select em stream único como concatenador (erro de incompatibilidade de pads); select+setpts já produz saída contínua
  3. Verificação do vídeo final deve usar ffprobe separadamente para streams de vídeo e áudio: a duração format pode ser inflada pelo stream mais longo, escondendo o fato de que "não cortou nada" (já aconteceu: render "bem-sucedida" mas áudio inteiro preservado)
  4. Caminho do filtro subtitles: use caminho relativo se o .ass estiver no mesmo diretório de execução, para evitar problemas de escape com caminhos em chinês
  5. Corte de silêncio deve ter zona de proteção de palavra (já embutida no render.py como strip_guard): timestamps de palavras do whisper podem diferir do silencedetect; palavras suaves (como termos em inglês no início da frase) podem cair dentro do "silêncio", e cortar por silêncio puro cortaria metade da palavra
  6. O script de transcrição faz fallback de codificação GBK no stderr do ffmpeg (problema comum de encoding no Windows, ignore os avisos dessa thread)

Custo de iteração

Alterar tamanho da fonte / texto da correção / adicionar ou remover cortes → editar os campos correspondentes no cut_plan.json e executar novamente render.py, 1-2 minutos cada vez. O vídeo final é sobrescrito, o original nunca é modificado.

Habilidades Relacionadas