E1 · Motores
5 minEjecuta "baixar o site-movimento e testar os motores".
Listo cuando: 4/4 motores OK y saída: 0.
Clase 6 · 18 min
Una película de apertura larga sale de varios clips cortos encadenados, cada uno empezando en el último cuadro real del anterior. El riesgo es un corte escondido en medio de un clip. La skill site-movimento tiene puertas de control que lo detectan. Las ejecutas en clips de ensayo, uno continuo y otro con corte, sin gastar crédito.
Comenzar la clase
Objetivo: encadenar clips en una película continua y comprobar con las puertas de control del site-movimento que no hay corte escondido.
El paso 4 de la skill (video). Haz clic en cada etapa.
Sin motor de video, la skill hace la película en código (pasos 1, 2, 5, 6 y 7 iguales). Números del piloto: 300 créditos de Kling 3.0 en 720p, 285 cuadros en la película horizontal y 361 en la vertical (README, 18/10/2026).
Con DRY_RUN=1 cada motor solo muestra lo que haría. La prueba revisa los cuatro.
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: $?"clone: 0 OK kling OK agnes OK kie OK custom 4/4 motores OK saída: 0
Ningún servicio fue llamado: el DRY_RUN sale antes de leer cualquier clave. Generar de verdad usa la cuenta y los créditos del motor que elijas; el curso no hace eso.
El ensayo imita el encadenamiento: el clip 2 empieza en el zoom en que terminó el clip 1.
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]}"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 cuadros (el cuadro 0 del clip 2 sale, para no repetir). El montar.py guarda en site/frames, la carpeta que la página del kit ya lee.
Un clip que salta de escena en medio: el lente en el estudio oscuro y, de repente, en el fondo claro.
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]}"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
El par de cuadros 48 cae a 0,46 contra una mediana de 1,00: corte. Un corte entre dos cuadros oscuros y parecidos puede pasar en el cortes.py; por eso la skill también ejecuta el continuidade.py y tú miras la película.
Los clips de pago salen en orden, uno por vez. Ejecuta, interrumpe y ejecuta de nuevo: solo vuelve lo que faltó.
Simulación en el navegador: no se genera nada. La falla es a propósito, para mostrar que solo vuelve el clip con corte.
Versión del site-movimento de la puerta de la clase 3: lee portugués, inglés y español.
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]}"✓ ~/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: 1La puerta también reprueba el guion largo (travessão), la jerga de IA ("revolucionário"), el texto provisional y el cuadro de la película repetido como imagen justo debajo.
Las puertas de control de la película, sin generar nada.
Ejecuta "baixar o site-movimento e testar os motores".
Listo cuando: 4/4 motores OK y saída: 0.
Ejecuta "encadear, montar e provar a continuidade". Después sirve la carpeta site/ del ensayo y ejecuta verificar.mjs en ella.
Listo cuando: PASSA — um movimento só con saída: 0, y el verificador responde quadros: 191 (frames/) y OK: 3 de 3 posições.
Ejecuta "um clipe com corte". Después cambia lente-clara.jpg por lente2.jpg (otra foto oscura) y ejecuta de nuevo: anota el peor par y explica por qué pasó.
Listo cuando: Con la lente clara: CORTE no(s) quadro(s) [48] y saída: 1.
Ejecuta la puerta de texto en la página que estás haciendo.
Listo cuando: texto limpo y saída: 0.
La explicación aparece después de tu respuesta.
Pregunta 1 de 4
¿Desde dónde debe empezar el clip 2?
Pregunta 2 de 4
El cortes.py encontró un corte en medio del clip 3. ¿Qué manda hacer la skill?
Pregunta 3 de 4
¿Por qué continuidade.py compara con la mediana local y no con un límite fijo?
Pregunta 4 de 4
¿Qué garantiza DRY_RUN=1 en la prueba de los motores?
Elige una alternativa. La explicación aparece después de tu intento.