Phase 08 - Lesson 10
Geração de Vídeo
Uma imagem é um tensor 2-D. Um vídeo é um tensor 3-D. A teoria é a mesma; a computação é de 10 a 100 vezes mais difícil. O Sora da OpenAI (Fev 2024) provou que era possível. Até 2026, Veo 2, Kling 1.5, Runway Gen-3, Pika 2.0 e WAN 2.2 entregam vídeos em produção a partir de texto em 1080p — e a pilha de pesos abertos (CogVideoX, HunyuanVideo, Mochi-1, WAN 2.2) está 12 meses atrás.
Tipo: Build Linguagens: Python Pré-requisitos: Phase 8 · 07 (Latent Diffusion), Phase 7 · 09 (ViT), Phase 8 · 06 (DDPM) Tempo: ~45 minutos
O Problema
Um vídeo de 10 segundos em 1080p a 24fps tem 240 quadros de 1920×1080×3 pixels. Isso representa cerca de 1,5 GB de dados brutos por clipe. A difusão no espaço de pixels é inviável. Você precisa de:
- Compressão espaço-temporal. Um VAE que codifica vídeos, e não quadros individuais, em uma sequência de patches espaço-temporais.
- Coerência temporal. Os quadros precisam compartilhar conteúdo, iluminação e identidade dos objetos ao longo dos segundos. A rede tem que modelar o movimento.
- Orçamento de computação. O treinamento de vídeo é de 10 a 100 vezes mais caro do que o de imagem para o mesmo tamanho de modelo.
- Condicionamento. Texto, imagem (primeiro quadro), áudio ou outro vídeo. A maioria dos modelos de produção aceita os quatro.
A arquitetura que resolveu isso é o Diffusion Transformer (DiT) aplicado a patches espaço-temporais, treinado em conjuntos de dados massivos (prompt, legenda, vídeo). Mesma perda de difusão da Lição 06.
O Conceito
Patchify
Codifique o vídeo com um VAE 3D (compressão espaço-temporal aprendida). O latente tem o formato [T_latent, H_latent, W_latent, C_latent]. Divida em patches de tamanho [t_p, h_p, w_p]. Para modelos do estilo Sora, t_p = 1 (patches por quadro) ou t_p = 2 (a cada dois quadros). Um vídeo de 10 segundos em 1080p é comprimido em aproximadamente 20.000 a 100.000 patches.
DiT Espaço-Temporal
Um transformer processa a sequência linearizada de patches. Cada patch possui uma incorporação posicional (positional embedding) 3D (tempo + y + x). A atenção geralmente é fatorada:
- Atenção espacial dentro dos patches de cada quadro.
- Atenção temporal entre quadros na mesma localização espacial.
- Atenção 3D completa é de 16 a 100 vezes mais cara; usada apenas em baixa resolução ou em pesquisa.
Condicionamento de texto
Atenção cruzada (cross-attention) com um codificador de texto grande (T5-XXL para o Sora, o CogVideoX-5B usa T5-XXL). Prompts longos importam — o conjunto de treinamento do Sora continha descrições densas geradas por GPT que tinham em média 200 tokens por clipe.
Treinamento
Perda de difusão padrão (predição de ε ou v) sobre latentes espaço-temporais. Dados: vídeos da web + ~100 milhões de clipes curados + legendas de texto sintéticas. Computação: mais de 10.000 horas de GPU mesmo para uma pequena rodada de pesquisa; na escala do Sora, são mais de 100.000 horas.
O cenário de produção de 2026
| Modelo | Data | Duração máxima | Resolução máxima | Pesos abertos? | Destaque |
|---|---|---|---|---|---|
| Sora (OpenAI) | 2024-02 | 60s | 1080p | Não | Primeiro modelo a mostrar propriedades de simulador de mundo em escala |
| Sora Turbo | 2024-12 | 20s | 1080p | Não | Sora de produção com inferência 5 vezes mais rápida |
| Veo 2 (Google) | 2024-12 | 8s | 4K | Não | Maior qualidade + física em 2025 |
| Veo 3 | 2025 Q3 | 15s | 4K | Não | Áudio nativo e controle de câmera mais forte |
| Kling 1.5 / 2.1 (Kuaishou) | 2024-2025 | 10s | 1080p | Não | Melhor movimento humano no primeiro trimestre de 2025 |
| Runway Gen-3 Alpha | 2024-06 | 10s | 768p | Não | Ferramentas de vídeo profissionais integradas |
| Pika 2.0 | 2024-10 | 5s | 1080p | Não | Maior consistência de personagens |
| CogVideoX (THUDM) | 2024 | 10s | 720p | Sim (2B, 5B) | Primeiro modelo aberto na escala de 5B |
| HunyuanVideo (Tencent) | 2024-12 | 5s | 720p | Sim (13B) | SOTA aberto no final de 2024 |
| Mochi-1 (Genmo) | 2024-10 | 5.4s | 480p | Sim (10B) | Termos mais permissivos |
| WAN 2.2 (Alibaba) | 2025-07 | 5s | 720p | Sim | Modelo aberto mais forte em meados de 2025 |
Os pesos abertos estão diminuindo a lacuna mais rápido do que no espaço de imagens: LoRAs do HunyuanVideo + WAN 2.2 já alimentam a maioria dos fluxos de trabalho de código aberto em meados de 2026.
Implementação
O arquivo code/main.py simula a ideia central do DiT espaço-temporal: transformar em patches um pequeno vídeo sintético, adicionar uma incorporação de posição (position embedding) por patch e remover o ruído de toda a sequência usando uma atenção estilo transformer sobre os patches. Sem numpy; Python puro. Mostramos que a coerência temporal surge mesmo em 1-D quando os patches de quadros adjacentes compartilham o mesmo removedor de ruído (denoiser) e incorporações de posição.
Passo 1: transformar em patches um "vídeo" sintético 1-D
def make_video(T_frames=8, rng=None):
# a "video" is a sequence of 1-D values following a smooth trajectory
base = rng.gauss(0, 1)
return [base + 0.3 * t + rng.gauss(0, 0.1) for t in range(T_frames)]
Passo 2: incorporação de posição por quadro
def pos_embed(t, dim):
return sinusoidal(t, dim)
Passo 3: o removedor de ruído vê toda a sequência
Em vez de remover o ruído de cada quadro de forma independente, nossa pequena rede concatena todos os valores dos quadros + suas incorporações de posição e prevê o ruído para todos os quadros de forma conjunta.
Passo 4: teste de coerência temporal
Após o treinamento, gere uma amostra de vídeo. Meça a variação (delta) quadro a quadro. Se o modelo aprendeu a estrutura temporal, as variações permanecerão menores do que se amostrássemos cada quadro de forma independente.
Armadilhas
- Amostragem independente por quadro = oscilação (flicker). Se você executar a difusão de imagem em cada quadro separadamente, a saída oscila porque o ruído de cada quadro é independente. A difusão de vídeo corrige isso acoplando os quadros por meio de atenção ou ruído compartilhado.
- Atenção 3D ingênua = OOM (Falta de Memória). A atenção 3D completa em um latente de 10 segundos a 1080p exige centenas de bilhões de operações. Fatore em atenção espacial + temporal.
- A legenda dos dados importa mais do que o tamanho. A principal melhoria do Sora em relação aos trabalhos anteriores foi o treinamento com legendas cerca de 10 vezes mais detalhadas (clipes rotulados novamente com o GPT-4). O relatório técnico da OpenAI é explícito sobre isso.
- Condicionamento do primeiro quadro. A maioria dos modelos de produção também aceita uma imagem como o primeiro quadro. Este é o modo "imagem para vídeo" (image-to-video); o treinamento inclui essa variante.
- Desvio da física (physics drift). Clipes longos (>10s) recomendam a aplicação de técnicas para mitigar inconsistências sutis. A geração em janela deslizante (sliding-window generation) + ancoragem de quadros-chave (keyframe anchoring) ajuda.
Como Usar
| Caso de uso | Escolha para 2026 |
|---|---|
| Texto para vídeo de maior qualidade, hospedado | Veo 3 ou Sora |
| Cinemático controlado por câmera | Runway Gen-3 com pincéis de movimento (motion brushes) |
| Consistência de personagens em diferentes clipes | Pika 2.0 ou Kling 2.1 |
| Pesos abertos, ajuste fino (fine-tune) rápido | WAN 2.2 + LoRA |
| Imagem para vídeo | WAN 2.2-I2V, Kling 2.1 I2V ou Runway |
| Sincronia labial (lip sync) de áudio para vídeo | Veo 3 (áudio nativo) ou um modelo dedicado de sincronia labial |
| Edição de vídeo | Runway Act-Two, Kling Motion Brush, Flux-Kontext (quadro estático) |
O custo por segundo de vídeo em paridade de qualidade caiu 20 vezes entre 2024 e 2026.
Produção
Salve outputs/skill-video-brief.md. A habilidade recebe um briefing de vídeo (duração, proporção de tela, estilo, plano de câmera, consistência do assunto, áudio) e produz: modelo + hospedagem, estrutura de prompt (linguagem de câmera, descrição do assunto, descritores de movimento), semente (seed) + protocolo de reprodutibilidade e uma lista de verificação de garantia de qualidade (QA checklist) no nível de quadros.
Exercícios
- Fácil. Em
code/main.py, compare a variação (delta) quadro a quadro para (a) amostragem independente quadro a quadro e (b) amostragem conjunta da sequência. Relate a média e a variância dessas variações. - Médio. Adicione uma condição para o primeiro quadro: fixe o quadro 0 em um valor específico e gere as amostras para o restante. Meça como o valor fixado se propaga.
- Difícil. Use a biblioteca diffusers do HuggingFace para rodar o CogVideoX-2B em uma GPU local. Cronometre o tempo de 20 etapas de inferência em 720p para um clipe de 6 segundos. Faça o perfil (profile) da atenção espaço-temporal para identificar o gargalo.
Termos-Chave
| Termo | O que dizem | O que realmente significa |
|---|---|---|
| Video VAE | "VAE 3-D" | Codificador que comprime (T, H, W, C) → latente espaço-temporal. |
| Patches | "Os tokens" | Blocos 3D de tamanho fixo do latente; entrada para o DiT. |
| Atenção fatorada | "Espacial + temporal" | Executar atenção sobre o espaço, depois sobre o tempo; ignorar a atenção 3D completa. |
| Imagem para vídeo (I2V) | "Animar esta foto" | O modelo recebe uma imagem + texto e gera um vídeo que começa a partir dela. |
| Condicionamento de quadros-chave | "Quadros âncora" | Fixar quadros específicos para controlar o arco do vídeo. |
| Pincel de movimento | "Dica direcional" | Entrada de interface onde o usuário desenha vetores de movimento na imagem. |
| Nova rotulagem | "Legendas densas" | Usar um LLM para rotular novamente os clipes de treinamento com prompts detalhados. |
| Oscilação (Flicker) | "Artefato temporal" | Inconsistência quadro a quadro; corrigida com remoção de ruído acoplada. |
Nota de produção: latentes de vídeo são um problema de largura de banda de memória
Um clipe de 10 segundos em 1080p a 24 fps tem 240 quadros × 1920 × 1080 × 3 ≈ 1,5 GB de pixels brutos. Após uma compressão VAE de vídeo de 4× (2 × espacial × 2 × temporal), o latente tem cerca de ~100 MB por requisição. Executar isso por meio de um DiT espaço-temporal por 30 etapas com tamanho de lote (batch) 1 significa mover ~3 GB/etapa pela HBM — a largura de banda de memória, e não os FLOPs, é o gargalo.
Três controles de produção, todos retirados diretamente da literatura de inferência em produção (capítulo de inferência):
- TP ao longo do DiT. Os modelos de texto para vídeo geralmente têm ≥10B de parâmetros. TP=4 em 4 H100s é o padrão; PP=2 × TP=2 para modelos da classe 405B. A latência por etapa cai de forma quase linear com o TP até atingir o limite de comunicação do all-reduce.
- Lote de quadros = lote contínuo (continuous batching). No momento da geração, o vídeo é conceitualmente um lote de quadros vinculados por atenção. O lote contínuo (in-flight scheduling) se aplica: comece a renderizar o quadro
t+1enquanto o quadrot-1está sendo retornado, se a arquitetura do modelo permitir a geração em janela deslizante. - Cache de preenchimento (prefill) no nível de clipe. Para imagem para vídeo, o condicionamento do primeiro quadro é análogo ao preenchimento de prompt de um LLM: calcule-o uma vez, reutilize-o nas passagens do decodificador temporal. Isso é, na prática, um KV-cache para vídeo.
Leitura Complementar
- Brooks et al. (2024). Video generation models as world simulators — Sora technical report.
- Yang et al. (2024). CogVideoX: Text-to-Video Diffusion Models with An Expert Transformer — CogVideoX.
- Kong et al. (2024). HunyuanVideo: A Systematic Framework for Large Video Generative Models — HunyuanVideo.
- Genmo (2024). Mochi-1 Technical Report — Mochi-1.
- Alibaba (2025). WAN 2.2 — open SOTA mid-2025.
- Ho, Salimans, Gritsenko et al. (2022). Video Diffusion Models — the seminal video diffusion paper.
- Blattmann et al. (2023). Align your Latents (Video LDM) — Stable Video Diffusion's ancestor.