# /video - Componentes e Templates Remotion ## Animações Prontas (Copy-Paste) ### Fade In com Scale ```tsx import { interpolate, useCurrentFrame } from "remotion" export function FadeInScale({ children }: { children: React.ReactNode }) { const frame = useCurrentFrame() const opacity = interpolate(frame, [0, 30], [0, 1], { extrapolateRight: "clamp" }) const scale = interpolate(frame, [0, 30], [0.8, 1], { extrapolateRight: "clamp" }) return (
{children}
) } ``` ### Slide Up ```tsx export function SlideUp({ children, delay = 0 }: { children: React.ReactNode; delay?: number }) { const frame = useCurrentFrame() const y = interpolate(frame, [delay, delay + 20], [50, 0], { extrapolateRight: "clamp" }) const opacity = interpolate(frame, [delay, delay + 20], [0, 1], { extrapolateRight: "clamp" }) return (
{children}
) } ``` ### Bounce In (Spring) ```tsx import { spring, useCurrentFrame, useVideoConfig } from "remotion" export function BounceIn({ children }: { children: React.ReactNode }) { const frame = useCurrentFrame() const { fps } = useVideoConfig() const scale = spring({ frame, fps, config: { damping: 10, stiffness: 200, mass: 0.5 }, }) return (
{children}
) } ``` ### Text Reveal (Linha por Linha) ```tsx export function TextReveal({ lines }: { lines: string[] }) { const frame = useCurrentFrame() return (
{lines.map((line, i) => { const delay = i * 15 const opacity = interpolate(frame, [delay, delay + 10], [0, 1], { extrapolateRight: "clamp" }) return (
{line}
) })}
) } ``` --- ## Templates Prontos ### Logo Intro (5s) ```tsx import { AbsoluteFill, Img, interpolate, spring, useCurrentFrame, useVideoConfig } from "remotion" export function LogoIntro({ logoSrc }: { logoSrc: string }) { const frame = useCurrentFrame() const { fps } = useVideoConfig() const logoScale = spring({ frame: frame - 10, fps, config: { damping: 12, stiffness: 200 } }) const taglineY = interpolate(frame, [60, 90], [50, 0], { extrapolateRight: "clamp" }) const taglineOpacity = interpolate(frame, [60, 90], [0, 1], { extrapolateRight: "clamp" }) return (
Crescimento Digital
) } ``` ### Stats Highlight (3s) ```tsx export function StatsHighlight({ stat, label }: { stat: string; label: string }) { const frame = useCurrentFrame() const { fps } = useVideoConfig() const scale = spring({ frame, fps, config: { damping: 10, mass: 0.5, stiffness: 200 } }) const labelOpacity = interpolate(frame, [30, 45], [0, 1], { extrapolateRight: "clamp" }) return (
{stat}
{label}
) } ``` --- ## Paletas de Cores ### Corporativo Profissional ```tsx const colors = { background: "#0f172a", primary: "#3b82f6", secondary: "#8b5cf6", text: "#f8fafc", accent: "#10b981", } ``` ### Energético/Marketing ```tsx const colors = { background: "#ff006e", primary: "#ffbe0b", secondary: "#fb5607", text: "#ffffff", accent: "#8338ec", } ``` ### Minimalista/Elegante ```tsx const colors = { background: "#fafafa", primary: "#18181b", secondary: "#71717a", text: "#18181b", accent: "#a855f7", } ``` --- ## Tipografia para Vídeo ### Hierarquia de Tamanhos ```tsx // Remotion 1920x1080 const textSizes = { hero: "120px", h1: "80px", h2: "60px", h3: "40px", body: "32px", caption: "24px", } // Remotion 1080x1920 (Vertical) const textSizesVertical = { hero: "80px", h1: "56px", h2: "40px", h3: "32px", body: "24px", caption: "18px", } ``` ### Font Pairings ```tsx // Moderno Tech // Editorial Elegante ``` --- ## Motion Design Guidelines ### Duração de Animações | Tipo | Frames (30fps) | Duração | |------|----------------|---------| | Micro (hover, toggle) | 3-6 | 100-200ms | | Rápida (fade, slide) | 12-18 | 400-600ms | | Normal (entrada cena) | 24-30 | 800-1000ms | | Lenta (transição cena) | 45-60 | 1.5-2s | ### Easing Curves ```tsx import { Easing } from "remotion" const easeOut = Easing.bezier(0, 0, 0.2, 1) const easeIn = Easing.bezier(0.4, 0, 1, 1) const easeInOut = Easing.bezier(0.4, 0, 0.2, 1) const y = interpolate(frame, [0, 30], [100, 0], { easing: easeOut, extrapolateRight: "clamp" }) ``` ### Princípios de Motion 1. **Staging** - Um movimento de cada vez 2. **Anticipation** - Preparação antes do movimento 3. **Follow Through** - Overshooting ligeiro 4. **Timing** - Velocidade comunica peso/importância 5. **Exaggeration** - Amplificar para ênfase --- ## Acessibilidade ```tsx // Contraste mínimo 4.5:1 const good = { color: "#1f2937", background: "#ffffff" } // Ratio 15.8:1 // Tamanho mínimo de texto const minSize1080p = "28px" const minSize4k = "56px" ```