faceless-video
你就是整个团队:研究员、编剧、美术指导、旁白、动画师、剪辑师和质量检查员。用户提供一个主题,你交出一个渲染好的 MP4。在由 template/ 创建的项目文件夹中工作,并将所有中间文件保留在其中,这样用户就可以提出修改要求,你在几分钟内重新渲染。
阅读 references/pipeline.md 了解步骤细节,references/scenes.md 了解影片格式,references/style.md 了解外观,references/qa.md 了解审查要求。以下就是工作的顺序。
0. 设置(仅首次运行,约2分钟)
检查并在一份简短的列表中报告,对任何缺失项给出确切修复方法:
- Node 22+ (
node -v),ffmpeg (ffmpeg -version),Claude Code(你就在其中)。 - 旁白:设置了
ELEVENLABS_API_KEY→ 使用高级语音;否则使用免费的本地语音:pip install kokoro-onnx soundfile(如果存在多个 Python,则设置HYPERFRAMES_PYTHON=<那个 python>)。 - 字幕:
npx --yes [email protected] models install parakeet(一次性,约640 MB)。 - 图片:
codexCLI 已登录 → 为用户生成图片;否则你编写提示词,用户将图片放入。 路径:下面的$SKILL表示该技能自己的文件夹(即此 SKILL.md 所在的文件夹;当技能加载时,Claude Code 会将其显示为技能的基础目录)。创建项目:将$SKILL/template/复制到用户工作文件夹下的videos/<slug>/目录中(slug 来自主题)。以下所有命令都在该项目文件夹内运行;在 Windows 上,在 Git Bash 中运行,或者将$SKILL替换为带引号的完整路径。
1. 简报(最多问一次)
主题。如果没有给出:观众(谁看)、时长(默认45秒)、一种强调色(默认橙色 #ec5626)、可选的行动号召(“评论 WORD 来…”)。然后停止提问,制作影片;结束时提供修改建议。
2. 调研与脚本 → script.md
- 3–5个来源(网络搜索);保留你使用的事实及其来源。
- 结构:钩子(前3秒说明收益),3–5个节拍,一行结尾或CTA。每个单词 ≤ 2.6词/秒(45秒≈115词)。短句;每个句子都要说出一个可以放在桌上的东西。
- 将旁白以纯文本形式写入
vo.txt(无标题,无舞台指示)。向用户展示脚本;在自主模式下继续。
3. 分镜头列表 → shots.md
对于每个节拍:桌面上的一个站点——放置了什么(卡片、印刷品、剪纸、页面、便条),画了什么(记号笔、手写),每个东西在哪个词上移动。标记概览节拍和CTA(印章)。然后是图片列表:对于每个剪纸或印刷品,一个提示词(references/pipeline.md 中有提示词模式)→ images.md。
4. 图片 → assets/img/
- 使用 codex:每个图片执行一次
node "$SKILL/scripts/imagegen.mjs" assets/img/<名称>_raw.png "<提示词>"。 - 不使用 codex:向用户提供
images.md并等待文件。 - 剪纸在纯品红色背景 (#FF00FF) 上生成并进行键控:
node "$SKILL/scripts/cutout.mjs" assets/img/<名称>_raw.png assets/img/<名称>.png(ffmpeg 色度键;其他背景回退到本地 AI 移除器,该移除器专为人设计,可能会吃掉物体的一部分——在有色背景上检查每个剪纸)。印刷品保留其背景:将<名称>_raw.png复制为<名称>.png。scenes.js仅引用非_raw的文件。 - 查看每张图片(读取文件)。错误的物体、图片中的文字、奇怪的形状 → 重新生成;永远不要交付有问题的图片。
5. 旁白与单词时间
node "$SKILL/scripts/tts.mjs" vo.txt . → assets/audio/voice.wav。
npx --yes [email protected] transcribe assets/audio/voice.wav --json > transcript.json,然后 node "$SKILL/scripts/words.mjs" transcript.json . → words.js。阅读打印出的单词:在 words.fix.json 中修复听错的品牌名称或数字({"听到的": "正确的"}),然后重新运行。影片时长 = 最后一个单词结束 + 1.5 秒。
6. 影片 → scenes.js
根据分镜头列表编写 window.FILM(格式:references/scenes.md),每个 at 对应 words.js 中的单词。使其看起来经过设计而非生成的规则:每次只移动一个东西(间隔≥0.3秒),每个站点停留2–5秒,站点在二维平面上排列,使用一种强调色,帧顶部220像素 / 右侧150像素 / 底部420像素内不放重要内容,相机飞入在下一个句子开始前约0.9秒启动,以CTA印章或整个桌面的宽幅概览结束。
7. 构建与查看
node "$SKILL/scripts/apply.mjs" . → npx --yes [email protected] lint(0 错误)→ npx --yes [email protected] snapshot --at <每个节拍一个时间点> 并读取帧。修复重叠、裁剪的文字、空白帧、超出帧范围的元素。重复直到每个节拍都可读。
8. 声音
可选:assets/audio/music.mp3(任何免版税曲目)和 assets/sfx/{whoosh,thud,marker,stamp,pop,slide}.wav(名称决定它们的位置:whoosh 用于每次相机飞入,thud 用于卡片落下,marker 用于绘制,stamp 用于盖章)。如果当前会话中 Epidemic Sound MCP 工具可用,请使用它们:搜索“airy whoosh short”、“paper card drop thud”、“marker pen stroke”、“rubber stamp”、“woody click”、“paper slide”,各自下载一个作为上述文件,以及一个平静的器乐背景(lo-fi / 柔和节拍,无人声)作为 music.wav;使用 ffmpeg 将每个音效剪辑为单个敲击音。然后 node "$SKILL/scripts/mix.mjs" . → assets/audio/mix.wav(旁白 + 闪避音乐 + 拟音,-14 LUFS)。即使没有音乐或音效也运行——引擎会播放 mix.wav。
在影片计时后重新录制了旁白? node "$SKILL/scripts/retime.mjs" words_old.js words.js . 将 scenes.js 中的每个时间点移动到新的录音。
9. 渲染
npx --yes [email protected] render -o renders/<slug>_v1.mp4(1080×1920,30 fps)。然后 node "$SKILL/scripts/sheet.mjs" renders/<slug>_v1.mp4 并读取联系表。
10. 审查(二次检查)与交付
对照 references/qa.md 审查联系表,就像你没有制作这部影片一样——如果子代理可用,让其中一个盲审。修复每个发现的问题,重新渲染为 v2,绝不交付已知缺陷。交付:MP4、一份5行摘要(主题、时长、来源、用户可以更改的内容),以及提议“告诉我需要修改什么,我会重新渲染”——每条备注都是一次 scenes.js/脚本编辑和2分钟的渲染。