ai-video-render: 代码动画渲染
何时使用
film.json 已存在且风格已选定。此技能将故事板转化为图像:渲染页面、帧捕获以及无声视频。此处不涉及配音工作。
确定性合约(不可协商)
- 每一帧都是时间的纯函数:
window.render(t)绘制任意时刻的画面。不得使用requestAnimationFrame、setTimeout、CSS 过渡动画,也不得在导出帧之间保存状态。 - 所有随机性使用固定种子。渲染路径中绝不允许使用未封装的随机源或真实时钟。
- 每帧开始时重置画布状态。
- 页面在首次成功渲染后暴露
window.seek(t)、window.render(t)和window.ready = true。 - 同一时间戳渲染两次必须产生相同的帧。完整渲染前使用
scripts/determinism-check.js验证。
1. 选择风格(用户选择,硬性关口)
推荐 1 种风格及 2 种不同替代方案,附上视觉差异、理由和限制,写入 style-options.md。等待用户选择。“直接运行”不视为选择授权。
风格目录(请自行从上游获取;提示文件和演示源码不在本仓库中):
- 平面流程图、手绘笔记、复古报纸、复古剪纸、超现实拼贴、3D 卡通、黑背景科技(7 套,dashi-animationstyle)。
- 15 种 MG 风格:平面矢量、线条艺术、等轴 2.5D、3D 渲染、形状变形、贴纸解释、赛博朋克 HUD、拼贴、极光玻璃、包豪斯、合成波、像素艺术、液态运动、逐帧线条抖动、多变字幕。
- 36 种艺术风格配方(huashu-art-motion)和 lemo-opuscar 风格:厚涂油画、水彩、中国水墨、浮世绘、白板解释。
风格使用规则:
- 一个影片使用一种风格、一个主题,最多 2 种动画语法。
- 从风格提示或演示中学习方法,然后为新主题重新创作内容。切勿复制演示中的构图、角色或素材到影片中。
- 当风格提示说“不要改变签名特征”时,仅更改创意种子(故事、品牌、文案、调色板)或输出(例如竖向 1080x1920、时长)。
- 除非用户明确要求,否则不要使用蓝-紫渐变、深紫色星空背景或霓虹青-紫色(看起来有明显 AI 味)。
- 代码绝不绘制真实人类面孔。仅可使用 AI 生成的绿幕角色镜头,合成到代码构建的场景中;若没有图像生成能力,仅展示手部和背影。
2. 逐镜头构建
- 从
templates/render-page.html和templates/render.js编写渲染页面。默认画幅 1920×1080(竖向:1080×1920,需重新布局构图和字幕,绝不能缩放横向画幅)。 - 一次构建一个镜头。每镜头渲染 3 帧静态帧(开头、中间、结尾),检查文字溢出、重叠、主体大小以及屏幕显示时长。确认无误后再推进到下一镜头。
- 对于超过 30 秒的影片,先渲染无运动模糊的低分辨率样本,确认后再渲染完整版本。
- 3D 渲染风格是例外:在 Blender 中渲染画面,在网页上添加文字和噪点。
3. 渲染与合成
- 无头 Chrome 按影片 FPS 每帧捕获一张截图。使用 ffmpeg(H.264,CRF 16)合成。此处保留音轨为空;配音将在下一技能中混入。
- 音画共用一个时间线:剪辑和关键动作位于节拍网格或配音时间线上。
- 使用 ffprobe 验证:H.264,1920×1080(或 1080×1920),30 FPS,帧数等于 film.json 中时长乘以 FPS。
输出合约
render-page.html+render.js(影片的渲染页面)。frames/(每帧捕获)。film.mp4(无声画面)。render-report.md(分辨率、FPS、帧数、确定性检查结果)。
规则
- 未运行的检查应描述为“未运行”。绝不允许声称渲染通过了实际未进行的检查。
- 不得将 HTML 页面、无声中间文件或提示视为最终的影片成品。
- 参考图像归用户所有或已获得许可;完成的影片绝不包含原始图像。