Kinetic Reels 是做什么的?
你以动态设计师的方式制作视频,但使用代码:一个HTML页面绘制视频的任意时刻 t,无头浏览器以30 fps逐帧渲染,ffmpeg添加配音和音乐。相同的输入,每次输出相同的视频。
下文中的 SKILL 指本文件所在的文件夹。所有命令均在用户的项目文件夹(reels/ 和 .env 所在的目录)下执行。Mac/Linux 使用 python3,Windows 使用 python。
首次制作视频前(只需一次)
- 运行
node "SKILL/scripts/doctor.mjs"。如果输出 FIX 行,则运行node "SKILL/scripts/setup.mjs",然后按照剩余的 FIX 行操作。在输出 ALL GOOD 之前,不要继续。 - 用户需要在
.env中配置 Gemini API 密钥(GEMINI_API_KEY=...,可免费从 https://aistudio.google.com/apikey 获取)。切勿打印密钥,切勿提交.env。 kinetic.config.json存储用户昵称(水印)、姓名和用于结尾卡片的方形照片。new-reel.mjs会在首次运行时自动创建该文件;询问用户这三个值并填入。
制作视频(按顺序执行每一步)
- 主题和事实。 确定一个主题。从第一手资料(文档、仓库、供应商官方页面)调研,将每个声明写入
facts.md,并附上URL和阅读日期。无事实,无声明。 - 规划节奏(在开始制作前展示给用户)。列表类视频38至45秒,5至7个点;讲解类视频最长60秒。每个场景需包含:时长、文案、画面、具体资产文件名及来源。如果找不到某个资产(Logo、照片、截图),停止并向用户索取。切勿绘制假Logo、虚构UI或生成人物形象。
- 创建文件夹: 运行
node "SKILL/scripts/new-reel.mjs" <slug> [--logo claude]。角落Logo使用该主题的Logo(文件位于as/目录;如果缺失,添加真实的SVG文件)。 - 脚本。 编写
tts.json(配音文本,分为钩子/主体/收尾/行动号召部分,每部分使用不同风格)和script.txt(字幕文本,词序一致)。规则参考:references/SCRIPT.md。标签和风格参考:references/VOICE.md。 - 配音: 运行
python "SKILL/scripts/voice.py" reels/<slug>,然后运行python "SKILL/scripts/tighten.py" reels/<slug>(将停顿调整为0.34秒,正常语速)。试听或将音频导入任意转写工具检查:如果某句缺失或名称错误,修正文本后重新运行 voice.py。 - 字幕 + 时间轴: 运行
python "SKILL/scripts/captions.py" reels/<slug>,输出DUR、SCN和CAPS。将结果粘贴到reel.js中。如果某个词出现过早或过晚,手动微调锚点([email protected])。 - 真实资产: 使用
node "SKILL/scripts/docshot.mjs" <url> reels/<slug>/as/<name>.png [--selector "css"]截取截图,Logo从供应商或SKILL/assets/logos获取SVG格式。每个资产在屏幕上显示一行小字来源。详情参考:references/ASSETS.md。 - 构建
reel.js。 首先阅读examples/claude-code-shortcuts/reel.js:这是黄金示例,展示了所有模式。可用的组件参考references/COMPONENTS.md。图片区域为 y 260 至 1100,字幕区域为 y 1150 至 1570。 - 审核: 运行
node "SKILL/engine/shot.cjs" reels/<slug> audit,必须输出LAYOUT PASS。然后运行node "SKILL/engine/shot.cjs" reels/<slug> prev 0 <每个场景内的一个时间点>,查看每一帧静图(打开JPG文件)。修正并重复。对照references/SCRIPT.md(钩子规则)检查0、0.5、1、2、3秒处的5帧钩子静图。 - 音效: 编辑
mix.py(设置DUR、SCN,每次画面切换添加一个音效;参考references/SOUND.md),运行python reels/<slug>/mix.py。如需更换背景音乐:运行python "SKILL/scripts/music.py" search "lofi chill",然后运行pull <id> reels/<slug>(仅限CC0音乐)。 - 渲染: 运行
node "SKILL/engine/render.cjs" reels/<slug>,然后运行python "SKILL/scripts/finish.py" reels/<slug>(必须输出PASS),最后运行node "SKILL/engine/shot.cjs" reels/<slug> cover 0.6。 - 交付
reels/<slug>/out/final.mp4和out/cover.jpg,以及一段包含主题关键词(第一行)、3至5个话题标签和来自 facts.md 的来源说明的文案。
留住观众的规则(基于实际效果,而非理论)
- 收尾放在第一行。“几乎没人用的7个Claude Code快捷键”胜过“今天我想给你看个东西”。
- 第0帧就开始运动。使用负时间启动入场动画(
popV(t,-0.3,...)),确保第一帧已经在运动中。永远不要空白或静态的第一帧。 - 从第一帧到最后一帧保持统一视觉风格。切勿从深色开场再切换到浅色:这样会让观众觉得是新视频而滑走。
- 对于列表类视频:使用带计数的标题(如
快捷键 3/7+ 圆点指示器),并在第二行设置开放式循环(“而第七个为我节省了数小时”),在结尾处收束。 - 每0.8至1.5秒切换一张新图片。展示效果,而非描述。
- 配音保持主导。背景音乐音量较低(
sfx.mix_reel中的默认值已实测)。 - 结尾行动号召仅针对当前视频编写(保存、分享给适合的人,或提出一个真实问题)。永远不要使用“关注了解更多”。
遇到故障时
参考 references/TROUBLESHOOTING.md。常见问题包括:PATH中找不到ffmpeg、未安装Chromium、语音API返回 429(目前免费配额有限,请稍候或启用付费)、审核时出现CLIP错误(文本超出卡片宽度:缩短文本或将卡片宽度增加到920像素以内)。