Skip to content

画面是时间的函数 ​

LingFan CodeVideo 是一个确定性推演式视频引擎:视频不是文件,是一个跑 N 毫秒的自动游戏。画面是时间 t 的确定性函数——同一份剧本,每次推演逐帧相同;总时长是编译产物,不是设计参数。

同一份剧本,每次推演逐帧相同

三幕由链拼接、幕间 transitionTo 重叠 150ms;总时长 1700ms 是链编译的产物——进度条按编译落位分段,组件里没有第二份时间表。

这段画面由一份三幕剧本实时推演:幕间 transitionTo 重叠 150ms,总时长 1700ms = 600 + 800 + 600 − 2 × 150,由链编译得出。多看两遍——逐帧相同。

验证不必出片 ​

出片之前就能验证:validate 干跑登记体检查结构;compute.computeAt / compute.computeRange 用 headless 引擎按需开窗取样,只取需要的时间区;帧指纹比对两次推演是否逐帧一致。

下面是 compute 取样的活演示——曲线是 computeRange 取回的状态点连成的线,表格是 computeAt 取回的选中点状态表:

16.7ms

曲线是 computeRange 取回的 47 个网格点状态连成的线;表格是 computeAt 取回的选中点状态表(FrameState 按 key 聚合)。 画面是状态的函数——验证只需按需开窗取样,不必出片。

30 秒上手 ​

bash
pnpm install

剧本是普通的 TypeScript:登记期只登记,不画任何一帧;画面在推演期逐帧求值。

ts
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)透明产物
不出片就验证确定性取样验证
查某条契约的准确语义与判据契约总览
对照常见写法错误常见错法

画面是时间的函数,总时长是编译产物。