Gemini 文本转语音
使用Google Gemini TTS从文本生成自然、富有表现力的语音。支持70多种语言、30种预制语音,通过自然语言提示和音频标签控制风格。
要求: Node.js 18+、ffmpeg、
@google/genainpm 包、GEMINI_API_KEY环境变量。
可用脚本
scripts/generate-tts.mjs— 一站式TTS生成器,支持单次请求一致性、基于静音的拆分以及自动裁剪。
快速开始
单段文本转语音
npm install @google/genai
GEMINI_API_KEY=your-key node scripts/generate-tts.mjs \
--text "Hello, welcome to our product!" \
--output-dir public/vo \
--voice Kore
多段画外音(一致的语音)
创建一个 segments.json 文件:
[
{ "id": "intro", "text": "Welcome to our product launch." },
{ "id": "features", "text": "Here are the three features you will love." },
{ "id": "close", "text": "Get started today at our website." }
]
运行:
GEMINI_API_KEY=your-key node scripts/generate-tts.mjs \
--segments segments.json \
--output-dir public/vo \
--voice Kore \
--director-notes "Tone: Warm, confident, inspiring. Style: Professional narrator with a vocal smile. Accent: Neutral American English. Pacing: Moderate."
输出(JSON 到标准输出):
{
"success": true,
"segments": [
{ "id": "intro", "file": "public/vo/vo-intro.mp3", "duration": 3.25 },
{ "id": "features", "file": "public/vo/vo-features.mp3", "duration": 4.10 },
{ "id": "close", "file": "public/vo/vo-close.mp3", "duration": 2.80 }
],
"totalDuration": 10.15,
"fullAudioFile": "public/vo/vo-full.wav"
}
脚本选项
| 标志 | 默认值 | 描述 |
|---|---|---|
--segments FILE | — | JSON 文件,包含 [{id, text}] 段定义 |
--text TEXT | — | 要生成的单段文本(替代 --segments) |
--output-dir DIR | — | 音频文件输出目录(必填) |
--voice NAME | Kore | 预制语音名称(参见语音表) |
--model NAME | gemini-3.1-flash-tts-preview | Gemini TTS 模型 ID |
--director-notes TEXT | — | 表演指导:风格、节奏、口音、呼吸、发音。不控制性别/年龄(使用 --voice 控制)。 |
--retries N | 3 | API 错误的最大重试次数 |
--trim / --no-trim | --trim | 裁剪段边界处的静音 |
--format FORMAT | mp3 | 输出格式:mp3 或 wav |
退出码
| 码 | 含义 |
|---|---|
| 0 | 成功 |
| 1 | 缺少必需的参数或环境变量 |
| 2 | 重试耗尽后 API 错误 |
| 3 | ffmpeg 未安装或处理失败 |
| 4 | 文件 I/O 错误 |
工作原理(多段)
Gemini TTS 不保证跨不同 API 请求的语音一致性。脚本通过以下方式解决:
- 将所有段合并到一个提示中,段之间使用
[3秒暂停]标记 - 在单个 API 调用中生成一个连续的音频文件
- 使用 ffmpeg 的
silencedetect检测静音间隙,采用自适应阈值(从 noise=-35dB, d=1.5s 开始,逐步放宽)。如果找到精确匹配,直接使用。如果发生阈值跳跃(段数太少 → 太多),则用更快的语音节奏重新生成音频,使段间暂停更明显,然后重试检测。 - 在静音中点拆分,生成单独的段文件
- 裁剪每个段的残余静音填充(约每侧 1.5 秒),保留 0.15 秒呼吸空间
模型
| 模型 | 最适合的场景 |
|---|---|
gemini-3.1-flash-tts-preview | 最新、最可控、超过 200 个音频标签(默认) |
gemini-2.5-flash-preview-tts | 快速、质量良好、通用用途 |
gemini-2.5-pro-preview-tts | 最高质量、复杂表演 |
语音
30 种预制语音:
| 语音 | 性别 | 特点 | 音高 |
|---|---|---|---|
| Achernar | 女 | 柔和 | 较高 |
| Achird | 男 | 友好 | 较低中 |
| Algenib | 男 | 沙哑 | 较低 |
| Algieba | 男 | 平滑 | 较低 |
| Alnilam | 男 | 坚定 | 较低中 |
| Aoede | 女 | 轻快 | 中 |
| Autonoe | 女 | 明亮 | 中 |
| Callirrhoe | 女 | 随和 | 中 |
| Charon | 男 | 信息性 | 较低 |
| Despina | 女 | 平滑 | 中 |
| Enceladus | 男 | 有气息 | 较低 |
| Erinome | 女 | 清晰 | 中 |
| Fenrir | 男 | 兴奋 | 较低中 |
| Gacrux | 女 | 成熟 | 中 |
| Iapetus | 男 | 清晰 | 较低中 |
| Kore | 女 | 坚定 | 中 |
| Laomedeia | 女 | 乐观 | 较高 |
| Leda | 女 | 年轻 | 较高 |
| Orus | 男 | 坚定 | 较低中 |
| Puck | 男 | 乐观 | 中 |
| Pulcherrima | 男 | 前向 | 中 |
| Rasalgethi | 男 | 信息性 | 中 |
| Sadachbia | 男 | 生动 | 较低 |
| Sadaltager | 男 | 博学 | 中 |
| Schedar | 男 | 平稳 | 较低中 |
| Sulafat | 女 | 温暖 | 中 |
| Umbriel | 男 | 随和 | 较低中 |
| Vindemiatrix | 女 | 温柔 | 中 |
| Zephyr | 女 | 明亮 | 较高 |
| Zubenelgenubi | 男 | 随意 | 较低中 |
导演指导 (--director-notes)
针对所选语音的表演指导。只定义重要的内容——过多指定会限制模型的创造力并可能降低效果。
最常见的三种指导是风格、节奏和口音,但您也可以包含任何与表演相关的自定义指令。
- 风格 — 情感质量和表达特点。要描述性:
"Infectious enthusiasm — the listener should feel part of something exciting"比单纯的"energetic"效果更好。您可以叠加特征,并使用配音行业术语如“声音微笑”。 - 节奏 — 整体速度和节奏变化。可以从
"Speak as fast as possible"到"Incredibly slow and liquid, words bleed into each other, zero urgency"。 - 口音 — 要具体。
"British English as heard in Croydon, England"比"British accent"效果好得多。
--director-notes "Style: Enthusiastic and sassy GenZ beauty YouTuber. Pacing: Extremely fast, rapid delivery like short-form video influencers. Accent: Southern California valley girl from Laguna Beach."
音频标签
在段文本中使用内联 [括号] 进行逐词控制。可本地覆盖导演指导。
[whispers] [shouting] [excited] [serious] [short pause] [laughs] [very fast] [very slow] [sarcastic] [curious]
创意标签也有效:[like dracula]、[whispering conspiratorially]
示例:"[excited] This changes everything! [short pause] Let me show you how."
参考
- 提示指南 — 针对风格、情感和口音的高级提示工程