Motion Studio
完全通过代码制作短片(通常为 9:16 1080×1920 的 Reels,也支持 16:9 / 1:1 / 4:5 比例)。
- 画面。 一个 HTML 页面 (
comp.html),其window.renderAt(t)函数会精确绘制时间t的对应帧。 - 捕获。 无头 Chromium 逐帧捕获;ffmpeg 编码。
- 声音。 使用 Python 从同一时间线合成:音乐、音效和环境音,并最终标准化至 -14 LUFS。
- 3D(可选)。 镜头由一个小型 GPU 路径追踪器 (
pt.js) 渲染,提供柔和光照、真实反射、景深和运动模糊。
观众看到的一切都是时间 t 的纯函数。这使得渲染具备可重复性、可定位性和可恢复性。
如果请求是编辑、加字幕、压缩或调色一个已存在的视频,或者构建幻灯片或网站动画,请说明此技能不是合适的工具,并直接提供帮助。从提供的素材(如活动、DJ、去年的派对)中剪辑出宣传片则属于本技能范围:请使用 templates/footage/ 和 references/footage-promos.md。
此技能包含的内容
| 路径 | 内容 | 何时阅读 |
|---|---|---|
references/setup.md | 工作室的一站式安装(Node、ffmpeg、Playwright、Python 虚拟环境、GPU 检查) | 首次在机器上使用 |
references/render-pipeline.md | 渲染契约、render.mjs 模式、分块渲染、ffmpeg 注意事项、确定性、联系表 | 构建或渲染任何影片时 |
references/design-rules.md | 从真实客户反馈中学习到的故事叙述、布局、排版、动态和转场规则;审核 | 在故事板绘制前和每次审查前 |
references/sound.md | 事件驱动的配乐 + 音效设计,混音目标,测量,响度处理 | 处理音频时 |
references/path-tracer-3d.md | 3D 路径追踪器:场景、材质、灯光、精确尺寸的产品建模、相机、匹配剪辑、成本 | 仅当影片需要 3D 场景时 |
references/claims-and-sources.md | 获取正确事实:官方来源、CLAIMS.md、绝对不要声称的内容、安全捕获网站 | 任何包含产品事实、价格、规格或客户品牌的影片 |
references/footage-promos.md | 从提供的素材剪辑的活动/俱乐部/艺术家宣传片:客户要求、节拍网格音乐、DJ 转场、人脸取景、图形技术 | 任何从真实素材构建的宣传片 |
templates/film/ | 一个完整、可工作的 2D 短片(15 秒、动态文字、产品卡片、计数器、图表、行动号召)+ 渲染、音效和后期处理脚本 | 从每个 2D 影片开始 |
templates/film-3d/ | 路径追踪器 + 示例场景(工作室、房间、房屋)+ 一个可工作的 3D 影片及外观开发工具 | 从 3D 影片开始 |
templates/footage/ | 素材宣传片流程:节拍网格上的镜头列表(剪切、网格、分割、条带、斜坡、虹膜)、人脸取景、测量的 BPM/踢鼓相位/跌落、DJ 转场、图形工具包(文字蒙版、人后文字、跑马灯、光学居中)+ 示例 | 从每个素材宣传片开始 |
scripts/setup_studio.ps1 / .sh | 创建工作室文件夹并安装所有内容(下载前会询问) | 首次使用 |
scripts/new_film.mjs | 将模板复制到 <studio>/films/<name> | 每个新影片 |
工作流程
请按顺序执行以下步骤。每一步的存在都是因为曾经跳过它而导致了客户修改。
- 需求简报。
- 获取时长、格式、帧率(默认 30;PAL 编辑器用 25)、语言、行动号召以及影片的发布平台。
- 索取品牌文件(Logo SVG/PNG、字体、颜色、现有帖子)。如果没有,则从其网站读取品牌信息。
- 如果对方说“放手去做”,仍然需要确认任何会改变产品或声称的内容。节奏和风格由你决定。
- 研究与事实核查(
references/claims-and-sources.md)。- 在撰写任何文案之前,将所有数字和声明从官方来源收集到
CLAIMS.md中。 - 当两个来源冲突时,省略该数字并说明原因。广告中的错误规格比没有规格更糟糕。
- 在撰写任何文案之前,将所有数字和声明从官方来源收集到
- 在节拍网格上绘制故事板。
- 选择一个 BPM,使时长是完整的节拍数(例如,96 BPM 下 30 秒 = 48 拍;120 BPM 下 15 秒 = 30 拍)。
- 将每个场景变化、字幕和声音事件都放到该网格上(
bar(n, beat)/bt(b))。 - 将故事板写成一个简短的表格(节拍 → 画面 → 文字 → 声音),如果可联系到对方,在构建前分享。
- 脚手架。 运行
node <skill>/scripts/new_film.mjs <studio> <name> [film|film-3d|footage],然后编辑comp.html(2D),film.js+world.js+comp.html(3D),或sources.json+edit.json+comp.html(素材;请遵循references/footage-promos.md)。 - 小循环构建。 以低质量渲染联系表(
node render.mjs beats 0.5,4,8,… 0.25 sheet)并查看它们。修复,重新制表。在最终渲染之前,不要仅凭一帧来判断动态。在整部影片的每个节拍(或半拍)都制作联系表。 - 审核(
node render.mjs audit 0.25)。文字不能与产品或其它文字重叠,且必须保持在平台安全区域内。修复每个问题;不要与审核结果争论。 - 音效。 运行
python audio.py out/mix.wav out/stems,然后运行python check.py:检查每个片段的响度、频谱、警笛/滑音测试、咔嗒声。 - 最终渲染。先询问(参见“渲染礼仪”)。
- 2D 影片只需几分钟:
node make.mjs frames+encode。 - 3D 影片需要数小时:
node render.mjs chunks+concat。
- 2D 影片只需几分钟:
- 后期处理。
node make.mjs finish会进行响度标准化(-14 LUFS, -1.5 dBTP),与画面混合(画面是主时钟,从不使用-shortest),并写入一个轻量级的-share副本。检查输出中的帧数、时长和响度。 - 检查最终文件,而不是合成。 从编码后的 mp4 中提取帧(每 0.5 秒一张)并制作成联系表,检查每一帧。然后交付,并附上一段简短的说明(根据客户语言使用罗马尼亚语或英语):内容包括什么、事实来源、客户需要确认的内容。
渲染礼仪(用户的电脑是用户的)
3D 渲染会使 GPU 以 100% 负载运行一小时或更长时间,导致电脑变得迟钝。写入数百帧图像还会导致 Windows Defender 重新扫描每个文件。曾经有人不得不大喊“停下,你要把我的电脑搞炸了”。因此:
- 在任何会使机器高负载运行超过几分钟的任务之前,请说明任务内容、所需时间以及电脑的感受,然后等待用户的确认。 提供以下选项:
- 温和模式 (
NICE_MS=25 DUTY=.35):在 GPU 通道之间暂停,使桌面保持可用; - 全速运行;
- 稍后 / 通宵进行。
- 温和模式 (
- 优先使用
render.mjs chunks(1 秒的 mp4 分块,可恢复),而不是将每一帧都写为 PNG。 - 将长时间渲染作为分离进程启动,这样关闭聊天窗口不会半途终止它们(Windows:
Start-Process node -ArgumentList 'render.mjs','chunks' -WindowStyle Hidden)。 - 当被告知停止时,立即停止。 终止进程树(Windows:
taskkill /T /F /PID …),通过进程列表确认没有残留,并说明还有哪些东西仍在占用机器(例如,Defender 正在扫描写入的文件),不要责怪用户。 - 简短的联系表和单个测试帧无需许可。 它们只需几秒钟。
不可妥协的事项(每一项都曾导致过一次客户修改)
renderAt(t)必须是纯函数。- 帧之间不保留状态,不使用
Math.random()(请使用种子化的 mulberry32),不使用 CSS 过渡或动画,不使用定时器。 node render.mjs verify会按顺序和乱序渲染帧;它们必须匹配。
- 帧之间不保留状态,不使用
- 在第 0 帧之前加载所有字重(为每个使用的字体调用
document.fonts.load)。如果在影片中途首次使用某个字体,会导致一帧变为不可见。 - 绝不能让两个文字块重叠,或文字覆盖产品。
- 一个淡出的标题必须在下一个标题出现之前完全消失。
- 计数器顺序切换(旧数字消失,然后新数字出现);两个数字叠在一起看起来是坏的。
- 字幕在屏幕上停留至少 1.5 秒,每条不超过 7 个词,每个节拍一个想法。 确保第 0 帧是一个可读的缩略图。
- 绝不虚构任何一个数字、客户、评论或结果。 仅当有带日期的证据显示在屏幕上时,才能显示价格,并且必须获得客户许可。
- 除非另有要求,音效应是严肃的。 技术产品不使用玩具般的马林巴或铃铛声,避免持续的滑音:有一段视频中的吱吱声被称为“末日警报”。
- 使用真实的 UI 和真实的素材(使用 Playwright 以高 DPR 从客户自己的网站截取)。绝不手绘客户的 UI 或 Logo。绝不在真实网站上点击购买、提交或发送。