Files
workbuddy_skills/oil-motion/references/baked-video.md
T
admin 237a09a5b0 修:draw-ui / oil-motion 原被当子模块指针收录 ⇒ 改为正常文件入库(两份内容原先对别人是空的)
一、问题(本轮实测)
`draw-ui` 与 `oil-motion` 目录里**各自带一个内嵌 `.git`** ⇒ 上一次提交把它们记成了 **gitlink(子模块指针)**
⇒ 仓库里只存了一个不属于任何远端的 commit id,**别人克隆下来这两份是空的** ✗(`git status` 显示 ` m draw-ui` / ` m oil-motion` = 子模块内容有改动)。

二、处置(可回退)
· 把两处的 `.git` **挪走**(⛔ 不是删除)⇒ `归档/内嵌git-20261008/{draw-ui,oil-motion}.git`;
· `git rm --cached` 掉那两个 gitlink,再 `git add` 两个目录 ⇒ **按正常文件入库**(内容才真的进仓库)。

三、副作用(如实记)
挪走 `.git` 后,这两个技能**不能再原地 `git pull` 取上游更新**(要更新得重新拉一份覆盖);
如需恢复其本地仓库,把 `归档/内嵌git-20261008/` 里的 `.git` 挪回原处即可。
2026-10-08 22:29:52 +08:00

84 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 烘焙视频路线
仅当 `background_owner: video` 且预算返回 `delivery.selected=baked-video` 时读取。视频包含完整画面;不做抠色、色键或页面背景合成。
## 编译
先完成内容验收和预算,再运行:
```bash
python3 "$OIL_MOTION/scripts/compile_scroll_video.py" \
"$SOURCE_VIDEO" "$OUTPUT_DIRECTORY" \
--background-owner video \
--budget-report build/motion-budget.json \
--frame-policy "$FRAME_POLICY" \
--fps "$TARGET_FPS" \
--timeline-output build/timeline.json \
--desktop-width "$DESKTOP_WIDTH" \
--mobile-width "$MOBILE_WIDTH"
```
`FRAME_POLICY` 与 `TARGET_FPS` 来自 Motion Brief。使用 `native` 时目标帧率等于源帧率;使用 `interpolate` 时目标帧率必须更高。
编译器会:
1. 按帧策略保留原始帧或插帧,并输出对应接触表和报告。
2. 按需清理闭环接缝或尾部重复帧。
3. 编码桌面端和移动端全关键帧 MP4,移除音轨。
4. 生成普通 `poster.png` 与 `compile.json`。
多段时间轴用 `--initial-state-id` 指定初始状态,并用重复的 `--segment DESTINATION_STATE_ID=START:HOLD:END_EXCLUSIVE` 传入后续状态与帧边界;需要统一播放曲线时使用 `--playback-curve` 及对应速率参数。编译器负责生成状态映射并把最终保留帧换算成时间。
成功后默认删除可重新生成的中间 PNG;只有诊断帧准备、裁剪或编码问题时才使用 `--keep-frames`。
## 多段连续
`clip_continuity=chain` 时,按 [qa.md](qa.md) 同时执行:
- 上一段实际尾帧作为下一段生成输入;
- 相邻成片解码后的尾帧与首帧接缝验收;
- 身份、构图、光线和背景偏差累积检查。
合并后从最终成片生成 `timeline.json`,不手工抄写段落时间。
“分段”只属于生产过程。交付前必须把连续链编译为每个设备版本各自的一条主视频;运行时不得把生产片段逐段设为 `src`。
## 网页接入
页面只保留一个持续存在的视频元素:
```html
<section class="motion-stage">
<video class="motion-video" muted playsinline preload="auto"></video>
</section>
```
```css
.motion-stage { overflow: hidden; }
.motion-video { width: 100%; height: 100%; object-fit: cover; display: block; }
```
根据预算中的 `runtime.controller` 接入 [runtime.md](runtime.md):
- `frame-scrub`:整数帧映射到 `currentTime`。
- `segment-playback`:读取 `timeline.json` 分段播放、反向和精确停帧。
- `autonomous-playback`:按时间播放,仅在素材通过闭环验收时循环。
控制器变化不改变视频背景归属,也不需要重新选择媒体格式。
桌面与移动资源只在会话初始化时选择。分页、反向和普通 resize 期间不换 `src`;确需切换设备版本时,执行一次受控重载并恢复到当前状态的 `hold`,不能把换源当作页面转场。
## 加载与降级
- 预加载 `poster.png` 和首个需要的视频资源。
- 视频解码或资源加载失败时显示 `poster.png`。
- `prefers-reduced-motion` 显示合同指定的静态状态。
## 验收
- 完整观看桌面与移动输出,确认主体、背景、光线、接触关系和镜头连续。
- 多段输出接缝通过 [qa.md](qa.md) 的成片连续性硬门。
- `compile.json` 中桌面与移动输出的 `allFramesAreKeyframes` 为 `true`。
- 实际页面没有抠色、色键 Shader 或阈值配置。
- 按选中的控制器验收 seek、分段播放或自动播放,不混用验收标准。