演示旁白 是做什么的?
工具:$VIDEO_ROOT/voice/ 来自 video-generations(speak.py,speak_cast.py,polish_vo.py,mix_narration.py,el_cache.py);模型位于 $VIDEO_ROOT/models(python studio/get_models.py)。
1. 像演讲者一样写作(脚本比声音更重要)
-
绝不照读屏幕。 屏幕文字陈述事实;旁白补充含义、情感或故事。如果一行文字与屏幕内容逐字重复,请重写或删除。例外情况:产品名称和最终标语。
-
每行一个想法。 短句,6-12 个单词。使用英语口语,允许缩写。
-
主线故事。 关注一个人物(例如,阿伦,阿尼塔,拉奥博士)并呼应他们;人们记住的是故事,而不是功能。
-
结尾焦点。 将关键词放在短语最后(“……每个团队只持有一个。”);声音自然会重读它。上下文前置:“在……两点十四分,清晨,// 阿伦 // 倒下了。”
-
3 的法则 用于列出好处和列表,节奏均匀。
-
对比与转折: 问题 → “现在,想象一下……” → 解决方案。
-
开头: 每个部分以一个锚点开头(“首先,对于家庭。”,“现在,走进医院。”)。
-
结尾: 陈述句以句号结尾,语调下降、完结。以承诺或标语、明确的邀请结尾,然后说“谢谢。”
-
节奏(公司风格): 语速缓慢、停顿过多会显得机械(“停顿太多,词语太少”)。默认使用流畅的演讲者节奏:
- 大多数行速度为 1.00,长列表/解释为 1.02,标语和结尾为 0.95–0.97,0.93 仅用于唯一的情绪爆发点。
- 每行最多一个
...保持节拍,且仅用于情感转折处(“两点十四分,清晨 ... 阿伦倒下了”,“如果 ... 它只需要一次点击呢?”)。少用/;优先使用普通逗号。 - 按此风格测量的语速:大约 每秒 2.6-2.8 个口语单词(af_kore)。预算 = 单词数 / 2.7 + 0.35 秒润色尾部;一行必须在下个视觉节拍前结束。
- 在问题铺垫后和解决方案的情感高潮后(“比第一晚还要平静。”)留出故意的静默(1-1.5 秒,无旁白)。
- 密度:一部 2.5 分钟的电影大约 230-250 个旁白单词;每个场景至少有一行,因此除计划中的静默外,没有场景的静默时间超过 3 秒。
-
诚实: 无虚构结果;虚构名称和数据为演示数据。
-
快速通道(为了节省时间): 编写所有行 → 使用上述预算估算时长 → 在生成前在文本中修复超限 → 只生成一次。在笔记本电脑上重新生成每行大约需要 25-40 秒,因此大部分时间都花在了需要重写的文本上。
2. 标记(旁白文件)
LINES = [(start_s, speed, text), ...],VOICE = '...',加上包含交付说明的文档字符串。示例:voice/examples/narration_demo.py。
/= 呼吸停顿(0.25 秒),//= 戏剧性停顿(0.55 秒),...= 保持节拍(0.8 秒)。- 在
voice/lexicon.py中重新拼写引擎无法识别的名称(例如 Arun → “Aroon”,Dr → “Doctor”),并先测试一行。 - 多角色对话:为
speak_cast.py使用LINES = [(key, voice, speed, text), ...](voice/examples/dialogue_demo.py)。
3. 语音
- 引擎:通过 kokoro-onnx 使用 Kokoro,离线运行,50+ 种语音。推荐演讲者选择:af_kore / af_heart(冷静、自信的女性),hm_omega / hm_psi(印度男性),am_onyx(低沉男性),bm_george(英国男性),hf_alpha / hf_beta(印度女性)。支持混合:
hm_omega:0.6,am_onyx:0.4。 - 对于新的语音选择,为每个候选者渲染 3 个具有代表性的行(钩子、解决方案、标语),然后在完整运行前让用户挑选。
- 无法强制词级重音;通过措辞、标点、停顿和速度来创造它。精确的重音需要人工录音。
- 高级云端语音:
voice/el_cache.py(ElevenLabs;每行计费一次,然后缓存)。
4. 生成 → 润色 → 混合
python voice/speak.py <narration>.py work/vo [voice]— 可中断恢复;每个短语被单独读出,然后与标记的静音连接起来。python voice/polish_vo.py work/vo work/vo_polished— 修剪、温暖/清晰均衡、温和压缩、微妙的房间效果、渐弱尾部。python voice/mix_narration.py <silent.mp4> <music.wav> <narration>.py work/vo_polished <out.mp4>— 放置行,将长行最多加速 1.08 倍,仅在必要时后移后续行,回避音乐,-16 LUFS,写入.srt。- 检查漂移报告。 每行应与其视觉节拍相差约 0.5 秒以内。如果漂移累积,请缩短或删除一行(优先删除重复屏幕内容的行),并将开始时间移到其视觉节拍;重新混合,无需重新生成未修改的行。
要重做某些行,将它们的旧剪辑移开,重新运行
speak.py;它只会填充缺失的剪辑。保持剪辑编号与 LINES 同步。 - 交付 MP4 和 SRT。