Communitygithub.com

Ameliawampler/blender-product-video

Crie um filme de produto silencioso, guiado por texto, onde um cenário fotorrealista do Blender carrega uma metáfora visual e um grid de blocos 2D no final soletra o título e a chamada para ação. Use quando alguém quiser um vídeo de lançamento, explicador de produto ou curta-metragem de marca, renderizado a partir de código com Blender (bpy), Python e ffmpeg, especialmente em uma máquina sem GPU.

O que é blender-product-video?

Esta skill oferece um método completo e um exemplo funcional para criar um filme de produto de 45 a 75 segundos que comunica efetivamente mesmo sem som. Ela utiliza o Blender, Python e ffmpeg para construir um cenário fotorrealista (como grama, um portão de madeira e um céu realístico) que carrega uma metáfora visual única. Sobreposições de texto curtas explicam o que as imagens não conseguem, e o filme termina com um grid de blocos coloridos que se viram para formar o título e a chamada para ação. Tudo é controlado por código, sem interface gráfica. A skill é especialmente útil para desenvolvedores e criadores que precisam de vídeos de produto, explicadores ou curtas de marca renderizados em máquinas sem GPU, utilizando apenas CPU. Ela inclui um pipeline de duas passagens (plates e layers) que otimiza o tempo de renderização, além de um compositor 2D que adiciona movimentos de câmera, texto e o grid final. O código é modular, com scripts separados para construção do cenário, animação e composição, permitindo fácil customização e iteração. Suporta a criação de personagens opcionais (como uma coruja voxel) e oferece um fluxo de trabalho passo a passo, desde o briefing até a renderização final, com verificações de qualidade em cada etapa.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Ameliawampler/blender-product-video/tree/HEAD

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Vídeo de produto no Blender

Um método e um exemplo funcional para um filme de produto de 45 a 75 segundos que se lê com o som desligado. Um cenário fotorrealista (grama, um portão de madeira, um céu real) carrega uma metáfora visual. Sobreposições curtas de texto dizem o que as imagens não conseguem. O filme termina se transformando em um grid plano de blocos coloridos que viram para soletrar o título e a chamada para ação.

Tudo é código: o cenário, a animação, a composição. Nada é aberto em uma GUI.

O que há nesta pasta

CaminhoO que é
film.jsonPaleta, texto de sobreposição com temporizações, linhas finais. Edite isso primeiro.
scripts/blender/build.pyO cenário: colina com grama de partículas de cabelo, portão, blocos foscos, céu, neblina, configurações de render.
scripts/blender/mascot.pyPersonagem de exemplo: uma coruja voxel pequena o suficiente para sentar em um poste de cerca.
scripts/blender/film.pyPlanos, câmeras, animação quadro a quadro. Renderiza plates e layers.
scripts/post/comp.pyCompositor: plates + layers, movimentos de câmera 2D, texto, correção de cor, final em blocos 2D, codificação ffmpeg.
assets/Duas placas de céu (dourado, nublado). Substitua pelas suas.
examples/Quadros de um filme feito com este pipeline.

O filme de exemplo é "O Portão": blocos idênticos rolam por um portão aberto em um ritmo constante, então chegam em todos os tamanhos, depois enxameiam. O portão se fecha, e depois disso os blocos são deixados passar, contados ou parados. Trate-o como uma referência para a estrutura, depois substitua a metáfora por uma que se encaixe no produto.

Fluxo de trabalho

Faça na seguinte ordem. Obtenha aprovação em cada etapa numerada antes de gastar tempo de renderização na próxima.

  1. Briefing. Uma frase cada: para quem é, o problema, a mudança, a promessa, a chamada para ação. Decida a duração (45 a 75 s), o aspecto e onde será exibido. Presuma reprodução sem som.
  2. Metáfora. Escolha uma imagem física para o problema e uma mudança nessa imagem para o produto. Um lugar, um objeto principal, um tipo de objeto em movimento. Se precisar de explicação, escolha novamente.
  3. Storyboard. 6 a 8 planos. Para cada: duração, o que se move, a linha de sobreposição (menos de 8 palavras, uma ideia), posição e lente da câmera. Ato do problema em luz fria e nublada, ato do produto em luz quente. Mostre como uma tabela e obtenha aprovação.
  4. Personagem (opcional). Um pequeno protagonista dá ao olho um lugar para descansar. Ofereça 3 ou 4 opções como esboços planos antes de modelar qualquer coisa. Dimensione-o em relação ao cenário: deve caber no objeto principal. Construa-o a partir de primitivas simples (a coruja tem cubos de 1 cm).
  5. Cenário em código. Adapte build.py. Mantenha as unidades em metros com o objeto principal na origem. Renderize um still de cada plano com amostras baixas e olhe para cada um antes de animar.
  6. Animação. Em film.py, cada plano tem setup_X (criar objetos uma vez) e update_X(t) (posicionar tudo para o segundo de filme t). Funções puras do tempo, sem keyframes, para que qualquer quadro possa ser renderizado sozinho e uma renderização interrompida retoma de onde parou.
  7. Renderização em duas passagens. python scripts/blender/film.py plates, depois ... layers. Veja abaixo.
  8. Composição. python scripts/post/comp.py out.mp4 --draft para uma verificação rápida (a cada 6 quadros), depois sem --draft. Use --only-ending enquanto ajusta o final.
  9. Assista. Extraia stills no ponto médio de cada sobreposição e verifique: o texto é legível, a coisa que o texto nomeia está visível no quadro, algo aparece entre os planos. Corrija e re-renderize apenas o plano afetado (delete seus arquivos em layers/).

A renderização em duas passagens

Grama fotorrealista é lenta. Objetos em movimento são baratos. Portanto, são renderizados separadamente.

  • Plates. Um still por plano do cenário completo (grama, objeto, céu), 1280x720 com 36 amostras no exemplo. Um plano que muda de luz recebe duas plates que o compositor faz cross-fade.
  • Layers. Apenas o que se move, em um fundo transparente, em resolução e amostras menores. O chão é um shadow catcher para que os objetos ainda projetem sombras. Objetos estáticos são holdouts para que os objetos passem atrás deles corretamente. O céu permanece para iluminação, mas fica escondido da câmera.
  • Compositor. Coloca a layer sobre a plate, então simula movimento de câmera com um push ou drift 2D lento por plano. Uma câmera 3D travada é o que torna a plate reutilizável.

Três coisas mantêm o custo baixo:

  • Loops. Se um plano é um fluxo constante, torne o movimento periódico (espaçamento 0.84 m a 0.84 m/s repete a cada segundo) e renderize um período. LOOP em film.py e comp.py lista esses planos.
  • Em pares. Layers são renderizadas a cada dois quadros (STEP = 2) e mantidas. Lê-se como stop motion, que combina com objetos pequenos e blocos.
  • Retomada. Cada quadro é ignorado se seu arquivo existir.

Para escala: o filme de exemplo (51 s de 3D mais um final de 12.5 s) é 8 plates e 456 quadros de layers. Renderizou apenas em CPU.

O final 2D

comp.py desenha diretamente, sem Blender. Um grid de 64x36 quadrados arredondados na paleta voa para dentro sobre o último quadro 3D com 6 colunas de largura, a câmera se afasta até que todas as 64 colunas apareçam, então uma onda diagonal vira cada bloco (um squash vertical até zero e de volta, com a troca de cor no ponto médio) para sua cor final. As cores finais vêm de uma fonte de 3x5 pixels, então os blocos se tornam o texto.

Limites para planejar a cópia: até quatro linhas, 12 caracteres cada (11 parece melhor), maiúsculas, dígitos e . - / !. Defina-os em film.json sob ending com uma linha do grid e uma chave de paleta.

Editando film.json

  • palette: sete cores hex. primary, accent, warm, soft, deep, paper (fundo do final e o bloco padrão), alarm (a cor de "algo está errado").
  • overlays: [início, fim, "texto", x] em segundos de filme. x é opcional, uma posição horizontal de 0 a 1 para quando o assunto está onde o texto centralizado o cobriria. Use \n para duas linhas.
  • ending: as linhas que os blocos soletram.
  • font: caminho para um .ttf ou .otf para sobreposições. Cai para Inter, DejaVu, Helvetica ou Arial.

As durações dos planos vivem em SHOTS no topo de film.py e comp.py. Mantenha-as iguais.

Setup

python -m venv venv && . venv/bin/activate
pip install bpy==5.3.0 numpy pillow     # bpy é o wheel do Blender; precisa do Python correspondente
# ffmpeg deve estar no PATH

TEST=1 python scripts/blender/film.py plates    # 480x270, um quadro por plano, alguns minutos
TEST=1 python scripts/blender/film.py layers
python scripts/post/comp.py draft.mp4 --draft

FILM_OUT=/algum/dir escreve plates/ e layers/ lá em vez de nesta pasta. FILM_CONFIG aponta para um film.json diferente. GRASS_NEAR e GRASS_MID (porcentagem) afinam a grama. Com o Blender desktop em vez do wheel: blender -b -P scripts/blender/film.py -- plates.

Armadilhas que custam tempo real

  • Comprimento da grama. Definir normal_factor de um sistema de partículas de cabelo redefine hair_length. Defina hair_length por último ou cada fio terá metros de comprimento e o campo parecerá com motion blur.
  • Parentesco. Parentear move o filho a menos que você defina matrix_parent_inverse. Partes articuladas pularão do objeto.
  • Céu. Uma imagem de céu em um cilindro UV estica. Use painéis espelhados em um cilindro grande, ou um plano plano se a câmera nunca panorâmica. Mantenha um sol físico para a luz real.
  • Texto sobre o assunto. Verifique cada sobreposição contra o quadro abaixo dela. Mova o texto com x antes de mover a câmera.
  • Zoom esconde coisas. Se uma sobreposição nomeia algo ("Bloqueado."), confirme que o crop 2D ainda o contém.
  • Desbotamento de cor. Superfícies pintadas sob AgX precisam de cores base mais escuras que o hex da marca. Telas e qualquer coisa que precise ser lida como uma cor exata devem ser emission.
  • Sem GPU. Faça orçamento por quadro: cronometre um quadro de layer, multiplique, depois corte resolução, amostras ou duração do plano até caber. Não comece uma renderização que você não cronometrou.
  • Reinícios de contêiner. Renderizações longas são interrompidas. A verificação de pular-se-existe é o que te salva.

O que este pipeline não faz

Seja direto com a pessoa sobre isso antes que ela espere.

  • Câmeras 3D em movimento. Os planos são travados com movimentos 2D por cima. Parallax real significa renderizar o cenário a cada quadro, o que precisa de uma GPU.
  • Motion blur e movimento a 24 fps em layers. Aumente as amostras, defina STEP = 1 e ative render.use_motion_blur quando o hardware permitir.
  • Objetos ficam em cima da grama, não dentro dela, porque a grama está na plate.
  • Som. O filme é construído para funcionar sem som. Adicione música e efeitos depois, se desejado.
  • Telas, UI ou logotipos no mundo 3D. Deliberadamente deixados de fora: UI de produto em um campo fotorrealista parece falso. Coloque visuais do produto no final 2D ou em um corte separado.

Para uma passagem de qualidade final

1920x1080 ou superior para ambas as passagens, 128+ amostras com denoising, renderização em GPU (OptiX ou Metal), STEP = 1, motion blur ativado, e W, H em comp.py aumentados para corresponder. Divida quadros entre máquinas por número de quadro; cada quadro é independente.

Habilidades Relacionadas