用途
video-storytelling 用于设计并构建长视频(口播类)的视觉层,让观众在看到第 9 分钟时仍然有方位感。资料说明它适用于任何有脚本的口播视频,例如新闻评论、单一主题深挖、对比、教程、清单等。
它针对的问题是“场景思维”:每隔几秒出现一张新图,会让观众每隔几秒就重新开始理解;单张图都没有问题,所以反馈往往含糊成“困惑”或“信息太多”,而不是具体的缺陷。
资料特别说明:该 Skill 与 hyperframes-video-beats 不同,后者是在口播画面上叠加卡片,而本 Skill 设计的是“视频所讲的那件事”本身。
四条原则
1. 一个持续存在的世界
视频存在于单一空间中且从不重置:观众已看过的内容仍留在原处,新内容被添加而不是替换。一旦绘制,元素不再重绘、移动或改标签。空间语法需在动手前确定并贯穿全片;参考构建中左到右是走向结果,向上朝向人且是屏幕上唯一的暖色,向下进入记录系统。这套语法只应为了表达含义而刻意打破一次。
2. 摄像机就是剪辑
切到新图每次都让观众丢失方位,而在不动的空间里移动则不付出这种代价。推近读作“仔细看你已经理解的那部分”,拉远则是回报时刻。按三种高度工作并在相邻高度间移动:世界(整体空间,用于定位、回报、“我们在这里”)、区域(讨论中的子图,占大部分时长)、细节(单个元素,如一个数字、一次状态变化、一个决策)。从细节直接跳到世界会让人迷失,除非作为刻意的回报节拍。
资料列出的具体规则包括:取景按精确的世界窗口命名而非缩放系数,窗口边界须落在标签之间;同一用途复用同一窗口;时长随移动距离变化而非全局预设;摄像机与全幅擦除必须先后排列而非重叠(先摄像机后擦除);覆盖层先变不透明再移动摄像机;标签距画面边缘不近于 60px;同一主体上的两次连续运动要合并为一个手势(共享对称缓动,落在同一帧),前重缓动(power3/4.out)只用于元素入场;等等。
3. 注意力是聚光灯
任意时刻恰好一个元素全亮,其余已绘制元素保持安静但可读。层级来自“活跃与安静之间的比例”,而不是把所有东西调暗。资料给出参考构建的目标亮度与不透明度:活跃描边+标签 200-235 / 1.0;上下文 120-150 / 0.56;已用完 85-105 / 0.33;任何标签任何状态不低于 90。并给出实现函数 lit() 的代码片段,强调三点:标签始终继承其元素状态(-l 后缀合并);已完成的道具通过 MUTED 上限退役到不透明度 0,而不是 0.3;不透明度事件必须按时间轴顺序发出,需有 seq() 守卫对乱序抛出异常。还要求每个元素每个窗口只有一个不透明度权威,否则在合成母版中会以约 10Hz 频闪。
4. 开放式悬念是空间性的
不要说“我们稍后会回到这个”,而是在世界里留下可见的未完成物并回到它。机制包括:在钩子处、在空间中、在做出承诺的那句台词上埋下;在每个章节边界重展示(约两秒,是留存机制);让观众看到不完整在缩小;用开场时的画面收尾。资料按脚本形态列出对应世界与“不完整”内容:N 个并列项→脊柱上的 N 个插槽(空槽);单一流程深挖→完整流水线(断裂或缺失的环节);层级→向上搭建的堆叠(顶部是幽灵);对比→共享轴上的两列(一列空或记分卡未填);新闻或公告→时间线或地图(右侧、未来是空白);教程→完成态架构的幽灵(未构建的每个节点)。把项目交入插槽是约 1.4s 的实时摄像机运动而非切到预制图;若有数字或计数器,应在同一运动中像里程表一样滚动。计数器需要名称而不只是数字,与 1–2 词标签一起作为刚性装置移动。
纪律
- 不获得一个词的元素就不被绘制:每个形状只能是有标签的元素、有标签元素之间的连接线、移动主体或环境底色。资料引述一次静音测试评审:理解度 7/10,原因是“图很干净,装饰不干净”。预算约每节 20 个屏上词,不用句子,标签 1–2 词,置于元素下方;参考的第 1 节为 84 秒 21 个词。反模式视觉不得叠在推荐内容上。
- 给观众一个可跟随的东西:用单个移动主体承载故事,其状态可见地变化,且绝不瞬移,沿绘制的连接线匀速移动。
- 一套全局令牌:描边 1.5/2.5/4/7;字号 22/30/42/60/84;圆角 10/22/40 且始终为超椭圆;五种颜色、五种固定含义、零装饰;暖色只表示有人参与;正文不用纯白。需用令牌检查器让构建失败来把关。
- 运动:入场使用 cubic-bezier(0.16,1,0.3,1),出场快于入场,时长随质量变化,每节恰好一次 back.out;永远不要交叉淡化,全幅层在已不透明的背景上用裁剪进出。
构建契约
每节一个生成器:scripts/build_<id>.py 只写 compositions/<id>.html;编辑生成器而非生成的 HTML;节根 index-*.html 手工维护,取景改动放在那里。共享模块保持共享,并行构建的节不得触碰共享模块。组装前为 SVG defs 加命名空间,否则 url(#id) 会解析到文档顺序第一个匹配,导致后续图形不绘制(参考构建中造成 35 秒空屏)。按词级转录以词起点计时,提前 0.15-0.25s 入场,绝不把一节均匀切成节拍。审计空档:任何超过约 1.5s 无事件即死屏,让生成器打印出来。在剪辑中留空气:过于激进地压缩停顿会产生句界处近零间隙,客户听成“口吃”和跳切;参考说话者句界间隙中位数为 470ms,被标记的连接处仅 20-40ms;修复方式是插入 4-8 帧空气,词不动;空气取自轨道真实房间音的供体切片并加 10ms 淡入淡出,绝不用 anullsrc;插入边缘应以 40ms 等功率交叉淡化接入尾音自身衰减。烘焙时间意味着脚本化位移:图形存在后任何时间轴变更(哪怕 2s 空气处理)都必须经过审查过的 AST/解析级变换移动每个编辑点之后的字面量,再做差异审查,绝不手工编辑。渲染时使用 --workers 1。
门禁
资料列出需运行的检查命令:
node scripts/qa-tokens.mjs # 0 off-system strokes / type sizes / radii node scripts/qa-no-crossfade.mjs # 0 full-bleed layers animating opacity node scripts/qa-legibility.mjs <render> node scripts/qa-seamjump.mjs <render> plan/cover-seams.json --control <cut> node scripts/qa-deadframe.mjs <render> --control <cut> node scripts/qa-presence.mjs <render> --every 1 # speaker on-screen share node scripts/integrate.mjs --check # 0 gaps, 0 stale mounts npx hyperframes lint
并强调:门禁不能替代亲自观看,从未失败过的门禁不算门禁。运动平滑度必须在连续帧上验证,绝不能只在节拍帧上验证;每个节拍一帧只能证明构图,所有运动缺陷都活在节拍帧之间。交付前对每个过渡窗口(摄像机运动、擦除、重新取景、停靠、节缝)平铺连续帧条并阅读,给出 ffmpeg 平铺命令示例,并列出缺陷特征:大幅跳跃后多张几乎相同的帧(前重缓动/死停);运动停止后另一种运动开始(本应是一个手势的两次运动);单张帧与两侧都不同(爆闪)。可读性不可自动化:绝对像素占比阈值衡量的是文字数量而非可读性。
适用场景
资料给出的适用对象是有脚本的口播长视频,包括新闻评论、单一主题深挖、对比、教程、清单。仓库根目录的 docs/STORYTELLING-WORKBOOK.md 提供中性的练习节拍表,可复用的设计系统在该 Skill 的 reference/design-system.md,完整示例的开放循环几何在 reference/patterns/wall-of-slots/。资料明确说不需要私有源视频。
限制
资料未提供关于收费、价格、平台支持、安装步骤或运行环境要求的说明,这些信息暂未提供。