Sites cinematográficos|INEMA.CLUB-PRO

Aula 6 · 18 min

Fundo vivo: vídeo gerado dentro do site

Um filme de abertura longo não sai de um clipe só: sai de vários clipes curtos encadeados, cada um começando no último quadro real do anterior. O risco é o gerador cortar escondido no meio de um clipe. A skill site-movimento tem portões que pegam isso. Você roda os portões em clipes de ensaio, um contínuo e um com corte, sem gastar crédito.

Começar a aula
Monitor largo numa sala escura mostrando uma página cujo fundo é uma paisagem de montanhas com névoa ao amanhecer.

Nesta aula você vai

  1. 1Os sete passos da skill site-movimento e onde entram os portões
  2. 2O contrato dos motores (Kling, Agnes, Kie, seu próprio) testado sem gastar, com DRY_RUN
  3. 3Montar o filme e provar a continuidade; pegar o corte escondido
  4. 4O portão de texto em português, inglês e espanhol

Objetivo: encadear clipes num filme contínuo e provar com os portões do site-movimento que não há corte escondido.

01Clipes encadeados, sem pulo

O passo 4 da skill (vídeo). Clique em cada etapa.

Clique em cada bloco do diagrama para ver o que ele faz.

Sem motor de vídeo, a skill faz o filme em código (passos 1, 2, 5, 6 e 7 iguais). Números do piloto: 300 créditos de Kling 3.0 em 720p, 285 quadros no filme horizontal e 361 no vertical (README, 18/10/2026).

02O contrato dos motores, sem gastar

Com DRY_RUN=1 cada motor só mostra o que faria. O teste confere os quatro.

Terminal · baixar o site-movimento e testar os motores
E=${TMPDIR:-/tmp}/ensaio-sites/a6; rm -rf "$E"; mkdir -p "$E"; cd "$E"
git clone -q https://github.com/inematds/site-movimento && git -C site-movimento checkout -q d9a43a4; echo "clone: $?"
bash site-movimento/skill/site-movimento/tests/motores-contrato.sh; echo "saída: $?"
Exemplo do repositório
clone: 0
OK kling
OK agnes
OK kie
OK custom
4/4 motores OK
saída: 0

Nenhum serviço foi chamado: o DRY_RUN sai antes de ler qualquer chave. Gerar de verdade usa a conta e os créditos do motor que você escolher; o curso não faz isso.

03Dois clipes encadeados viram o filme do site

O ensaio imita o encadeamento: o clipe 2 começa no zoom em que o clipe 1 terminou.

Terminal · encadear, montar e provar a continuidade
K=~/projetos/formacao-cinema-ia-sites-v72/kit
E=${TMPDIR:-/tmp}/ensaio-sites/a6; SM=$E/site-movimento/skill/site-movimento/scripts
# dois clipes encadeados: o 2º começa exatamente onde o 1º terminou (zoom 1,25)
bash "$K/scripts/clipe.sh" "$K/exemplos/lente.jpg" "$E/c1.mp4" 4 1.0 1.25
bash "$K/scripts/clipe.sh" "$K/exemplos/lente.jpg" "$E/c2.mp4" 4 1.25 1.5
python3 "$SM/cortes.py" "$E/c1.mp4" "$E/c2.mp4" | sed "s#$E/##"; echo "cortes: ${PIPESTATUS[0]}"
rm -rf "$E/site"; cp -r "$K/site" "$E/site"
python3 "$SM/montar.py" "$E/site" "$E/c1.mp4:0:-1" "$E/c2.mp4:1:-1" | head -1 | sed "s#$E/##"
python3 "$SM/continuidade.py" "$E/site/frames" | sed "s#$E/##"; echo "saída: ${PIPESTATUS[0]}"
Exemplo do repositório
c1.mp4: 4,0 s · 24 fps · 1920×1080
c2.mp4: 4,0 s · 24 fps · 1920×1080
c1.mp4 quadros 97, mediana 1.00, piores [(77, 0.99), (90, 0.99)] ok
c2.mp4 quadros 97, mediana 1.00, piores [(1, 0.99), (95, 0.99)] ok
cortes: 0
site: 191 quadros, 3.4 MB, cor da emenda #050605
continuidade — site/frames: 48 quadros (a cada 4), mediana 0.983
PASSA — um movimento só
saída: 0

4 s + 4 s = 191 quadros (o quadro 0 do clipe 2 sai, para não repetir). O montar.py grava em site/frames, a pasta que a página do kit já lê.

04O corte escondido

Um clipe que pula de cena no meio: a lente no estúdio escuro e, de repente, no fundo claro.

Terminal · um clipe com corte
K=~/projetos/formacao-cinema-ia-sites-v72/kit
E=${TMPDIR:-/tmp}/ensaio-sites/a6; SM=$E/site-movimento/skill/site-movimento/scripts
# um clipe com corte escondido no meio: a lente no estúdio escuro e, de repente, no fundo claro
bash "$K/scripts/clipe.sh" "$K/exemplos/lente.jpg" "$E/a.mp4" 2 1.0 1.1
bash "$K/scripts/clipe.sh" "$K/exemplos/lente-clara.jpg" "$E/b.mp4" 2 1.1 1.2
ffmpeg -v error -y -i "$E/a.mp4" -i "$E/b.mp4" -filter_complex "[0:v][1:v]concat=n=2:v=1[v]" -map "[v]" -c:v libx264 -crf 18 "$E/c3.mp4"
python3 "$SM/cortes.py" "$E/c3.mp4" | sed "s#$E/##"; echo "saída: ${PIPESTATUS[0]}"
Exemplo do repositório
a.mp4: 2,0 s · 24 fps · 1920×1080
b.mp4: 2,0 s · 24 fps · 1920×1080
c3.mp4 quadros 97, mediana 1.00, piores [(48, 0.46), (72, 0.99)] CORTE no(s) quadro(s) [48]
saída: 1

O par de quadros 48 cai para 0,46 contra mediana 1,00: corte. Um corte entre dois quadros escuros e parecidos pode passar no cortes.py; por isso a skill também roda o continuidade.py e você olha o filme.

05A fila de clipes

Clipes pagos saem em ordem, um por vez. Rode, interrompa e rode de novo: só o que faltou volta.

fila/

rodando/

pronto/

falhou/

Simulação no navegador: nada é gerado. A falha é proposital, para mostrar que só o clipe com corte volta.

06O portão de texto em três línguas

Versão do site-movimento do portão da aula 3: lê português, inglês e espanhol.

Terminal · portão de texto na página do kit e no exemplo ruim
K=~/projetos/formacao-cinema-ia-sites-v72/kit
P=${TMPDIR:-/tmp}/ensaio-sites/a6/site-movimento/skill/site-movimento/scripts/portao-texto.js
node "$P" "$K/site/index.html"; echo "saída: $?"
node "$P" "$K/exemplos/texto-ruim-pt.html" 2>&1 | head -5; echo "saída: ${PIPESTATUS[0]}"
Exemplo do repositório
✓ ~/projetos/formacao-cinema-ia-sites-v72/kit/site/index.html — texto limpo
saída: 0
✗ ~/projetos/formacao-cinema-ia-sites-v72/kit/exemplos/texto-ruim-pt.html — 3 defeito(s)
  manda a pessoa rolar
    …Aurora 35 Role para baixo e veja a lente de perto.…
  narra a câmera
    …e de perto. Um plano-sequência A câmera avança pelo vidro até o diafragma…
saída: 1

O portão também reprova travessão, jargão de IA ("revolucionário"), texto provisório e o quadro do filme repetido como imagem logo abaixo.

07Prática

Os portões do filme, sem gerar nada.

E1 · Motores

5 min

Rode "baixar o site-movimento e testar os motores".

Pronto quando: 4/4 motores OK e saída: 0.

E2 · Filme contínuo

10 min

Rode "encadear, montar e provar a continuidade". Depois sirva a pasta site/ do ensaio e rode o verificar.mjs nela.

Pronto quando: PASSA — um movimento só com saída: 0, e o verificador responde quadros: 191 (frames/) e OK: 3 de 3 posições.

E3 · Pegar o corte

10 min

Rode "um clipe com corte". Depois troque lente-clara.jpg por lente2.jpg (outra foto escura) e rode de novo: anote o pior par e diga por que passou.

Pronto quando: Com a lente clara: CORTE no(s) quadro(s) [48] e saída: 1.

E4 · Seu texto

10 min

Rode o portão de texto na página que você está fazendo.

Pronto quando: texto limpo e saída: 0.

08Teste da aula

A explicação aparece depois da sua resposta.

Pergunta 1 de 4

De onde o clipe 2 deve começar?

09Em três frases

EncadearClipe N começa no último quadro real do anterior, em ordem.
Portõesfixação, cortes, continuidade; corte nunca entra.
Sem gastoDRY_RUN e clipes de ensaio provam o caminho antes do gerador.

Para ir além

Aula anteriorPróxima aula