--- name: video-studio description: "Gera vídeos finalizados por código (FFmpeg, Python, Node, HyperFrames): vertical 9:16, horizontal 16:9 ou quadrado, curtos ou longos, com ou sem gravação de câmera, com cortes, legendas, motion graphics, música e SFX sintetizados. Use sempre que o usuário pedir para criar, editar, cortar, legendar ou renderizar um vídeo (Reel, TikTok, Short, YouTube, anúncio, explainer, vídeo animado)." --- # Video Studio Pipeline generalista para entregar um vídeo pronto (`final.mp4`) inteiramente por código. Nada de editor de vídeo com interface. Adapte o pipeline ao pedido: use só as fases que fazem sentido. Para o caso "gravação bruta falando para a câmera → Reel/TikTok/Short com cortes, layouts, gráficos, legendas, CTA, música e SFX", leia `references/talking-head-reel.md` (especificação completa, com números exatos). Para motion puro sem câmera, siga também a skill `motion`. ## Ambiente local (Vinicius) HyperFrames, FFmpeg e FFprobe estão instalados localmente em `C:\Users\vinni\Desktop\APPS IA\video-studio-env` (`npx hyperframes ...` roda de lá). Antes de usar ffmpeg/ffprobe no bash: `source "C:/Users/vinni/Desktop/APPS IA/video-studio-env/env.sh"`. Código-fonte e skills do HyperFrames em `APPS IA\hyperframes`. Opcionais ainda ausentes: whisper-cpp (transcrição; alternativa: `faster-whisper` em venv), Kokoro, MusicGen. ## 0. Briefing mínimo (inferir, não interrogar) Defina por inferência a partir do pedido e dos arquivos do projeto. Pergunte só se faltar entrada essencial. | Parâmetro | Padrão | Opções | |---|---|---| | Formato | 1080×1920 (9:16) | 1920×1080 (16:9), 1080×1080, 1080×1350 (4:5) | | FPS | 60 (30 se o pedido for longo/horizontal) | 24, 30, 60 | | Duração | a do material | curto ≤60 s, médio, longo | | Fonte | gravação + voz limpa | só voz, só gráficos, só imagens/clipes | | Estilo | claro, cartões brancos flutuantes (ver §5) | qualquer direção visual pedida | | Áudio | voz + música + SFX sintetizados | sem música, sem SFX, só voz | | Cortes | automáticos pela transcrição | nenhum, manual por tabela | Registre as decisões no relatório. Interrompa só se os arquivos de entrada estiverem ausentes ou ilegíveis. ## 1. Regras gerais (valem para todo vídeo) - **Autonomia:** execute até exportar `final.mp4`. Ferramenta falhou, tente alternativa. Ferramenta ausente, instale **localmente**. - **Instalação:** npm na pasta do projeto, Python em `venv` local. Nunca instale nada globalmente. - **Saída:** tudo numa pasta `edit/` (`final.mp4`, `stems/*.wav`, `report.md`, `work/` para intermediários). - **Determinismo:** cena = função pura do tempo (`seek(t)`), sem transitions CSS, timers, `Math.random()` (use seed). - **Duração exata:** defina `END` (fim exclusivo da faixa de voz ou da timeline). Toda camada termina em `END`. Sem quadro branco, imagem sobrando ou silêncio no final. - **Imagem de câmera:** nunca aplique zoom, aproximação ou movimento artificial ao vídeo gravado. Cortes secos. - **Fidelidade:** nunca reforce dado que diverge das fontes. Verifique números em 2+ fontes e registre divergências. - **Interface de produto que exige login:** reconstrua fielmente a partir de capturas públicas/documentação e declare a reconstrução. - **Entregas verificadas:** só entregue depois da verificação (§8). Corrija e reexporte. ## 2. Pipeline 1. **Ingestão:** `ffprobe` em tudo (resolução, fps, duração, canais). Detecte vertical vs horizontal. 2. **Sincronização** (se houver áudio de câmera + voz limpa): converta ambos a mono 16 kHz, correlação cruzada (`scipy.signal.correlate`/FFT), confirme pico claro, depois use só o áudio limpo. 3. **Transcrição por palavra:** HyperFrames transcribe, Whisper (`faster-whisper` em venv) ou equivalente. Agrupe em tomadas e detecte repetições. 4. **Seleção e corte:** última tomada completa de cada frase, salvo defeito audível. Cortes por RMS (janela 10 ms), silêncios longos reduzidos, J-cut de áudio (50 ms). Detalhes numéricos no reference. 5. **Tabela de trechos** (início, fim, layout, conteúdo) cobrindo 0→END, escrita **antes** de construir gráficos. 6. **Composições:** uma por trecho (HyperFrames/HTML+GSAP), renderizadas por `seek(t)`. Use subagentes em paralelo se disponíveis, com direção visual única. 7. **Áudio:** sintetize música, SFX e risers com NumPy/SciPy ou OfflineAudioContext. Stems separados, todos com a duração total. 8. **Montagem:** FFmpeg concat/overlay, legendas, capa, CTA, áudio master. 9. **Verificação e relatório.** ## 3. Layouts (alterne, sem repetir o mesmo em trechos consecutivos) - **A. Câmera em tela cheia:** recorte proporcional centrado (de 16:9 para 9:16, faixa central). Para opiniões, frases dirigidas ao espectador e encerramento. Só enquanto há contato visual com a lente. - **B. Dividido:** gráfico em cima, cartão de câmera embaixo com a cabeça cortada por máscara ultrapassando o cartão (mesmo quadro de origem para cartão e máscara). - **C. Totalmente visual:** gráficos ocupando a tela (telas de produto, notícias, demonstrações, números). Nenhum trecho contínuo passa de ~8 s. Em formato horizontal, adapte B para lado a lado (câmera num terço, gráfico nos outros dois). ## 4. Tipos de vídeo e como adaptar | Tipo | Fases usadas | Observações | |---|---|---| | Talking head → Reel/Short | todas | usar o reference completo | | Explainer animado (sem câmera) | 3 (só C), 6, 7, 8 | voz TTS só se o usuário fornecer/pedir; senão música + texto cinético | | Vídeo longo horizontal (YouTube) | 2 a 8 | 16:9, 30 fps, legendas menores, capítulos, ritmo de corte mais lento, trechos até ~15 s | | Montagem de clipes/imagens | 6, 7, 8 | Ken Burns só em imagens estáticas, nunca na câmera | | Só cortar/legendar | 1 a 4, 8 | sem gráficos, legendas queimadas | | Anúncio curto (≤15 s) | 6, 7, 8 | gancho nos primeiros 1,5 s, CTA final | ## 5. Direção visual padrão (sobrescreva se o usuário pedir outra) Tecnologia sofisticada: ambiente claro, cartões brancos flutuantes, câmera virtual. Fundo radial `#FFFFFF` (50% x, 36% y) até `#F3F3F0`. Sem grades, esferas decorativas ou áreas escuras. Sombra de 3 camadas (60/120 `rgba(24,24,32,.16)`, 24/48 `.10`, 4/10 `.06`). Poppins: títulos 96/700, subtítulos 52/700, corpo 30/400 (nada abaixo de 30 px). Texto `#111111`, terracota `#D97757` (texto sobre branco `#B25730`), destaque `#FBEEE8`, verde `#34C759`, vermelho `#FF3B30`. Uma ideia dominante por cena, movimentos suaves, a ação citada é **animada** (não só etiquetada). Movimento: motion blur proporcional à velocidade da câmera (renderize a 4× o fps final e combine com `tmix`/`tblend` no FFmpeg), sempre nítido em repouso, profundidade de campo só em cartões secundários, nunca desfocar texto legível. Valores exatos no reference. ## 6. Legendas Geradas dos tempos por palavra da faixa **final** de voz (pós-corte). 1 a 3 palavras por bloco, Poppins Bold, contorno preto, sem caixa. Destaque semântico alternado (serifada italic amarela `#FFFF00`), nunca dois seguidos, nunca em artigos/preposições. Posição fixa por trecho, nunca sobre rosto, borda de cartão ou conteúdo importante. Em 16:9, reduza o tamanho e use o terço inferior. ## 7. Áudio - Voz: normalizada a -14 LUFS integrados. - Música original (NumPy/SciPy), 100 a 120 BPM, minimalista, sem melodia competindo, nível fixo ~-24 LUFS, sem ducking, fade-out final de 800 ms. - SFX: um por evento visual significativo (clique, tecla, impacto, confirmação, whoosh só em movimentos rápidos de câmera). Picos relativos ao pico da voz (ver reference). - Riser só até o corte do gancho. - Master: soma dos stems sem reajustar níveis, ~-14 LUFS, true peak ≤ -1 dBTP, limitador só se necessário. Meça tudo com `ffmpeg -af ebur128=peak=true`. - Stems entregues: `voice.wav`, `sfx.wav`, `riser.wav`, `music.wav`, todos sincronizados e com a duração total. ## 8. Verificação (obrigatória) - Quadros reais dos dois lados de cada corte. - Prancha de contato do vídeo inteiro (`ffmpeg ... tile`), conferindo legendas, áreas seguras, ausência de grades/áreas escuras, capa limpa no quadro 0, máscara de cabeça sem erro. - Áudio: efeitos alinhados aos eventos, nenhum silêncio >150 ms em junções, loudness dentro de ±0,5 LU, true peak dentro do limite. - Formato final conferido com `ffprobe` (resolução, fps, codec H.264, AAC 48 kHz estéreo). Parâmetros de export: `-c:v libx264 -preset slow -crf 14 -pix_fmt yuv420p -movflags +faststart -c:a aac -b:a 256k -ar 48000 -ac 2`. ## 9. Relatório (`edit/report.md`) END em ms; tabela de trechos; tomadas escolhidas e substituições (com o conteúdo descartado); o que cada composição mostra; fatos verificados com fontes; divergências fala vs. fontes; lista de SFX com tempos; LUFS e true peak de cada stem e do master; reconstruções, alternativas técnicas e decisões; resultado da verificação. ## Diretrizes de criativos e motion do Vinicius (aprendidas em 19/10/2026; DIRETRIZ, não molde) Vale para TODAS as skills que criam peça visual, carrossel, vídeo ou animação. É um norte do que ele aprovou; cada cliente pode variar fonte, cor e estrutura (diga o que adotou). Detalhe: `C:\Users\vinni\creative-studio-hub\workspace\PLAYBOOK-CARROSSEL-VINICIUS.md` e `...\workspace\carrossel-advocacia\MOTION-GUIDE.md`. **Criativo / carrossel** - Processo: ler skill designer-photocraft + design system antes; plano aprovado; UM slide por vez mostrando o PNG; conferir cada PNG olhando a imagem; texto como camada viva; degradê real (nunca faixas); imagens via Magnific (nunca Firefly); MP4 no Instagram (não GIF). - Capa com impacto: foto cinematográfica de página inteira (mockup gerado por IA, não CSS), elementos de vidro/profundidade, gancho curto + frase em destaque com fonte de contraste (caso aprovado: Morganite itálico bold em bloco vermelho) e CTA claro. Fonte de impacto só na capa; demais slides sans forte (Manrope 800), títulos grandes, sem ponto final, sem enfeite repetido. - Margens 90px (1080x1350), respiro, entrelinha curta; antes/depois por ícone (discreto x chamativo); fundo muda com função; acento (vermelho) só em ação. - O produto mostrado convence: versão ruim genuinamente ruim, versão boa premium e densa, sem número inventado. **Motion / vídeo / animação (aplicar sempre)** - Todo pedido tem 4 partes: FORMATO (tamanho, fps, fundo) · TEMPO (duração, ritmo de cada entrada) · CURVA (easing, overshoot) · LOOP (último frame = primeiro; tudo visível desde o frame 0). Se faltar uma, a animação sai genérica. - Curva: NUNCA linear. Entrada = ease-out (rápido no início, suave no fim); saída = ease-in; ease-in-out só entre dois estados de mesma importância. Overshoot leve (1.05-1.10 -> 1) via curva com y>1 ou spring; cubic-bezier simples não faz mola, então use keyframes densos (por frame) ou spring. - Entradas suaves: slide curto em arco + fade + escala de 0.95 -> 1, ou blur de 8-15px -> 0 em texto; container chega primeiro, conteúdo 50-100ms depois (follow-through / overlapping); cascata ~80ms (no máx. ~5 itens); duração 200-300ms cards, 300-500ms hero; segurar ~2s legível. - Princípios: antecipação antes do movimento, squash & stretch no impacto, trajetória em arco, micro-movimento no repouso, brilho suave. - Trocas de estado (feio -> bonito) acontecem SÓ dentro do bloco/imagem, não na peça toda. Evitar wipe linear, blur pesado, faixas chapadas, tudo entrando junto. - Verificar frames intermediários antes de entregar.