film-audit: 没有经过这些检查的影片禁止发布
工具包存放位置: 在此技能中运行的所有命令都应从
reels-maker文件夹(github.com/thativanng/reels-maker的克隆,其中包含template/和tools/)内执行。如果项目没有该文件夹,请先按照该仓库的SETUP.md进行设置。
规则: 影片只有在满足以下条件时才能交付给用户:(1) 碰撞检测通过并返回 NO COLLISIONS,(2) 每个“某物是否覆盖在面部上”的担忧都有具体的像素数值,(3) 独立审计员已签署通过,且没有未关闭的 MUST-FIX 项。构建者本人以 1 帧/秒的速度查看只是草图检查,不能算作门控。修复一处会影响其他部分(例如移动一个气泡可能会将其推出画面),因此每次修复轮次都需要对受影响的窗口进行窄范围重新检查。
门控 1 · 3D 碰撞检测(node tools/collide.mjs)
- 页面暴露了
window.collide(t)方法。它比较 AUD_M(运动物体)中每个网格与 AUD_S(静止物体)中每个网格以及彼此之间的边界框,每个框收缩 0.03 单位。 - 注册每一个新的运动物体和静止物体,否则检测无法看到它们。抛出的盒子、携带的杯子、经过的立方体和漂浮的病毒都算作运动物体。
- 预期中的接触(例如手中的杯子)通过
HELD按名称排除。 - 高度小于 0.12 单位的网格(地面贴花、道路标记、薄板)会被跳过,以避免误报。真正的薄型运动物体需要单独检查。
- 以 40 帧/秒运行(
STEP=.025,默认值)。在 10 帧/秒时,它错过了两个仅有 1 帧的接触:抛出的盒子穿过了两个人的头部。 - 输出为每对一行:
from–to s A × B depth (frames)。仅在输出NO COLLISIONS时才可发布。
门控 2 · 屏幕像素探测(node tools/probe.mjs)
某些缺陷在 3D 空间内不会产生碰撞。一个离某人头部后方 3 米的瓶盖仍可能看起来像从他的头发里长出来。测量屏幕上的像素:
node tools/probe.mjs "4.4,4.6,4.8" "D.CUPS[0]" "head" # 杯子和主角头部的重叠像素
node tools/probe.mjs "24.5,26" "head" "pill" # 头部是否在字幕后面?
node tools/probe.mjs "3.0,3.5" "D.GUESTS[1].v.root" # 单个矩形:此人是否在画面内?
- 读取
overlap: [x, y](两者均 > 0 表示重叠)、gapY和inside(A 完全位于 B 内部)。 - 在任何页面(包括 2D 页面)上:
sel:<css selector>表示元素实际绘制的内容(其字母,逐行测量,加上任何背景、边框或图像),safe是平台的核心安全区域(来自window.FILM.safe)。屏幕上的每个单词必须在每个节拍下相对于safe都满足inside: true:node tools/probe.mjs --page reels/<name>/page.html --format 9:16 "2,6.4,10.4" "sel:.title,.line,.kicker,.handle,.cap" "safe" - 要尝试某个相机关键帧而无需编辑文件,可传入
PRE(它在每次操作前运行):PRE="window._CK.find(k => k[0] === 23.8)[1] = window._dbg.A(72.2, 10, 31, 72, 5.2, 1.5)" node tools/probe.mjs "25,28" "head"。 - 边界框是保守的(边界框比实际形状大),因此几个像素的重叠在视觉上可能并不明显。审计员根据实际情况裁断。
在渲染之前,请用数字检查以下每一项:
- 每个单词、字幕和徽标都位于平台的安全区域(
safe,来自template/formats.json)内。在原生 9:16 短视频中,安全区是中间区域(应用会覆盖底部四分之一和右侧按钮导轨);在付费短视频中,安全区是底部 35% 以上的所有区域。 - 任何靠近面部的内容:帽子、头部后面的屏幕(光晕)、经过的立方体、嘴边的道具
- 摄像机运动时,主角与字幕背景之间的重叠
- 气泡与画面边缘以及附近道具的关系
- 人物和车辆与画面边缘的距离(≥24 像素为安全)
- 飞行物(抛出的盒子、硬币、病毒团簇)与它们经过的每个头部的关系
门控 3 · 独立审计
启动一个全新的代理(绝不能是构建者,也不能是曾经看过构建过程的代理),并引用 references/auditor-brief.md。
- 它读取的是渲染后的 MP4 文件,而不是实时页面:
ffmpeg -i out/film.mp4 -vf fps=2 …,然后生成带时间戳的帧截图(tools/sheet.py)。 - 整个影片以 ≥2 帧/秒 的速率检查,每个发生变化的窗口以 ≥4 帧/秒 的速率检查,在接触点(例如拾取或交接动作)则以 30 帧/秒逐帧检查。
- 它对每个项目回答:FIXED / NOT FIXED / REGRESSED / NEW,并标注优先级 MUST-FIX / NICE-TO-FIX,然后是一行结论:
SIGN-OFF或NOT。 - 修复后的重新检查是窄范围的:仅检查修复所涉及的窗口,再加上一次简短的回归检查。启动一个全新的代理可能比恢复一个携带全部历史记录的代理更便宜。
审计员经常发现的问题(优先检查这些)
- 某物触摸或位于头部后面: 头发里的瓶盖、头部后面的图钉、头部后方发光的显示器、横跨下巴的立方体
- 物体相互穿透: 卡车穿过建筑物和彼此、停放在桌子下的货车
- 逻辑错误: 卡车车头对车头停靠、第二辆卡车超越第一辆、放在桌子边缘本应掉落的杯子
- 人物问题: 两个人站得太近,头部融合成一个轮廓;某个人半出画面
- 运动问题: 单帧跳跃(瞬移)、物体在 0.1 秒内掉落地板、主角在两个场景之间消失
- 文字问题: 文本位于平台按钮覆盖的区域、中文单词中间断行、横幅与场景不同步、英美拼写混用、无法解释的数字、字幕覆盖主角
- 声音问题: 呼啸声、被音乐掩盖的音效、插入节拍后漂移的音效