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.mdoubrand/video-profil.mdna 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.
| Item | Exemplo |
|---|---|
| Tópico | MultiModel no Meteoblue |
| Predefinição | reel / video / feed 4:5 / square |
| Formato e resolução de design | 9:16 1080×1920 / 16:9 1920×1080 / 4:5 1080×1350 / 1:1 1080×1080 |
| Renderização final | 1080p, ou 4K (--scale 2 para 16:9) |
| Duração | 60–75 s / 8 min / … |
| Idioma do vídeo | cs |
| Narração | não / gravação própria (sincronia de palavras) |
| Legendas | incorporadas / palavra por palavra / SRT |
| Jingle, música | do perfil (arquivo + licença) |
| Efeitos sonoros | sim / não |
| Gravações ao vivo da web | não / sim (quais sites e etapas) |
Predefinições de formato
| Predefinição | Formato | Duração | O conteúdo se adapta |
|---|---|---|---|
| reel / short | 9:16, 1080×1920 | até 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 |
| video | 16:9, design 1920×1080, renderização até 4K | qualquer | capí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:5 | 4:5, 1080×1350 | ~1–2 min | Postagem de feed do Instagram (e LinkedIn), mais alta que quadrada |
| square | 1:1, 1080×1080 | ~1 min | postagem 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.
- Esboço no chat: uma lista numerada curta de seções (capítulos para um vídeo). Mantenha-a curta.
- 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.
- Script em
<projeto>/<saida>/scenar.mde a mesma cópia no projeto claude.ai. Cabeçalho = configuração + última renderização + link do storyboard + status. - Storyboard = artefato HTML (um link, sempre republicar no mesmo artefato):
projeto/video.htmlcom cenas eseek(t)(veja Técnica), mesmo antes de qualquer renderização,projeto/storyboard.json: seções comname,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,labelselangopcionais 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(modoreplace) incluindo capturas de tela, clipes e MP3; coloque o link no script, - termine com: "Storyboard je aktualizovaný. Napiš ‚vygeneruj video', nebo co změnit."
- 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. - 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. - 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 tempoTe 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) criavo.json,vo.jsevo.srt. Emvideo.htmlcarregue<script src="vo.js">e temporize gráficos para palavras:voAt('word')retorna o tempo de uma palavra; legendas palavra por palavra comwordCaption(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.--textcompara 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
- Página
projeto/video.html(comece detemplates/start.html):window.FORMAT={w,h}(resolução de design), cenas como<div class="scene">, linha do tempoT={s1:[0,3.5],…},seek(t)determinística (sem animações CSS, timers ouMath.random(); aleatoriedade com semente), no finalwindow.seek=seek; window.T=T;. Fonte local vianpm i @fontsource/<font>(o player muda para Google Fonts). Coloque logotipos inline como SVG. - 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ídaweb.mp4+marks.jsoncom tempos das etapas. Execute no PC de Petr (Claude Code); a sandbox da nuvem não consegue acessar sites normais. Rejeite banners de cookies. Emvideo.htmladicione<video src="web.mp4" muted preload="auto">e mova-o comvseek(video, time)(modelo); renderização, verificações e storyboard aguardam até que o seek seja concluído. - Capturas de tela de sites com Claude no Chrome:
document.documentElement.style.transform='scale(2)'(origem0 0), mova o cursor para longe,save_to_disk; então amplie e enquadre no vídeo. - 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. - Á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.