LingFan CodeVideo 是一个确定性推演式视频引擎:视频不是文件,是一个跑 N 毫秒的自动游戏。画面是时间 t 的确定性函数——同一份剧本,每次推演逐帧相同;总时长是编译产物,不是设计参数。
三幕由链拼接、幕间 transitionTo 重叠 150ms;总时长 1700ms 是链编译的产物——进度条按编译落位分段,组件里没有第二份时间表。
这段画面由一份三幕剧本实时推演:幕间 transitionTo 重叠 150ms,总时长 1700ms = 600 + 800 + 600 − 2 × 150,由链编译得出。多看两遍——逐帧相同。
出片之前就能验证:validate 干跑登记体检查结构;compute.computeAt / compute.computeRange 用 headless 引擎按需开窗取样,只取需要的时间区;帧指纹比对两次推演是否逐帧一致。
下面是 compute 取样的活演示——曲线是 computeRange 取回的状态点连成的线,表格是 computeAt 取回的选中点状态表:
曲线是 computeRange 取回的 47 个网格点状态连成的线;表格是 computeAt 取回的选中点状态表(FrameState 按 key 聚合)。 画面是状态的函数——验证只需按需开窗取样,不必出片。
pnpm install剧本是普通的 TypeScript:登记期只登记,不画任何一帧;画面在推演期逐帧求值。
import { render, start } from "@lingfan-video/core";
import { FrameSequenceExporter } from "@lingfan-video/infra";
const scene = start(1000, (env) => {
env.step(1000, (ctx) => ({ t: ctx.localT }));
});
await render(scene, {
fps: 30,
width: 640,
height: 360,
headless: true,
frames: "allow-blank",
exporter: new FrameSequenceExporter(),
});| 想做什么 | 读哪页 |
|---|---|
| 理解「画面是 t 的函数」与四层模型 | 心智模型 |
| 写出第一段逐帧画面 | 第一段画面 |
| 把多幕拼成链、处理过场与并行 | 幕间与链 |
| 给画面加声音 | 加声音 |
| 导出 mp4 / webm / 接预览 | 出片与预览 |
| 出带透明的产物(APNG 或透明 webm) | 透明产物 |
| 不出片就验证确定性 | 取样验证 |
| 查某条契约的准确语义与判据 | 契约总览 |
| 对照常见写法错误 | 常见错法 |