Native MoonBit editorial timeline primitives: OTIO subset read/write, layout, diagnostics and atomic edits
moon add white-bear233/moontimelineimport {
"white-bear233/moontimeline/time" @timeline_time,
"white-bear233/moontimeline/otio",
}///|
fn main {
let time = @timeline_time.RationalTime::new(48.0, 24.0).unwrap()
let converted = time.rescaled_to(30.0).unwrap()
println("48 帧 @ 24fps = \{time.to_seconds().unwrap()} 秒")
println("换算到 30fps = \{converted.value()} 帧")
}let result = @otio.read(json_text)
match result {
Ok(timeline) => println(@otio.write(timeline).unwrap())
Err(diagnostic) =>
println("读取失败 \{diagnostic.code} @ \{diagnostic.path}: \{diagnostic.message}")
}| 包 | 职责 |
|---|---|
| time | RationalTime、秒数、帧率转换、显式舍入 |
| range | 半开区间、交集、裁剪、边界检查 |
| model | Timeline / Stack / Track / Clip / Gap / 媒体引用 |
| otio | OTIO JSON 子集读写与诊断 |
| timeline | 轨道布局、时长、时间点与素材位置查询 |
| validate | 结构化诊断(错误 / 警告 / 未知) |
| edit | 拆分、顺移裁剪、插入 Gap |
| cmd | 命令行入口,共享 MoonBit 操作接口 |
| demo | 浏览器演示(导入、编辑、撤销、下载) |
node tools/build-js.mjs
node cmd/moontimeline.mjs inspect fixtures/valid/gap_clip.otio
node tools/serve.mjs # http://127.0.0.1:4173/demo/index.htmlnode tools/check_external_corpus.mjs # 上游 sample_data:可读 13/13,可计算 9/13
node tools/bench.mjs # 1k / 5k / 10k / 20k 片段的解析、校验、导出耗时moon fmt --check
moon check --target js
moon build --target js
moon test --target js
moon test --target wasm-gc
node tools/build-js.mjs
node --test tests/cli.test.mjs tests/regression.test.mjs
python tools/oracle.py --check # 需要 .venv 中的 opentimelineio 0.18.1Install
Download zipNative MoonBit editorial timeline primitives: OTIO subset read/write, layout, diagnostics and atomic edits