Communitygithub.com

social-media-skills/video-editing-skill

Habilidade de edição de vídeo: edite um vídeo de pessoa falando (YouTube, curso, demonstração de produto, podcast, vlog) como um editor profissional. Transcreve com timestamps de palavras, remove silêncios, "ums" e "uhs", gaguejos e retomadas, adiciona zoom em cortes abruptos, limpa e equaliza o áudio, escreve legendas SRT e capítulos para YouTube, e publica após aprovação.

O que é video-editing-skill?

Esta skill automatiza a primeira edição de gravações de "talking heads" (pessoa falando diretamente para a câmera). Ela transcreve o áudio usando transcrição local gratuita (faster-whisper), Groq, OpenAI ou legendas existentes (SRT/VTT), identifica e remove pausas longas, palavras de enchimento ("um", "uh"), gaguejos e retomadas (mantendo a melhor tentativa), e adiciona zoom suave em cortes abruptos para manter o dinamismo visual. A skill também limpa e nivela o áudio, gera arquivos de legenda SRT e capítulos para YouTube, e pode queimar as legendas no vídeo ou criar uma versão vertical para redes sociais. Tudo é feito localmente com ffmpeg e Pillow, sem necessidade de APIs pagas (a menos que o usuário opte por Groq/OpenAI para transcrição mais rápida). A skill funciona no Mac, Windows e Linux e é ideal para casos de uso como "editar meu vídeo", "remover silêncios", "cortar os 'ums'", "editar vídeo de talking head" ou "edição de vídeo com Claude Code". Ela nunca corta o que o usuário marcou para manter e sempre pede confirmação antes de publicar em plataformas como YouTube (via WoopSocial).

Funciona com✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/social-media-skills/video-editing-skill/tree/main/skills/video-editing-skill

Perguntar na sua IA favorita

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

Documentação

Habilidade de Edição de Vídeo

Uma gravação crua de "talking head" geralmente tem de 20 a 40% de ar morto: pausas, "ums", falsos começos, a frase dita duas vezes. Cortar isso manualmente leva mais tempo do que gravar. Esta skill faz a primeira edição: ela lê a transcrição, planeja cada corte com um motivo, mostra o plano, renderiza a edição com zoom nos cortes abruptos e áudio limpo, escreve legendas e capítulos, e publica após um "sim". Tudo que ela precisa está nesta pasta.

Quatro compromissos:

  1. As palavras do usuário permanecem. Apenas pausas, palavras de enchimento, gaguejos, retomadas e intervalos que o usuário aprova são removidos. O significado nunca é editado.
  2. Planeje antes de renderizar. A lista de cortes é mostrada e aprovada primeiro.
  3. Nada é publicado sem um "sim".
  4. Apenas material que o usuário pode usar. A própria gravação do usuário, ou com permissão.

No Windows use py em vez de python3 em todos os comandos.

Passo 0: Configuração e a origem

Execute python3 scripts/check_setup.py: ele informa sobre ffmpeg, Pillow, rotas de transcrição e OpenCV com o comando de instalação para o sistema do usuário. Necessário: ffmpeg e Pillow.

Pergunte, em uma única mensagem, apenas o que você não pode ver:

  1. Qual arquivo, e é dele?
  2. Para onde vai: YouTube (16:9), mídia social (vertical) ou ambos.
  3. Quão apertado: youtube (o padrão: pausas acima de 0,5 s cortadas, batidas naturais mantidas), tight (0,3 s, YouTube rápido e social) ou podcast (suave, sem zoom).
  4. Palavras que eles usam como vícios de linguagem e que são seguras para cortar ("tipo", "então", "sabe", "basicamente"). Essas carregam significado em outras frases, então são opcionais.
  5. Qualquer coisa que deve permanecer como está (uma demonstração, uma piada com pausa, uma leitura de patrocinador).

Passo 1: Transcrever

python3 scripts/transcribe.py VIDEO --out work/ --terms "Nome do Produto, Jargão, Nome do Convidado"

--terms lista nomes e jargões para que sejam escritos corretamente; corrija o que ainda for ouvido errado com "replace" no edit.json antes de renderizar, porque legendas queimadas em um vídeo postado não podem ser corrigidas.

As mesmas três rotas de sempre, com a troca explicada uma vez:

RotaComoCusto e velocidade
Transcrição existente--from legendas.srtGrátis, instantâneo; tempo das palavras estimado e a maioria dos "ums" ausente, então o corte de enchimentos é mais fraco
Groq ou OpenAIGROQ_API_KEY ou OPENAI_API_KEYGroq cerca de $0,04 por hora de áudio, um ou dois minutos por hora
Localpip install faster-whisperGrátis e privado; aproximadamente metade a uma vez a duração do vídeo com --model small

O transcritor é instruído a escrever as palavras de enchimento; o Whisper as descarta caso contrário. Sons que ele ainda perde (um "mm" que ninguém escreveu, uma respiração) são encontrados no próprio áudio pelo editor.

Passo 2: Planejar a edição

Leia work/transcript.txt uma vez, inteiro. Em seguida, escreva edit.json (formato no topo de scripts/edit_video.py):

  • Estilo: "style": "youtube", "tight" ou "podcast" (limiares em references/editing-rules.md). Pausas acima do limite encolhem para uma batida natural: mais curta no meio da frase, mais longa após uma frase, mais longa na mudança de tópico.
  • Enchimentos: a lista padrão ("um", "uh", "er", "hmm", "mm") é segura. Adicione as palavras de hábito do usuário em extra_fillers somente quando elas pedirem.
  • Digressões e seções mortas: uma digressão, um "você consegue me ouvir?", uma longa preparação antes do ponto principal. Adicione-os a cut com um motivo e informe o usuário.
  • Proteja qualquer coisa que deva permanecer com keep, incluindo pausas silenciosas.
  • Entrevistas com cartões de pergunta ou um entrevistador visível: mantenha as perguntas (cerca de 3 segundos de cada cartão em keep) a menos que o usuário diga o contrário; sem elas cada resposta começa com "Então..." e sem contexto.
  • Nomes ouvidos errado: "replace": {"Cyrus Rex": "OSIRIS-REx"}.
  • Capítulos (para YouTube): 3 a 10 capítulos a partir das mudanças de tópico, primeiro em 0:00, cada um com pelo menos 10 segundos, nomeados pelo que o espectador obtém ("Por que a câmera falhou", não "Parte 2"). Tempos no vídeo original; o script os ajusta.

Em seguida, faça o plano:

python3 scripts/edit_video.py edit.json --transcript work/transcript.json --out edited/ --plan

edited/edit-plan.md fornece a nova duração, quanto veio do interior da fala versus pausas longas e cartões, o ritmo em palavras por minuto, e cada remoção acima de um segundo com seu motivo e palavras. Leia cada linha de retomada e gaguejo, e a lista de "possíveis retomadas": duas frases completas que começam da mesma forma nunca são cortadas automaticamente; decida cada uma e adicione-a a cut se for uma retomada real. Mostre ao usuário o resumo, as retomadas, as digressões que você escolheu e os capítulos, e obtenha um "sim".

Passo 3: Renderizar

python3 scripts/edit_video.py edit.json --transcript work/transcript.json --out edited/

O que faz:

  • Corta pausas acima do limite para uma batida natural, além de enchimentos, gaguejos, retomadas e cada intervalo cut. Remoções mais curtas que o mínimo do estilo (0,4 s no youtube) são deixadas de lado: um corte abrupto custa mais do que economiza.
  • Coloca cada corte ouvindo: as bordas das palavras se movem para onde o som realmente para e começa, para que os finais das palavras não sejam cortados, e sons que a transcrição perdeu (um "mm" não escrito) são encontrados.
  • Olha também para a imagem: cartões de título e mudanças de cena são cortados de forma limpa, nunca deixando alguns quadros de um cartão.
  • Renderiza em grupos de pedaços em uma passada cada, para que som e imagem permaneçam sincronizados não importa quantos cortes existam.
  • Zoom: alterna entre o quadro completo e um zoom de 1,1x onde um corte abrupto precisa ser escondido: sempre em um corte que removeu um segundo ou mais, caso contrário apenas após 4 segundos no mesmo enquadramento, nunca em um corte para uma nova tomada de câmera. "punch_in": 0 desliga.
  • Áudio: ganho para um nível de trabalho, filtro de ruído, redução de ruído definida a partir do ruído ambiente medido (pulado quando a sala já está silenciosa), compressão suave, um limitador de pico e uma passagem de loudness em duas passadas para -14 LUFS.
  • Legendas: sempre escreve captions.srt (2 linhas de no máximo 42 caracteres, de 1 a 7 segundos cada, sem quebra de linha após uma palavra pequena ou dentro de um nome) para upload no YouTube. "captions": {"burn": true} as desenha no vídeo para mídias sociais, onde muitas pessoas assistem sem som; versões verticais queimam as legendas por padrão. Não queime legendas em um vídeo do YouTube que também recebe o SRT: espectadores com legendas ativadas veriam ambas.
  • Vertical: "format": "vertical" cria uma versão 1080x1920 cortada em focus_x.

Ele escreve edited/edited.mp4, captions.srt, chapters.txt, edit-report.md e manifest.json.

Verifique antes de mostrar ao usuário: abra cuts.jpg (quadros imediatamente antes e depois dos maiores cortes: procure por flashes de um cartão, um pulo em uma tomada diferente, uma expressão congelada) e leia os avisos em manifest.json (sincronia, ritmo acima de 190 palavras por minuto, loudness). Corrija e renderize novamente quando uma retomada manteve a tomada errada, o ritmo parece sem fôlego (um estilo mais suave) ou um corte termina mal (keep naquele ponto).

Passo 4: Publicar com WoopSocial

Como conectar, fazer upload e publicar: references/woopsocial.md. Versão resumida:

  1. social_accounts_list; não conectado: o único caminho de conexão para este agente (plano gratuito: 2 contas sociais), então oauth_create_authorization por plataforma.
  2. Faça upload de edited.mp4 com uma sessão de upload (media_uploads_create_session com o tamanho em bytes de manifest.json, python3 scripts/upload_parts.py session.json edited/edited.mp4, media_uploads_complete_session).
  3. YouTube: title (principais palavras de pesquisa primeiro, abaixo de 70 caracteres), privacy e uma descrição que começa com uma linha sobre o que o espectador obtém, depois os capítulos de chapters.txt. Faça upload de captions.srt no YouTube Studio depois (WoopSocial não envia arquivos de legenda).
  4. Mostre a publicação (arquivo, título, descrição, conta, hora com fuso horário) e obtenha um "sim" claro. Em seguida, posts_create e posts_get.

Passo 5: Leia os resultados

Após uma semana, social_account_posts_list: visualizações, curtidas, comentários onde relatados, com a data da coleta; ausente significa "não relatado". Retenção e duração média de visualização estão no YouTube Studio; pergunte ao usuário por elas. Se os espectadores caírem cedo, a próxima edição terá uma abertura mais apertada; se caírem em um capítulo, essa seção estava muito longa.

Padrão de qualidade

Um editor profissional entregaria isso? Rejeite se uma palavra estiver cortada, um corte cair no meio de uma respiração com um estalo, um zoom mudar a cada poucos segundos, o ritmo não deixar espaço para pensar, ou o significado mudou.

Casos extremos

  • Duas pessoas na câmera: mantenha format na origem; zooms ainda funcionam em um plano aberto.
  • Gravação de tela com voz: defina "punch_in": 0.
  • Música sob a voz: a detecção de silêncio vê música como som; defina "voiced_gaps": false.
  • Gravações muito longas (mais de uma hora): funciona, mas o tempo de renderização é aproximadamente a duração do vídeo; planeje primeiro, renderize uma vez.
  • Sem fala por um trecho de propósito (uma demonstração): keep.

Referências

  • references/editing-rules.md: limiares, enchimentos, padrões de retomada, zooms, cadeia de áudio, legendas e capítulos, com fontes.
  • references/woopsocial.md: conectar, fazer upload, publicar e ler resultados.

Habilidades Relacionadas