O que Angles faz?
Escreva uma pequena especificação JSON, execute um comando e leia uma linha JSON de volta. Não abra ou edite o estúdio; a especificação alcança tudo o que pode ser feito e rejeita tudo o que não pode.
node <esta pasta>/angles.mjs check spec.json # ~5s, sem vídeo: uma folha, uma linha de 4 quadros por variante
node <esta pasta>/angles.mjs make spec.json # o mp4 (1920 de largura, cerca de 4s de trabalho por segundo de vídeo) + uma folha
- Verifique antes de criar. Coloque as opções que você está considerando em
variants. Umcheckmostra todas elas como linhas rotuladas em uma única imagem pequena. Observe a folha, escolha uma linha e então executemakeuma vez com os campos dessa linha mesclados na especificação (e comvariantsremovido). Não renderize vídeos para comparar aparências. - Observe uma folha, nunca o mp4. Leia o caminho da
sheetque ele imprime. Isso é suficiente para julgar enquadramento, ângulo e foco. - Em caso de
ok: false, corrija apenas o que oswarningsnomeiam. Eles listam as escolhas válidas.node angles.mjs schemaimprime todas as escolhas se você precisar. Não adivinhe.
{ "source": "~/Desktop/demo.mov", "out": "~/Desktop/angles", "trim": { "in": 2, "out": 8 },
"look": "bright", "background": "mist", "shadow": "soft",
"variants": [{ "style": "close", "level": "gentle" }, { "style": "raking" }, { "style": "float" }] }
| Campo | Valores |
|---|---|
source | uma gravação (.mov .mp4 .webm) ou captura de tela (.png .jpg). Gravações são divididas em quadros uma vez e reutilizadas (--fresh refaz). |
style | close, raking (de perto em ângulo real); float, angle, flyby, focus, push, reveal, rise, tiltshift |
level | still, whisper (padrão), gentle, lively, bold. Cada um é um orçamento de velocidade, e o movimento se reduz para caber nele. speed ≤ budget é interpretado como calmo. |
trim, loop, aspect | { "in": s, "out": s }; true faz crossfade do final para o início; 16:9 (padrão), 1:1, 9:16, qualquer W:H |
beats | vários estilos em um clipe: [{ "at": 0, "style": "float" }, { "at": 4, "style": "close" }] |
look, lookAmount | bright, crisp grain, glossy, sunlit, pixel macro, cool studio, film print, none; 0–1 |
background, shadow | mist linen sky sage blush dusk ou #hex; none soft close float |
focus | { "at": s, "u": 0–1, "v": 0–1, "size": 30 }. Omita u/v para focar onde a gravação muda. |
overlays | [{ "at": 1, "dur": 1.5, "keys": ["⌘", "K"] }] ou { "text": "…" }: selos acima da câmera |
ease, dir, travel | steady soft settle constant; left right; 0–2 (padrão .8) |
Bom gosto: o sutil vence (whisper ou gentle), uma ideia por clipe (um estilo, ou dois ou três beats), e um corte de 3–8s terminando na ação.
Requer Chrome, ffmpeg, node 18+ e python3 com numpy e pillow; execute npm i uma vez aqui. Ele se serve na porta 8790 (defina ANGLES_PORT para alterá-la).