Communitygithub.com

motion-video

Crie vídeos de motion graphics a partir de um script, desde reels curtos até vídeos longos em 4K: configuração, script, storyboard com pré-visualização reproduzível, verificações, renderização, áudio, textos de publicação e miniaturas. Use quando Petr quiser um vídeo, reel, short, explicador, script ou storyboard.

O que é motion-video?

Esta skill automatiza a produção de vídeos de motion graphics a partir de um script, cobrindo todo o fluxo de trabalho: definição de perfil de projeto, configuração, criação de script, storyboard interativo com pré-visualização reproduzível, verificações de qualidade (zona segura, contraste, silêncio), renderização em paralelo, mixagem de áudio com ducking automático, sincronização de voz e geração de textos de publicação e miniaturas. Suporta os formatos reel/short (9:16), vídeo (16:9), feed 4:5 e quadrado (1:1), com resoluções de até 4K. O storyboard é publicado como um artefato HTML único que inclui um player com linha do tempo de capítulos e comentários com timestamp, permitindo revisões iterativas antes da renderização final. A skill também oferece gravação ao vivo de sites via Playwright, efeitos sonoros gerados por código e alinhamento de voz com suporte a legendas palavra por palavra, tudo integrado em um pipeline determinístico baseado em HTML/CSS/JavaScript.

Funciona com✓Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/polachp/claude-skill-motion-video/tree/HEAD

Perguntar na sua IA favorita

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

Prévia

Do README da skill

Documentação

Vídeo motion a partir de um script

Fluxo de trabalho geral para vídeos de motion graphics (texto animado, gráficos, capturas de tela, gravações ao vivo da web, ícones, mapas) renderizados a partir de HTML. Marca, tom, cores, jingle e música de um projeto residem no perfil do projeto VIDEO.md, não aqui. Scripts e modelos: repositório C:\Mydrive\Claude Projects\motion-video\ (scripts/, templates/).

Idioma: fale com Petr em tcheco. Todos os arquivos que criamos (código, comentários, documentação, perfis, README) estão em inglês (inglês simples, frases curtas). O texto que aparece no vídeo (legendas, títulos) está no idioma do vídeo definido na configuração, geralmente tcheco. A interface do storyboard e do player pode ser localizada com labels em storyboard.json.

0. Perfil do projeto

  • Primeiro, encontre e leia o perfil do projeto: VIDEO.md ou brand/video-profil.md na pasta do projeto, ou sua cópia de texto no projeto claude.ai (claude/video-profil.md).
  • O perfil substitui os padrões desta skill (cores, fonte, logotipo, jingle, música, tom, público, fraseado, hashtags, zonas seguras, exemplos de locais).
  • Sem perfil: pergunte sobre a marca e o público e crie um a partir de templates/VIDEO.md.

1. Configuração (fonte única da verdade)

Um bloco fixo no início do script. Os tempos das cenas são derivados dele.

ItemExemplo
TópicoMultiModel no Meteoblue
Predefiniçãoreel / video / feed 4:5 / square
Formato e resolução de design9:16 1080×1920 / 16:9 1920×1080 / 4:5 1080×1350 / 1:1 1080×1080
Renderização final1080p, ou 4K (--scale 2 para 16:9)
Duração60–75 s / 8 min / …
Idioma do vídeocs
Narraçãonão / gravação própria (sincronia de palavras)
Legendasincorporadas / palavra por palavra / SRT
Jingle, músicado perfil (arquivo + licença)
Efeitos sonorossim / não
Gravações ao vivo da webnão / sim (quais sites e etapas)

Predefinições de formato

PredefiniçãoFormatoDuraçãoO conteúdo se adapta
reel / short9:16, 1080×1920até 3 min (Reels, Shorts); verifique FB Reels (90 s é frequentemente citado)uma ideia, legendas grandes incorporadas, conteúdo dentro da zona segura (interface do aplicativo no topo e na base), ritmo acelerado
video16:9, design 1920×1080, renderização até 4Kqualquercapítulos (script e storyboard por capítulo, timestamps na descrição do YouTube: primeiro 0:00, pelo menos 3 capítulos), provavelmente narração, mais espaço para detalhes, ritmo mais calmo
feed 4:54:5, 1080×1350~1–2 minPostagem de feed do Instagram (e LinkedIn), mais alta que quadrada
square1:1, 1080×1080~1 minpostagem de feed (FB, IG), legendas no meio

"Reel" é apenas uma predefinição: quando Petr disser "reel", a duração, formato e ritmo de reel se aplicam.

2. Fluxo de trabalho: script → storyboard → aprovação → renderização

A saída é sempre um par script + storyboard, mantidos sincronizados após cada alteração. Renderização final somente mediante solicitação explícita ("vygeneruj video"). Até lá, apenas script, storyboard e uma pré-visualização de baixa resolução.

  1. Esboço no chat: uma lista numerada curta de seções (capítulos para um vídeo). Mantenha-a curta.
  2. Desenvolva seção por seção: tempo, cabeçalho, legendas exatamente como na tela, imagem, o que aprendemos, movimento e transição, som. Para dúvidas sobre redação, ofereça 3–4 opções curtas e recomende uma. Apenas corrija a gramática da redação do usuário e diga o que mudou.
  3. Script em <projeto>/<saida>/scenar.md e a mesma cópia no projeto claude.ai. Cabeçalho = configuração + última renderização + link do storyboard + status.
  4. Storyboard = artefato HTML (um link, sempre republicar no mesmo artefato):
    • projeto/video.html com cenas e seek(t) (veja Técnica), mesmo antes de qualquer renderização,
    • projeto/storyboard.json: seções com name, time, learn, motion, sound, items, changed (selo CHANGED apenas para alterações desde a última versão), 1–6 quadros [time, caption] nos momentos mais movimentados, labels e lang opcionais para o idioma da interface,
    • scripts/storyboard.py projeto/video.html projeto/storyboard.json sb/,
    • scripts/player.py projeto/video.html sb/ --chapters projeto/storyboard.json [--audio mix.mp3]: uma pré-visualização reproduzível no topo do storyboard, com uma linha do tempo de capítulos (como o YouTube) e comentários: Botão Comentário → clique em um elemento → uma nota com tempo, capítulo e elemento é copiada para o chat. O áudio deve ser MP3 (o artefato não serve .m4a),
    • scripts/check.py projeto/video.html (veja Verificações); corrija ou relate descobertas,
    • publique com publish_files (modo replace) incluindo capturas de tela, clipes e MP3; coloque o link no script,
    • termine com: "Storyboard je aktualizovaný. Napiš ‚vygeneruj video', nebo co změnit."
  5. Após cada comentário: atualize video.html → storyboard.json → storyboard + player → republicar → atualize o script em ambas as cópias. Responda brevemente com o que mudou.
  6. Renderize somente sob solicitação, na resolução da configuração. Alterar uma cena = re-renderizar apenas aquela cena. Nome da saída sem diacríticos, com versão (reel1_multimodel_v5.mp4); anote no script.
  7. Após o vídeo ser aprovado, pergunte se deve gerar textos de publicação e miniaturas (veja Publicação).

3. Conteúdo e ritmo

  • Uma saída = uma ideia principal; em um vídeo longo, uma ideia por capítulo.
  • Densidade: cerca de 4–6 pontos de aprendizado e 12–18 mudanças visuais por minuto; sem silêncio maior que ~3 s, mas tempo suficiente para ler uma legenda (cerca de 2–3 palavras por segundo).
  • Mostre, não liste: gráfico, comparação, causa e efeito, os passos reais em um site.
  • Verifique afirmações sobre sites, aplicativos e recursos no site ao vivo, não de memória. Não invente estatísticas.
  • Dados ilustrativos: anote no script; se devem ser rotulados na tela é decidido pelo perfil (formatos curtos: o mínimo de ruído visual possível).
  • Transições: crossfade por padrão; quando possível, conecte cenas (um gráfico se transforma no próximo, um cartão se expande em uma cena).
  • Marcas e logotipos reais apenas genuínos e não distorcidos; nunca coloque um logotipo de terceiros em dados ilustrativos.

4. Verificações

  • scripts/check.py projeto/video.html [--step 0.5] [--safe t,r,b,l]: texto fora da zona segura ou do quadro, texto transbordando, baixo contraste (WCAG), silêncio maior que 3 s. Zonas padrão por formato (9:16, 4:5, 1:1, 16:9); o perfil pode substituí-las.
  • scripts/keys.py project/video.html out t1 t2 …: quadros em determinados momentos + folha de contato; olhe para eles.
  • Após a renderização: alguns quadros do MP4 (ffmpeg -ss t -frames:v 1), duração, intensidade.

5. Áudio

  • Jingle e música do perfil; escreva a licença (autor, título, ID, fonte) no script.
  • scripts/mix_audio.py out/video_only.mp4 music.mp3 jingle.mp3 output.mp4 [--music-start s] [--jingle-len s] [--voice f] [--voice-start s] [--sfx f] [--target -14] (sem jingle ou sem música: - em vez do arquivo): música com duck sob o jingle, depois aumenta, faz duck automaticamente sob a narração, desaparece no final; loudnorm de duas passagens para −14 LUFS e pico verdadeiro −1.5 dBTP; o vídeo não é recodificado.
  • Pule uma introdução silenciosa da faixa (RMS por segundo) para que não haja queda após o jingle.
  • Efeitos sonoros que se encaixam no conteúdo, apenas em mudanças importantes e muito mais baixos que a música: scripts/sfx.py cues.json sfx.wav --dur <duration> gera em código: whoosh (transição de cena), click (quadro), pop (cartão aparece), tick (rótulo), swell (destaque), riser (crescimento), thud (veredito). Pegue os tempos (cues.json) da linha do tempo T e do campo "sound" no storyboard. Nenhum arquivo de áudio é armazenado; os efeitos são código. Opcional no Claude Code: earshot (MCP; 252 sons como código, escuta e verificações de sincronia), se Petr instalar (~1.1 GB de modelos).
  • Narração com sincronia de palavras: scripts/align_voice.py voiceover.wav project/ [--text script.txt] (Whisper, tcheco) cria vo.json, vo.js e vo.srt. Em video.html carregue <script src="vo.js"> e temporize gráficos para palavras: voAt('word') retorna o tempo de uma palavra; legendas palavra por palavra com wordCaption(el, t) (bom para 9:16, 4:5, 1:1). A gravação é o relógio mestre: pegue a duração e os tempos das cenas a partir dela, nunca estique nada. A temporização do Whisper é precisa até cerca de um décimo de segundo; verifique ouvindo. --text compara o texto real com o que foi ouvido.
  • Música licenciada pode acionar o Content ID; registre uma Disputa com a licença, não "Escalate to appeal".

6. Técnica

  1. Página projeto/video.html (comece de templates/start.html): window.FORMAT={w,h} (resolução de design), cenas como <div class="scene">, linha do tempo T={s1:[0,3.5],…}, seek(t) determinística (sem animações CSS, timers ou Math.random(); aleatoriedade com semente), no final window.seek=seek; window.T=T;. Fonte local via npm i @fontsource/<font> (o player muda para Google Fonts). Coloque logotipos inline como SVG.
  2. Gravações ao vivo da web (em vez de capturas de tela estáticas, quando a navegação por um site é importante): scripts/record_web.py steps.json out/ [--width 1280 --height 800 --scale 2]: Playwright navega pelo site por etapas (click, type, hover, spot = quadro com entorno escurecido, zoom/unzoom, scroll, wait, mark) com um cursor deslizante e uma ondulação no clique; saída web.mp4 + marks.json com tempos das etapas. Execute no PC de Petr (Claude Code); a sandbox da nuvem não consegue acessar sites normais. Rejeite banners de cookies. Em video.html adicione <video src="web.mp4" muted preload="auto"> e mova-o com vseek(video, time) (modelo); renderização, verificações e storyboard aguardam até que o seek seja concluído.
  3. Capturas de tela de sites com Claude no Chrome: document.documentElement.style.transform='scale(2)' (origem 0 0), mova o cursor para longe, save_to_disk; então amplie e enquadre no vídeo.
  4. Renderize scripts/render.py projeto/video.html out/ [--scale S] [--only s3 s6] [--workers 4]: um MP4 por cena em paralelo, CRF 18, concat -c copy. Pré-visualização --scale 0.5, 4K a partir de 1920×1080 --scale 2.
  5. Áudio scripts/mix_audio.py (veja acima).

Requer: Python com playwright, pillow, numpy, Chrome/Chromium, ffmpeg, Node (fontes); para narração faster-whisper.

7. Publicação (após aprovação e consentimento)

  • Textos para redes sociais a partir do perfil (Instagram, Facebook, YouTube): IG 3–5 linhas curtas + uma pergunta no final; FB carregue separadamente (não compartilhe do IG), texto mais curto; título do YouTube com até ~60 caracteres com palavras-chave primeiro, descrição (o quê, onde, regra principal, vídeo relacionado, música), timestamps de capítulos para vídeos longos. Hashtags apenas do conjunto do perfil. Salve no script (seção "Texty k publikaci").
  • Legendas do YouTube: carregue vo.srt (quando houver narração).
  • Miniaturas: reel 1080×1920 + 1280×720, vídeo 1280×720 (YouTube); texto grande, motivo principal, estilo do perfil. O YouTube pode não permitir uma miniatura personalizada para Shorts.

Habilidades Relacionadas