---
name: video
description: Criacao de videos profissionais com Remotion (React). Planeia conteudo, scripts e workflows de producao.
---

# /video - Criacao de Videos com Remotion

Cria videos profissionais usando **Remotion** (React) a partir de descricoes em linguagem natural.

## Contexto NotebookLM

ANTES de executar, consultar notebooks para contexto especializado:

| Notebook | ID | Consultar quando |
|----------|-----|-----------------|
| Producao de Video e YouTube | `058a896e` | Para planeamento de video |
| Remotion Deep Research | `f2b75baa` | Para implementacao tecnica Remotion |

```
mcp__notebooklm__notebook_query({
  notebook_id: "058a896e-6c9a-4e51-ae7d-9adb2738bc5f",
  query: "<adaptar ao contexto>"
})

mcp__notebooklm__notebook_query({
  notebook_id: "f2b75baa-1ab1-48d3-8f7c-a6a9e516934c",
  query: "<adaptar ao contexto>"
})
```

---

## Arquitectura

```
Prompt Natural -> Claude Code -> Codigo React/Remotion -> Video MP4/GIF/WebM
```

| Componente | Funcao |
|------------|--------|
| **Remotion** | Framework React para videos programaticos |
| **Esta Skill** | Ensina Claude a gerar codigo Remotion correcto |
| **Output** | MP4, GIF, WebM em qualquer resolucao |

---

## Projecto Base

```
/media/ealmeida/Dados/Dev/remotion-demo/
```

Ja configurado com Remotion 4.x, Agent Skills, composicao de exemplo e scripts de renderizacao.

---

## Uso Rapido

```bash
# 1. Navegar ao projecto
cd /media/ealmeida/Dados/Dev/remotion-demo

# 2. Descrever o video pretendido ao Claude
"Cria um video de 10 segundos para [empresa] com logo animado e tagline"

# 3. Renderizar
npm run render
# ou
npx remotion render [CompositionName] out/video.mp4
```

### Comandos Disponiveis

| Comando | Descricao |
|---------|-----------|
| `npm run dev` | Abrir Remotion Studio (preview) |
| `npm run render` | Renderizar DemoVideo para MP4 |
| `npm run render:gif` | Renderizar para GIF |

---

## Estrutura de Prompt Recomendada

```
Cria um video de [duracao] segundos para [empresa/proposito] com:
- Resolucao: [1920x1080 / 1080x1920 / 1080x1080]
- FPS: [30 / 60]
- Fundo: [cor solida / gradiente / imagem]
- Sequencia de animacao:
  1. [Elemento] [animacao] (frames X-Y)
  2. [Elemento] [animacao] (frames X-Y)
- Texto: [titulo, subtitulo, CTA]
- Estilo: [minimalista / corporativo / energetico / elegante]
```

---

## Exemplos de Prompts

### Intro Corporativa

```
Cria um video intro de 5 segundos para "Descomplicar" com:
- Resolucao: 1920x1080, 30fps
- Fundo: gradiente de #1e3a8a para #7c3aed
- Animacao:
  1. Logo fade in com bounce (0-45 frames)
  2. Tagline "Crescimento Digital" slide up (45-90 frames)
  3. Linha decorativa expande (60-120 frames)
- Estilo: profissional e moderno
```

### Reel/Short Vertical

```
Cria um video vertical de 15 segundos para Instagram Reels com:
- Resolucao: 1080x1920, 30fps
- Tema: "5 Dicas de SEO"
- Sequencia:
  1. Titulo impactante com zoom (0-30 frames)
  2. Dica 1 slide in (30-90 frames)
  3. Dica 2 slide in (90-150 frames)
- CTA final: "Segue para mais!"
```

---

## Conceitos Remotion Essenciais

### Timing

- **Frames**: Unidade base (30fps = 30 frames/segundo)
- **useCurrentFrame()**: Frame actual da animacao
- **interpolate()**: Mapear frames para valores (opacity, position, scale)
- **spring()**: Animacoes com fisica (bounce, elastic)

### Componentes Core

```tsx
import {
  AbsoluteFill,      // Container full-screen
  Sequence,          // Sequenciar elementos no tempo
  useCurrentFrame,   // Frame actual
  useVideoConfig,    // fps, width, height, duration
  interpolate,       // Interpolacao linear
  spring,            // Animacao spring
  Img,               // Imagens
  Audio,             // Audio
  Video,             // Video embebido
} from "remotion";
```

### Estrutura de Composicao

```tsx
// src/Root.tsx
<Composition
  id="NomeVideo"
  component={MeuComponente}
  durationInFrames={150}  // 5s a 30fps
  fps={30}
  width={1920}
  height={1080}
  defaultProps={{ titulo: "Exemplo" }}
/>
```

---

## Opcoes de Renderizacao

### Qualidade

```bash
npx remotion render Video out.mp4 --crf=18   # Alta qualidade (lento)
npx remotion render Video out.mp4 --crf=23   # Qualidade media (rapido)
npx remotion render Video out.mp4 --crf=28   # Baixa qualidade (muito rapido)
```

### Formatos

```bash
npx remotion render Video out.mp4                    # MP4 (H.264)
npx remotion render Video out.gif --codec=gif        # GIF
npx remotion render Video out.webm --codec=vp8       # WebM
npx remotion render Video out.mov --codec=prores     # ProRes
```

### Props Dinamicas

```bash
npx remotion render Video out.mp4 \
  --props='{"titulo":"Descomplicar","cor":"#1e3a8a"}'
```

---

## Resolucoes Comuns

| Formato | Resolucao | Uso |
|---------|-----------|-----|
| 16:9 HD | 1920x1080 | YouTube, Website |
| 16:9 4K | 3840x2160 | YouTube 4K |
| 9:16 Vertical | 1080x1920 | Reels, TikTok, Shorts |
| 1:1 Quadrado | 1080x1080 | Instagram Feed |
| 4:5 Portrait | 1080x1350 | Instagram Feed optimal |

---

## Casos de Uso

| Tipo | Duracao | Resolucao |
|------|---------|-----------|
| Logo Intro | 3-5s | 1920x1080 |
| Promo Rapida | 15-30s | 1080x1920 |
| Explainer | 60-120s | 1920x1080 |
| Social Post | 5-15s | 1080x1080 |
| YouTube Intro | 5-10s | 1920x1080 |
| Stories | 15s | 1080x1920 |

---

## Boas Praticas

### Performance

- Usar `React.memo()` para componentes pesados
- Evitar re-renders desnecessarios
- Pre-carregar assets com `staticFile()`

### Animacoes

- Comecar com `interpolate()` para animacoes simples
- Usar `spring()` para movimentos naturais
- Combinar `Sequence` para organizar timeline

### Assets

- Colocar imagens/audio em `public/`
- Usar `staticFile("nome.png")` para referenciar
- Formatos recomendados: PNG (imagens), MP3/WAV (audio)

---

## Troubleshooting

| Problema | Solucao |
|----------|---------|
| Video preto | Verificar `AbsoluteFill` tem background |
| Fontes nao carregam | Usar `@remotion/google-fonts` |
| Animacao nao funciona | Verificar range de frames no `interpolate` |
| Erro de modulo | `rm -rf node_modules && npm install` |
| Render lento | Reduzir `--concurrency` ou usar `--crf` maior |

---

## Workflow Completo

```
1. DEFINIR -> Duracao, resolucao, estilo
2. DESCREVER -> Prompt detalhado ao Claude
3. GERAR -> Claude cria componentes React
4. PREVIEW -> npm run dev (Remotion Studio)
5. AJUSTAR -> Refinar animacoes/timing
6. RENDER -> npx remotion render
7. EXPORTAR -> MP4/GIF/WebM conforme necessidade
```

---

## Referencias Detalhadas

Para conteudo detalhado, consultar:

- [references/components.md](references/components.md) - Animacoes prontas, templates, paletas de cores, tipografia, motion design, acessibilidade
- [rules/animations.md](rules/animations.md) - Animacoes fundamentais
- [rules/timing.md](rules/timing.md) - Interpolacao e easing
- [rules/transitions.md](rules/transitions.md) - Transicoes entre cenas
- [rules/sequencing.md](rules/sequencing.md) - Organizacao temporal
- [rules/fonts.md](rules/fonts.md) - Carregamento de fontes
- [rules/images.md](rules/images.md) - Trabalhar com imagens
- [rules/audio.md](rules/audio.md) - Audio e som
- [rules/tailwind.md](rules/tailwind.md) - TailwindCSS no Remotion

---

## Anti-Patterns

- Nao usar para tarefas fora do dominio de video/Remotion
- Nao usar quando outra skill mais especifica esta disponivel
- Nao executar sem confirmar requisitos com o utilizador

---

**Projecto Base**: `/media/ealmeida/Dados/Dev/remotion-demo/`
**Documentacao**: [remotion.dev/docs](https://remotion.dev/docs)

---

## Media Bank (D7-MB-001)

**Quando consultar:** antes de produzir vídeos Remotion — para B-roll, clips de abertura, backgrounds e transições. Reutilizar matéria-prima evita regeneração IA cara e mantém consistência visual.

**Workflow tentativa-primeiro:**

1. Pesquisar via MCP `media-bank`:
   ```
   mcp__media-bank__search_media(
     query="<descrição EN da cena/tema>",
     type="video",
     tema="<um dos 9 temas>",
     orientation="landscape",
     min_quality=7,
     min_width=1920,
     min_duration=3,
     max_duration=15,
     exclude_used_in_last_days=30,
     limit=5
   )
   ```
2. Avaliar candidatos por `description_en`, duração e `quality_score`.
3. Se ≥1 adequado → usar `path_local` como input directo no Remotion (`<Video src={staticFile(...)} />` ou importar para assets).
4. Se nenhum → fallback para geração IA (Replicate/Runway) ou imagens estáticas animadas.
5. Marcar uso: `mcp__media-bank__mark_used(asset_id, {type:"remotion-video", ref:"<projecto>", date:"<YYYY-MM-DD>"})`.

**Fallback REST** (se MCP indisponível):
```bash
SK=$(grep SERVICE_KEY /media/ealmeida/Dados/Hub/05-Projectos/Banco-Imagens-Videos/scripts/.env | cut -d= -f2)
curl -s "https://mem.descomplicar.pt/rest/v1/media_bank_assets?type=eq.video&orientation=eq.landscape&quality_score=gte.7&deleted_at=is.null&order=quality_score.desc&limit=5" \
  -H "apikey: $SK" -H "Authorization: Bearer $SK"
```

**Regra inviolável:** matéria-prima local. Usar como input para composição Remotion — NUNCA servir o ficheiro raw publicamente sem edição/montagem.

Ver `Hub/06-Operacoes/Procedimentos/D7-Tecnologia/MCP/PROC-Media-Bank.md` (D7-MB-001) para detalhes.

---

## Healing Log

Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.

```jsonl
{"date":"","issue":"","fix":"","source":"user|auto"}
```

*Adicionar nova linha após cada erro corrigido.*
