ElevenLabs 於 OpenRouter 上提供 TTS/STT 服務
ElevenLabs is now on OpenRouter
ElevenLabs 現已在 OpenRouter 上提供九款文字轉語音模型與兩款語音轉文字模型,讓已使用 OpenRouter 的應用可直接加入語音功能。
已經使用 OpenRouter 的應用可直接加入 ElevenLabs TTS/STT,並享 50% 折扣,省去額外訂閱,讓語音功能更輕鬆整合,並可即時呼叫多語言與高容量模型。
ElevenLabs 現已在 OpenRouter 上提供九個文字轉語音模型和兩個語音轉文字模型。
如果您的應用程式已透過 OpenRouter 與語言模型對話,它現在也能說話和聽話。使用 Eleven v4 以語調與語氣指示來敘述長篇內容,使用 v4 Turbo 為您的代理提供更快的語音回覆,或使用 Scribe v2 以說話者標籤轉錄對話。您不需要單獨的 ElevenLabs 計畫。只需使用 POST /api/v1/audio/speech 與 POST /api/v1/audio/transcriptions 呼叫並提供您的 OpenRouter API 金鑰。
所有 OpenRouter 客戶在 10 月 19 日 8am PT 前,皆可以 ElevenLabs 所有模型的官方零售價格 50% 折扣購買。
哪一個模型適合使用
先從三個模型開始,必要時再使用其餘模型:
- 敘事、角色、產品影片: Eleven v4。音訊標籤可讓指令碼承載表現。
- 語音代理與即時回覆: Eleven v4 Turbo,ElevenLabs 為即時使用而打造,費用為 v4 之半。
- 文字稿、會議記錄、字幕: Scribe v2,帶有說話者標籤與單字時間戳。
當長篇音訊需要速度控制時,請使用 Multilingual v2;當每次請求需要高容量語音(最高 40,000 字元)時,請使用 Flash v2.5。Scribe v2 Medical 已針對醫療術語進行微調。
文字轉語音
| 模型 | OpenRouter ID | 每次請求最大字元數 | 適用於 |
|---|---|---|---|
| Eleven v4 | elevenlabs/eleven-v4 | 10,000 | ElevenLab 的最高品質、最具情感的語音。表現力豐富的敘事與角色演繹,並可使用 [whispering]、[laughing] 等音訊標籤 |
| Eleven v4 Turbo | elevenlabs/eleven-v4-turbo | 10,000 | 低延遲回覆,適用於語音代理 |
| Eleven v3 | elevenlabs/eleven-v3 | 5,000 | 表現力豐富/戲劇化敘事與角色表演,並帶有音訊標籤 |
| Eleven v3 Conversational | elevenlabs/eleven-v3-conversational | 5,000 | 雙向對話,費用為 v3 之半。具備戲劇性範圍,適合即時對話。 |
| Eleven Multilingual v2 | elevenlabs/eleven-multilingual-v2 | 10,000 | 多語言長篇音訊穩定,並可調速。 |
| Eleven Flash v2.5 | elevenlabs/eleven-flash-v2.5 | 40,000 | 快速、低成本的多語言語音,支援高音量。提供 32 種語言。 |
| Eleven Flash v2 | elevenlabs/eleven-flash-v2 | 30,000 | 快速英文語音 |
| Eleven Turbo v2.5 | elevenlabs/eleven-turbo-v2.5 | 40,000 | ElevenLab 的第一代低延遲模型,已被 Flash 取代 |
| Eleven Turbo v2 | elevenlabs/eleven-turbo-v2 | 30,000 | ElevenLab 的第一代低延遲模型,已被 Flash 取代 |
ElevenLabs 將其模型分為兩個價格層級。Eleven v4、v3 及 Multilingual v2 以全額每字費率計費,而 v4 Turbo、v3 Conversational、Flash 與 Turbo 則以半額計費。當前每字價格可在每個模型頁面中的 文字轉語音集合 查閱。
語音轉文字
| 模型 | OpenRouter ID | 適用於 |
|---|---|---|
| Scribe v2 | elevenlabs/scribe-v2 | 一般轉錄,包含單字時間戳、說話者標籤和音訊事件標籤,支援 90 多種語言 |
| Scribe v2 Medical | elevenlabs/scribe-v2-medical | 醫療術語在臨床音訊上比 Scribe v2 錯誤率低 35% |
兩個 Scribe 模型使用相同的請求格式和相同的每秒價格。即時 Scribe v2 透過 WebSocket 並非本次發布的一部分。
流程說明:從第一個 MP3 到語音代理
我們將以三個步驟建立一個簡易產品導覽。首先 Eleven v4 進行旁白。接著語音代理回答相關問題,最後 Scribe v2 將團隊的回顧會議轉成筆記,顯示誰說了什麼。若請求行為與預期不符,請參考最後的提示。
一次設定您的 API 金鑰:
export OPENROUTER_API_KEY="your-api-key"步驟 1:使用 Eleven v4 旁白產品導覽
以一句旁白開始:
curl https://openrouter.ai/api/v1/audio/speech \
--fail-with-body \
-H "Authorization: Bearer $OPENROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "elevenlabs/eleven-v4",
"input": "[cheerfully] Welcome to the tour. [whispering] Let me show you the shortcut first.",
"voice": "george",
"response_format": "mp3"
}' \
--output intro.mp3voice 以 ElevenLabs 的 21 種預設語音之一(george 這裡)為名;名稱不區分大小寫。注意明確的 response_format — 參見 首次請求提示。
方括號中的文字為音訊標籤。Eleven v4 與 v3 會把 [whispering]、[laughing]、[sighs]、[curious] 等標籤當作交付指令讀取,而不是朗讀它們。標籤會計入你被收費的字數。
完整的導覽指令碼長度超過單次請求所允許的字數(v4 為 10,000 字,v3 為 5,000 字),因此請在段落邊界處拆分。僅適用於 ElevenLabs 的設定放在 provider.options.elevenlabs。將相鄰文字分別傳遞為 previous_text 與 next_text,以保持連線處語調一致,並修正 seed 以使重跑更具可重複性:
import os
import requests
API = "https://openrouter.ai/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['OPENROUTER_API_KEY']}"}
NARRATOR = "george"
def split_paragraphs(text: str, limit: int = 9000) -> list[str]:
chunks, current = [], ""
for para in text.split("\n\n"):
if current and len(current) + len(para) + 2 > limit:
chunks.append(current)
current = para
else:
current = f"{current}\n\n{para}" if current else para
return chunks + [current] if current else chunks
chunks = split_paragraphs(open("tour-script.txt").read())
with open("tour.mp3", "wb") as out:
for i, chunk in enumerate(chunks):
options = {"seed": 7}
if i > 0:
options["previous_text"] = chunks[i - 1][-500:]
if i + 1 < len(chunks):
options["next_text"] = chunks[i + 1][:500]
r = requests.post(
f"{API}/audio/speech",
headers=HEADERS,
json={
"model": "elevenlabs/eleven-v4",
"input": chunk,
"voice": NARRATOR,
"response_format": "mp3",
"provider": {"options": {"elevenlabs": options}},
},
)
r.raise_for_status()
out.write(r.content)第二步:以語音代理回答問題
現在讓使用者以語音提問導覽問題。語音代理串接三個模型:Scribe v2 處理問題、聊天模型產生答案,Eleven v4 Turbo 回覆。ElevenLabs 為即時使用打造 v4 Turbo,且其收費為 v4 的一半。
import base64
def transcribe(path: str) -> str:
with open(path, "rb") as f:
audio_b64 = base64.b64encode(f.read()).decode()
r = requests.post(
f"{API}/audio/transcriptions",
headers=HEADERS,
json={
"model": "elevenlabs/scribe-v2",
"input_audio": {"data": audio_b64, "format": "wav"},
},
)
r.raise_for_status()
return r.json()["text"]
def answer(question: str) -> str:
r = requests.post(
f"{API}/chat/completions",
headers=HEADERS,
json={
"model": "openai/gpt-5-mini",
"messages": [
{"role": "system", "content": "You are the product tour guide. Answer in one or two sentences."},
{"role": "user", "content": question},
],
},
)
r.raise_for_status()
return r.json()["choices"][0]["message"]["content"]
def speak(text: str, out_path: str) -> None:
r = requests.post(
f"{API}/audio/speech",
headers=HEADERS,
json={
"model": "elevenlabs/eleven-v4-turbo",
"input": text,
"voice": NARRATOR,
"response_format": "mp3",
},
)
r.raise_for_status()
with open(out_path, "wb") as f:
f.write(r.content)
speak(answer(transcribe("question.wav")), "reply.mp3")轉錄回應為 JSON,包含在 text 的文字稿,以及一個 usage 物件報告音訊秒數與請求金額(美元)cost。將 openai/gpt-5-mini 交換成 目錄 中任何聊天模型,且不改動音訊呼叫,保持相同的 voice,使代理聽起來像第一步的敘述者。
第三步:將審查會議轉成帶說話者標籤的筆記
當團隊聚會審查導覽時,Scribe v2 可告訴你誰說了什麼。以 multipart 上傳錄音,請求 verbose_json 並包含單詞時間戳,並在 provider.options.elevenlabs 下設定 diarize。回應中的每個單詞都會帶有說話者資訊。如果你知道會議中人數,傳遞 num_speakers 以改善分割。
curl https://openrouter.ai/api/v1/audio/transcriptions \
--fail-with-body \
-H "Authorization: Bearer $OPENROUTER_API_KEY" \
-F file="@tour-review.mp3" \
-F model="elevenlabs/scribe-v2" \
-F response_format="verbose_json" \
-F "timestamp_granularities[]=word" \
-F provider='{"options": {"elevenlabs": {"diarize": true, "num_speakers": 3, "tag_audio_events": true}}}'words 中的每個條目包含 word、start、end、confidence、speaker(整數)以及 speaker_label(speaker_0、speaker_1 等)。tag_audio_events 會在單詞旁加上如 (laughter) 的條目。按 speaker 將連續單詞分組以得到回合,然後將回合送給聊天模型做摘要與行動項:
def to_turns(words: list[dict]) -> list[str]:
turns: list[tuple[int, list[str]]] = []
for w in words:
if turns and turns[-1][0] == w.get("speaker"):
turns[-1][1].append(w["word"])
else:
turns.append((w.get("speaker"), [w["word"]]))
return [f"Speaker {s}: {' '.join(ws)}" for s, ws in turns]上傳上限為 25 MB,約可容納 27 分鐘 128 kbps MP3。
對於較長的錄音,傳入公開 URL,ElevenLabs 直接下載檔案,這樣 25 MB 上限就不適用:
"input_audio":{ "url": "https://example.com/tour-review.mp3" }極長檔案仍可能觸發 180 秒上游請求逾時,請將長時間錄音拆分。
首次請求小技巧
- 按名稱或 ID 選擇語音。
對於
voice,可傳遞 ElevenLabs 21 種預製語音之一的名稱:george、sarah、adam、alice、bella、brian、charlie、daniel、jessica、roger、will等(完整列表請參閱各模型頁面)。 名稱不區分大小寫。若要使用其他語音,請以voice傳入其 ElevenLabs 語音 ID — 從 ElevenLabs 語音庫 複製。 你克隆或設計的語音存在於自己的 ElevenLabs 帳號,請使用 BYOK 的語音。 - 若想取得可播放的檔案,請要求
mp3若省略response_format,我們的語音端點會回傳原始 PCM(16 位元小端單聲道 24 kHz)。適合音訊管線,但大多數播放器無法開啟。設定"response_format": "mp3"可取得可播放的 44.1 kHz、128 kbps 檔案。 - 使用 Multilingual v2 或 Flash 控制播放速度
Multilingual v2 與 Flash 可將
speed調整至 0.7 到 1.2。Eleven v4 與 v4 Turbo 無速度控制,且拒絕非預設speed,因此在這些模型上不要設定,改用音訊標籤調整節奏。 - 拆分長指令碼
每個模型都有單次請求字數上限(請參閱模型表)。音訊標籤會計入上限及計費字數。按步驟 1 在段落邊界拆分,並傳遞
previous_text與next_text,使連線自然。 - ElevenLabs 專用設定位於
provider.options.elevenlabsText to Speech 接受seed、previous_text、next_text、language_code、apply_text_normalization、apply_language_text_normalization、pronunciation_dictionary_locators、voice_settings(stability、similarity_boost、style、use_speaker_boost、speed),以及output_format(ElevenLabs 格式名稱,例如mp3_22050_32或pcm_16000;必須與您的response_format編解碼器相符)。Speech to Text 接受diarize、num_speakers、diarization_threshold、tag_audio_events、no_verbatim、seed。num_speakers與diarization_threshold需要diarize: true,您只能設定其中一個,不能同時設定兩個。請使用列出的欄位名稱。不在列表中的鍵會被忽略;若列出的鍵值不正確,將回傳 400。 - Scribe 會回傳三字母語言碼
您可以送出兩字母的
language提示(en)。偵測到的語言會以 ISO 639-3 程式碼(eng)回傳。
入門
- 建立一個 OpenRouter API 金鑰。
- 使用上方第 1 步的 curl 範例傳送您的第一個請求。
- 每個引數請參閱 Text to Speech 與 Speech to Text 指南。
Text to Speech 的費用按輸入字元計算,字元以 Unicode 程式碼點計算,因此表情符號或 CJK 字元算作一個字元。音訊標籤亦算作字元。Scribe 的費用按音訊秒數計算,每次轉錄回應的 usage.cost 欄位會告訴您該請求的成本。我們直接使用 ElevenLabs 的價格,不加額外費用;請參閱各模型頁面瞭解最新費率。
已經擁有 ElevenLabs 帳號?
使用 BYOK 加入您的金鑰,以使用您自己的克隆聲音、發音字典,及更高品質的格式,例如 mp3_44100_192。
建立一個 OpenRouter API 金鑰,或先在 Playground 試用模型。Text to Speech 與 Speech to Text 指南提供完整的請求參考。
來源:openrouter blog · openrouter.ai