无脸短视频
此技能复制了一条在真实短视频("这个声音不是我的",2026年11月发布)上验证过的生产流水线。目标:一个1080×1920、30fps、时长60至120秒的短视频,能始终吸引观众注意力,因为一切都在原地变换,与语音节奏同步。
设置
个人设置位于此技能根目录下的config.json中。如果该文件不存在,请将config.example.json复制为config.json,并让用户填写缺失的内容(至少包括elevenlabs_voice_id)。每次运行开始时读取该文件。下面的<skill>代表此技能的文件夹。
| 键 | 用途 |
|---|---|
creator_name | 在报告中如何称呼用户 |
language | 短视频的默认语言(语音、字幕、屏幕文字)。其他语言的请求优先 |
elevenlabs_voice_id, elevenlabs_model | 克隆的声音 |
whisper_model | 用于检查的本地whisper.cpp模型 |
projects_root | 之前短视频项目所在的目录(用于复用node_modules) |
cta | 三个结束动作的确切措辞,使用短视频语言 |
guides_page | 用户个人简介中链接的页面,指南所在位置 |
timezone, publish_hour, caps, telegram_env | 仅限自主模式 |
用户规则
- 写作要直白、直接。屏幕上或消息中绝不使用破折号或填充词。
- 屏幕上使用短视频语言的排版规则。对于法语:在
: ? !前以及"5 réglages"内部使用不间断空格,使用« »引号。 - 语音永不中断。 仅编辑动画。不改变时长,不删除静音。
- 视频中无面部出现,封面除外,封面使用用户的照片。
- 封面始终是视频的第一帧,并且也作为单独文件交付。
- 结尾始终执行三个动作:订阅以获取指南、点击简介中的链接、输入关键词。在语音、字幕和屏幕上都要体现(SUBSCRIBED按钮、LINK IN BIO按钮、一个输入关键词的字段)。关键词直接与指南和主题相关,由Claude提出。说"link in bio",绝不说"link in the description":指南页面在用户的个人简介中。
- 所有所述内容必须真实:无编造的数字、无来源的夸大、无伪造的截图。有亲身经历的证明胜过空头承诺。
- 屏幕上不可出现任何令牌、密码或密钥。
- 每个短视频的说明:最多5个标签,无链接,适用于所有平台。始终以展示如何获取指南结尾,例如:"五个提示在指南中,随时可以复制粘贴。要获取它:订阅,转到简介中的链接并输入关键词FIVE。"
- 使用克隆语音的无脸短视频:发布时声明AI生成内容(例如使用Blotato:TikTok上设置
isAiGenerated: true,YouTube上设置containsSyntheticMedia: true)。 - 音乐音量设为0.05,低于语音,绝不更高。
- 告知付费生成的成本。如果用户已在请求中授权Atlas Cloud或ElevenLabs,则告知并继续。否则等待用户同意。
- 一气呵成,检查自己的工作,清楚说明已验证和未验证的内容。除非用户要求或处于自主模式,否则绝不发布。
- 小内存机器(8 GB RAM):一次只生成一个Remotion包,在后台渲染,最后清理中间文件。
步骤
一开始就规划好所有步骤。每个步骤都有其指南:到达该步骤时读取之。
- 定位。 视频文件夹、参考视频(文件或链接)、主题、用户的封面图片(视频文件夹中的
cover.png,否则使用<skill>/assets/cover/cover-template.png并告知)、可用磁盘空间(df -h /)。阅读有用的references/和项目记忆。 - 分析参考视频(如果有):提取音频,使用Scribe进行转录,逐帧查看视频,编写
_reel/reference/reel_analysis.md。参见references/script.md。 - 编写脚本和承诺的指南:
_reel/script.md,确保每个声明的真实性。参见references/script.md。 - 创建项目:
zsh <skill>/scripts/new_reel.sh "<视频文件夹>",然后填写remotion/reel.json。参见references/editing.md。 - 免费动态分镜:
python3 <skill>/scripts/fake_words.py,然后python3 scripts/build_reel.py,该脚本检查reel.json,然后生成几张静态图。脚本适合屏幕显示吗? - 语音:录制2段ElevenLabs音频,在选定音频上使用Scribe获取单词时间戳,处理时不进行剪切。参见
references/voice.md。 - Atlas Cloud开场镜头(可选,推荐):起始图像、结束图像、Kling、根据语音重新调整时间。参见
references/opening-shot.md。 - 场景:按节拍编写
src/reel/BRIEF.md,然后每组场景由一个智能体并行处理,并由一个检查智能体把关。参见references/editing.md和references/scene-rules.md。 - 封面:具有点击吸引力的标题和标志。参见
references/cover.md。 - 使用静态图检查,修复,然后渲染:在后台运行
zsh scripts/render_final.sh(90秒视频约需10-15分钟)。 - 验证最终文件并编写
exports/instagram.md。参见references/checks.md。 - 完成:项目README、项目记忆、删除中间文件、发送文件、总结(列出仍需听取或决定的内容)。
自主模式
如果请求来自计划任务,或者用户要求处理inspiration/文件夹,则遵循references/autonomous-mode.md:不提问、设置成本上限、提供指南、定时发布、发送通知。
短视频成功的关键
- 钩子在3秒内出现,附有证明或承诺,从封面之后的第一帧即可阅读。
- 可见的开放式循环:N个编号的空框,成为进度条。
- N个相同形状的元素,难度和价值递增,最好的留到最后,由重钩子引出。
- 单次拍摄:相同背景,相同窗口。永无硬切换。
- 每次出现都与语词同步,屏幕变化间隔不超过1.5秒。
- 快速回顾,然后是改变观众看法的点睛之笔。
- 以手势结束,不仅要说出,还要展示:光标点击订阅、点击简介中的链接、然后输入关键词。
- 循环:最后一句话引回第一句话,最后一帧再次成为第一帧。
指南
| 读取时机 | 指南文件 |
|---|---|
| 分析参考视频、编写脚本、选择关键词和指南时 | references/script.md |
| 生成语音、获取单词、处理音频(不剪切)时 | references/voice.md |
| 生成开场镜头的提示词和重新调整时间、了解成本时 | references/opening-shot.md |
了解项目布局、reel.json、智能体、检查静态图、渲染时 | references/editing.md |
| 提供给编写场景的智能体的规则 | references/scene-rules.md |
| 封面的标题、标志、格式、将其设为第一帧时 | references/cover.md |
| 检查最终文件、字幕、仍需人工处理的事项时 | references/checks.md |
单独处理inspiration/文件夹中的文件,从参考视频到定时发布时 | references/autonomous-mode.md |
assets/reel-template/是Remotion项目。assets/example-this-voice/包含了整个已验证的短视频:脚本、分析、真实场景、简要说明。它是质量参考:在编写场景前,请先阅读其README.md,然后至少阅读Stakes.tsx和Setting2.tsx。assets/example-6-tools/提供了用于排名或分级列表的可复用场景。
已付的教训
- 录了两段音频时,Scribe转录的是第二段:在结果中读取
source.url,保留它实际转录的那段。 - Scribe的
words.json包含标签([softly])和作为单词的":":删除它们,并在scribe_words.json中保留{"words": [...]}格式。 - "Subscribe"之前的句子导致窗口为空:
CtaGuide.tsx现在在那段时间显示"Save"。 - 提示音和闪光效果盖过了关键词和点睛之笔(关键词处语音为-1.9 dB):模板中已降低音量。但仍需关注最密集的段落。
- Whisper会漂移并出错:时间戳来自Scribe,文本来自脚本(
build_reel.py将两者对齐)。 - 包含"Claude"的Whisper提示词导致它将"clone"读作"Claude"。无需提示词进行检查,并使用时间戳:
-nt跳过句子。 - 钩子关键词语音上的音效掩盖了语音:将其放置在该词结束后(至少7 dB的间隔,已测量)。
- 场景在其段落结束时精确停止会切掉结束戳记:场景需要重叠(
Reel.tsx中的STAGES),并且戳记从句子开头开始放置。 - 在句子宣布列表时窗口为空看起来有缺陷:从句子开头放置占位点槽。
- 用单词书写的数字会破坏字幕页面:
build_reel.py将"5 settings"保持在一起。 - GPU渲染导致元素每三帧消失一帧:始终使用
GL=swangle CONCURRENCY=1(已在render_final.sh中)。 - 视频上无3D变换,无
mixBlendMode,使用唯一的React键。 - chrome-headless-shell卡住:使用
CHROME_MODE=chrome-for-testing(已在脚本中)。 - 渲染后重做句子:保留已验证的语音,一次性生成结尾部分并在暂停处拼接(
references/voice.md)。 - 封面上,品牌标志简化为符号可能被误读:ElevenLabs的两条竖线看起来像暂停按钮,因此下方保留品牌名称。