一、问题(本轮实测)
`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` 挪回原处即可。
2.7 KiB
2.7 KiB
帧策略与图集压缩
本文件是 frame_policy 和图集清晰度预算的唯一事实源。先验收动作母版,再决定是否插帧;插帧不是默认正确答案。
选择帧策略
使用 native:
- 源帧率已经满足最终正常播放;
- 原始节奏、停顿或逐帧绘制感属于视觉设计;
- 插帧会产生重影、双轮廓、线稿扭曲或结构错误。
使用 interpolate:
- scrub 的参数采样明显不足;
- 目标播放速度下原始帧率可见跳步;
- 插帧结果通过自动比较和人工接触表验收。
把决定写入 Motion Brief:
frame_policy: native | interpolate
target_fps: <native 使用源帧率;interpolate 必须高于源帧率>
插帧流程
只有 frame_policy=interpolate 时执行:
python3 "$OIL_MOTION/scripts/optimize_motion.py" interpolate \
"$SOURCE_VIDEO" "$OUTPUT_DIRECTORY" \
--fps "$TARGET_FPS" \
--key "$KEY_MODE"
同时检查原始与插帧接触表。新增重影、双轮廓、边缘撕裂、部件穿插、结构扭曲、亮度闪帧或中心突变时,插帧失败;改用合格的原始帧,或重新生成母版,不得把插帧伪影带入编译。
frame_policy=native 仍需输出原始帧接触表和分析报告,只是不生成虚构中间帧。视频路线由 compile_scroll_video.py --frame-policy 统一执行对应分支;图集路线的原始帧提取见 alpha-atlas.md。
裁剪与拼接
- 裁剪只删除确实无变化的重复区,不改变已验收动作的终点。
- 每次裁剪或拼接后,重新检查所有新产生的相邻帧。
- 不能删除一段缓慢变化,再把远处最终帧直接接回;需要保留到终点的连续采样。
- 时间轴锚点和
hold必须从最终保留帧重新生成。
图集压缩
只有预算选择 alpha-atlas 时执行:
python3 "$OIL_MOTION/scripts/optimize_motion.py" atlas "$FINAL_FRAMES" \
--output "$OUTPUT_ATLAS" \
--target-mb "$TARGET_MIB" \
--display "$DISPLAY_SIZE" \
--dpr "$TARGET_DPR" \
--cell-width "$CELL_WIDTH" \
--cell-height "$CELL_HEIGHT" \
--columns "$COLUMNS"
工具先按“最大 CSS 尺寸 × DPR”计算最低单帧像素,再在不低于该尺寸的前提下搜索压缩质量。clarityMet 必须为 true;targetMet=false 时回到 delivery-selection.md 重新预算,不继续降低清晰度。
验收
native:接触表、相邻帧分析和最终播放均通过。interpolate:原始与插帧接触表均通过,且插帧没有新增结构或边缘缺陷。- 最大显示尺寸和目标 DPR 未确认前,不执行最终压缩。
- 文件体积、解码内存和纹理尺寸同时满足目标设备预算。