Communitygithub.com

memex-lab/product-launch-video-skill

使用 Google Gemini TTS 從文字生成語音。適用於創建配音、旁白、Podcast 或任何文字轉語音任務。支援 70 多種語言、自然語言提示的風格/情感控制以及 30 種預設語音。觸發詞為「Gemini TTS」、「Google TTS」、「voiceover」、「narration」、「text to speech」、「speech generation」。

product-launch-video-skill 是什麼?

這個技能利用 Google Gemini Text-to-Speech API 從文字生成自然且富有表現力的語音。它支援 70 多種語言和 30 種預設語音,並允許透過自然語言提示和音頻標籤進行風格控制。技能的核心是一個多段語音腳本產生器,可以將多個文字片段合併為一個 API 請求,確保整個腳本語音一致性,然後透過 ffmpeg 偵測靜音來自動分割為單獨的音檔。該腳本還包含重試機制、自適應靜音偵測、音訊修剪等功能,並支援 WAV 和 MP3 格式。此技能適用於各種開發平台,包括 Cursor、Claude Code 等支援本地腳本執行的 AI 代理程式,需要 Node.js 18+、ffmpeg 和 GEMINI_API_KEY 環境變數。

相容平台~Claude Code~Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/memex-lab/product-launch-video-skill/tree/main/skills/gemini-tts

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

Gemini 文字轉語音

使用 Google Gemini TTS 從文字生成自然、富有表現力的語音。支援 70 多種語言、30 種預設語音,並可透過自然語言提示和音頻標籤進行風格控制。

需求: Node.js 18+、ffmpeg、@google/genai npm 套件、GEMINI_API_KEY 環境變數。

可用腳本

  • scripts/generate-tts.mjs — 全能型 TTS 生成器,具備單一請求一致性、基於靜音的分割功能,以及自動修剪功能。

快速入門

單段文字轉語音

npm install @google/genai
GEMINI_API_KEY=your-key node scripts/generate-tts.mjs \
  --text "你好,歡迎使用我們的產品!" \
  --output-dir public/vo \
  --voice Kore

多段配音(語音一致)

建立一個 segments.json:

[
  { "id": "intro", "text": "歡迎來到我們的產品發布會。" },
  { "id": "features", "text": "以下是您會愛上的三個功能。" },
  { "id": "close", "text": "立即在我們的網站上開始使用吧。" }
]

執行:

GEMINI_API_KEY=your-key node scripts/generate-tts.mjs \
  --segments segments.json \
  --output-dir public/vo \
  --voice Kore \
  --director-notes "語調:溫暖、自信、鼓舞人心。風格:專業旁白,帶有聲音微笑。口音:中性美式英語。語速:適中。"

輸出(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 NAMEKore預設語音名稱(參見語音表)
--model NAMEgemini-3.1-flash-tts-previewGemini TTS 模型 ID
--director-notes TEXT—表現指導:風格、語速、口音、呼吸、清晰度。不控制性別/年齡(請使用 --voice 控制)。
--retries N3API 錯誤時的最大重試次數
--trim / --no-trim--trim從段落邊界修剪靜音
--format FORMATmp3輸出格式:mp3 或 wav

退出碼

代碼含義
0成功
1缺少必要引數或環境變數
2API 錯誤,重試次數已耗盡
3ffmpeg 未安裝或處理失敗
4檔案 I/O 錯誤

工作原理(多段)

Gemini TTS 無法保證跨不同 API 請求的語音一致性。腳本透過以下方式解決此問題:

  1. 將所有段落合併為一個提示,並在它們之間加上 [3 second pause](3 秒暫停)標記
  2. 在一個 API 呼叫中生成單一連續音頻檔案
  3. 使用 ffmpeg silencedetect 搭配自適應閥值(從 noise=-35dB, d=1.5s 開始,逐步放寬)偵測靜音間隙。如果找到完全匹配,則直接使用。如果發生閥值跳躍(太少 → 太多),則以更快的語速重新生成音頻,使段落之間的暫停更明顯,然後重試偵測。
  4. 在靜音中點分割,產生個別段落檔案
  5. 從每個段落修剪殘留的靜音填充(每側約 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)

所選語音的表現指導。只定義重要的部分——過度指定會限制模型的創造力,並可能使結果變差。

最常見的三個方向是風格、語速和口音,但您可以包含任何與表現相關的自訂指示。

  • 風格 — 情感品質和表達特質。要具描述性:「具有感染力的熱情——聽眾應該感覺自己正在參與一件令人興奮的事情」比單純的 「有活力」 更有效。您可以疊加特質,並使用配音行業術語,例如「聲音微笑」。
  • 語速 — 整體速度和節奏變化。範圍可以從 「盡可能快地說」 到 「極其緩慢流暢,單詞之間相互融合,零急迫感」。
  • 口音 — 要具體。「在英格蘭克羅伊登聽到的英式英語」 比 「英國口音」 有效得多。
--director-notes "風格:熱情又帶點傲嬌的 Z 世代美妝 YouTuber。語速:極快,像短影音網紅一樣快速表達。口音:來自拉古納海灘的南加州山谷女孩。"

音頻標籤

在段落文字中使用內聯 [括號] 來進行逐詞控制。可局部覆蓋導演筆記。

[whispers](低語) [shouting](喊叫) [excited](興奮) [serious](嚴肅) [short pause](短暫停頓) [laughs](笑聲) [very fast](非常快) [very slow](非常慢) [sarcastic](諷刺) [curious](好奇)

創意標籤也可以使用:[like dracula](像德古拉)、[whispering conspiratorially](陰謀地低語)

範例:"[excited] 這改變了一切![short pause] 讓我向您展示如何做到。"

參考資料

  • 提示指南 — 針對風格、情感和口音的高階提示工程

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

相關技能