IA Content Maker — 白标视频制作机
本技能将 AI 智能体转变为整个解说视频频道的团队:脚本、美术、角色切割与骨架、配音、动画、配乐、渲染、封面和字幕。所有运动都是代码(画布逐帧渲染);没有 AI 生成的视频。
白标: 频道的视觉身份(调色板、字体、画风、卡片、转场、节奏、旁白)由代码每个频道随机生成一次,并记录在 dna.json 中。两个使用同一技能的频道会输出不同的视频。引擎不依赖任何特定的调色板、字体或主题。
可在任何运行终端命令的 AI 智能体上工作(Claude Code、Codex、Gemini CLI、Cursor……)。原始完整规范在 referencia/especificacao-original.md;此文件记录了经过验证的流程以及实践中的所有变更。如有冲突,以此文件为准。
0. 首先:查找或创建工作区
代码运行在一个工作区中(包含 engine/、dna.json、videos/、library/ 的文件夹)。
- 查找现有工作区(与
engine/mv.py同目录的dna.json;用户可指定位置)。 - 如果没有:运行
bash <技能所在目录>/scripts/setup.sh [文件夹](默认为~/ia-content-workspace)。 安装 venv、Kokoro、faster-whisper、Playwright/Chromium、OpenCV。要求 Python ≥3.10 和 ffmpeg。 - 如果已有工作区但技能版本更新:同样运行
setup.sh <工作区>— 它只更新engine/和templates/,永远不会修改dna.json、videos/或library/。
以下所有命令都在工作区内运行,使用 .venv/bin/python(此处简写为 py)。
1. 频道设置(一次)
- 询问:频道名称(如果没有,建议 5 个与以后随机的 DNA 匹配的名称)、主格式(竖版或 16:9)、可用的配音(免费 Kokoro、ElevenLabs/其他,或用户自己的录音)以及是否已有
dna.json(若有则复制到工作区)。 - 运行
py engine/mv.py dna— 使用os.urandom种子随机生成 DNA,解决冲突的组合,验证色彩对比度,保存dna.json+ 备份并下载字体。显示身份卡(py engine/mv.py cartao)。用户可以锁定(--lock traço=índice)或重新随机某个特征(py engine/roll_dna.py --reroll <traço>)。绝不要手动选择特征。 - 将频道名称写入
dna.json→channel.name。 - 没有图像模型的美术路线:只有“圆角方形头部”画风已在代码中绘制(
engine/art/characters.py)。如果随机出其他画风,要么锁定--lock build=3,要么按照_head/_torso/_legs风格在characters.py中实现新画风,要么使用图像模型。 - 设置完成后,频道的 DNA 被冻结。每个视频只会重新随机每个视频特有的特征。
2. 每个视频 — 流程
用户启动命令:“做个视频:[主题],[时长]”(或“make a video: …”)。
| # | 步骤 | 命令 | 暂停并展示给用户? |
|---|---|---|---|
| 1 | 创建文件夹 + 每个视频的随机化(脚本形式、钩子、动机、封面布局、亮点) | py engine/mv.py novo <slug> | — |
| 2 | 在 videos/<slug>/script.txt 中编写脚本(纯文本)+ 计划数据(字数、场景数量、角色数量) | 手动编写 | 是:脚本 + 数据,等待确认 |
| 3 | 如果主题需要,在 engine/art/plates.py 和 tiles.py 中添加新的 plates/tiles | 手动编写 | — |
| 4 | 美术 → 切割 → 骨架 | py engine/mv.py arte <slug> | 显示美术联系表 |
| 5 | 配音 + 单词时间 | py engine/mv.py voz <slug> | 报告时长和 whisper 的偏差 |
| 6 | 编写 video.json + 镜头文件 videos/<slug>/shots/01_story.js(基于 templates/shots_modelo.js) | 手动编写 | — |
| 7 | 联系表(每 2 秒一帧)→ 修正 → 重复 | py engine/mv.py contato <slug> | — |
| 8 | 渲染 + 音频 + 质量控制 | py engine/mv.py render <slug> | — |
| 9 | 封面 | py engine/mv.py capa <slug> | — |
| 10 | 日志 + 交付(视频、封面、带话题标签的字幕) | py engine/mv.py log <slug> | 是:交付 |
在 contato/stills/render 中附加 --formato paisagem 生成 1920×1080;默认为竖版 1080×1920。
如需检查精确时间点:py engine/mv.py stills <slug> 0,3.2,10.5。
2.1 时长(随时长缩放)
- 字数:约每分钟 205 词(使用 Kokoro 葡萄牙语巴西版,即使速度 1.0 也较快);慢速配音约 175 词。
- 场景数:分钟 × DNA 中的
pace.places_per_min;竖版中,每约 3 秒切一次(≈每分钟 20 个镜头)。 ~30% 的大场景板(含角色),其余为特写瓷砖(每网格 4 个)。 - 主要角色:3 分钟以下 1–2 个,3 分钟以上 2–3 个。
- 章节(脚本中的
##行):2 分钟以下无章节;2–5 分钟 3–4 章;5–10 分钟 5–8 章。 - 渲染:
--partes 4(默认)。3 分钟以上的视频:4–6 个部分。
2.2 竖版(Reels/TikTok/Shorts)— 已验证的默认格式
- 无开场和结束动画: 配音从第 0 帧开始。
video.json不含title和outro_plate。(16:9 使用 DNA 中的动画。) - 第 0 帧从不空白: 钩子已经出现在屏幕上(write/number 中
t0 = sh.start - 0.4)。 - 每个镜头调用
sh.vert({ vw, vf })— 参见referencia/motor.md。 - 仅竖版有烧录字幕(1–3 个词,突出显示正在说的词)。16:9 无字幕。
- 安全区域:右侧高度 50%–80%(应用按钮)、底部 15% 内无重要元素;HUD 在左侧;动机计数器在右上角。
- 钩子和结构:遵循
referencia/retencao.md(已验证保持率)。
3. 风格规则(不可妥协)
- 扁平矢量,无描边,最多一个阴影(同色加深),无渐变,无纹理,无表情符号,无频道徽标,无真实人物照片。
- 颜色:仅使用调色板的 5 种色 +
dna.json中的 11 种代码色。在镜头中使用ENGINE.C.<颜色>、ENGINE.font(px)和ENGINE.rgba(hex, 透明度)— 绝不使用固定十六进制或字体名称。在代码美术中使用ROLE["ice"|"stone"|"pine"|"coal"|"berry"](从任何调色板计算出的角色颜色)。 - 文字只出现在世界中的物体上(黑板、标牌、船体、卡片、屏幕)— 绝不使用悬浮在画面上方的独立卡片,如果场景本身可以承载信息。直接在场景板的空白处书写。
- 没有任何元素静止超过 1 秒;每个角色呼吸、眨眼并根据自己的台词表演(指、展示、耸肩、庆祝)。每
pace.new_thing_every_s(DNA 中定义)秒出现新事物。 - 两个连续镜头绝不使用相同场景。缩放不超过原始像素的 1.33 倍。
- 入场方式:弹簧/弹跳/膨胀,不使用简单的淡入。错误观念上覆盖红色 X 标记。
4. 美术
代码路线(默认,免费): plates 和 tiles 是 engine/art/plates.py 和 tiles.py 中的 SVG 函数,返回 (svg, meta)。Plates:1920×1080 世界坐标,空白,地面在中间,meta 包含 floor_y、blanks(代码书写位置)、portals(≥ 400 像素,用于转场缩放)、anchors。Tiles:物体特写,每网格 4 个(make_art.py 组装 2×2 并带白色间距,切割并转换 meta)。地图:经纬度投影轮廓(参见 pacific_map、brazil_map)。角色:art.json 中每个角色一个字典(调色板颜色,角色间肤色不同)。
图像模型路线(可选): 使用 referencia/especificacao-original.md(<art> 部分)中的核心风格生成图像,保存到 videos/<slug>/art/ 并使用相同名称,编写描述网格中矩形位置的 JSON meta(*_grid.png),管线的其余部分(切割、骨架、动画)相同。前景在绿色(#00B140)或洋红色(如果调色板包含绿色)色键背景上,且无手臂。
5. 配音
- 默认:Kokoro(
mv.py voz),使用 DNA 中旁白表格指定的声音,速度 1.0–1.1(绝不调整时间比例)。 - 更自然:任何现成音频 →
py engine/mv.py voz <slug> --wav 文件.wav(自己的声音、ElevenLabs、Chatterbox……)。脚本必须与朗读文本一致;whisper 会重新对齐时间。 - 减少“连珠炮”效果:
--pausa-max 0.35 --pausa-manter 0.28。 - 如果超过 5% 的单词未被检测到,
voice.py会报错 — 重新生成配音,不要强制通过。
6. 渲染前检查(联系表)
在渲染前修正:空白或溢出的场景板;文字覆盖脸部;黑色边框;角色脚部悬空;连续两次使用相同场景;超过 DNA 间隔两倍无新元素的片段;第 0 帧空白;竖版中文字被边界裁切;任何不符合 DNA 的元素(字体、颜色、卡片、转场)。
渲染后,质量控制会检测未计划的单帧跳跃 — 逐一排查(使用 stills)。
音频:门控要求配音 ≥ 15 dB 高于音乐+音效,背景音在少于 1% 的帧中过高;输出 -14 LUFS,峰值 -1 dB。
7. 交付
- 视频:
videos/<slug>/<slug>_vertical.mp4(或 16:9 格式下的<slug>.mp4)和封面图。 - 准备字幕:第一行 = 钩子;2–3 句包含主题关键词(搜索可读取字幕);引导评论的问题;最多 5 个相关话题标签(Instagram 有限制)。
- 提醒用户关于简化事实或流行历史版本的情况。
mv.py log <slug>— 每个视频的随机化会避免重复最近 5 个视频的形式/钩子/动机/封面。
8. 引擎随每个视频改进
发现 Bug 或限制?在 engine/ 中修复(绝不只修改单个视频的文件),并将经验记录在技能的 referencia/licoes.md 中。大规模补丁前备份镜头文件。长时间渲染:分部分进行,可局部重做。
参考
referencia/motor.md— 镜头 API(S、sh.*、角色、姿势、竖版摄像机)。referencia/retencao.md— 钩子结构、结尾引导、节奏。referencia/licoes.md— 所有出过的问题及解决方法。referencia/especificacao-original.md— 完整规范(DNA 特征、骨架、动画、音频)。workspace/exemplos/— 两个完整视频:el-nino(竖版,神话 vs 现实)和primeiro-cartao(16:9,时间顺序叙事)。用于学习和重建:复制到videos/然后运行mv.py arte+mv.py contato(words.js已准备好)。