跳到正文
openrouter blog·· 2026-07-22精選AI 評分67

OpenRouter 推出語音轉文字 API 端點支援 Whisper 等模型

Transcription on OpenRouter

AI 導讀

OpenRouter 正式推出全新語音轉文字端點 POST /api/v1/audio/transcriptions,讓開發者能使用與 Chat Completions 相同的 API 金鑰與身分驗證來處理語音轉文字任務。

推薦理由

原文介紹 OpenRouter 新推出的語音轉文字端點功能與支援模型,開發者可據此評估整合至現有工作流程。

正文 · AI 翻譯

你有一段 40 分鐘的銷售電話錄音、一個語音備忘錄資料夾,或是使用者長按麥克風按鈕,並需要文字稿。傳統做法是啟動 Whisper 伺服器或為語音轉文字額外加入第二個供應商 SDK,搭配已處理聊天流量的系統。在 OpenRouter,你可以將音訊送到 POST /api/v1/audio/transcriptions,並以相同的 API 金鑰與 Chat Completions 相同的授權方式,取得包含文字稿與使用量物件的 JSON。

不需要新的 SDK 或獨立服務。由於轉錄功能與聊天流量在同一平臺執行,若模型由多個供應商託管,將自動在它們之間負載平衡,而非固定於單一供應商。

簡而言之

  • 將 base64 編碼的音訊送至 POST /api/v1/audio/transcriptions,並從回應中讀取 JSON 文字與 usage 物件。它使用與 Chat Completions 相同的 Bearer 金鑰。
  • Whisper 模型在此可用:openai/whisper-1、openai/whisper-large-v3、openai/whisper-large-v3-turbo。亦有以 token 計價的更新版語音轉文字(STT)模型。透過 ?output_modalities=transcription 探索,而非預設目錄。
  • 當轉錄模型由多個供應商託管時,我們會自動在它們之間負載平衡。你在聊天時使用的每請求路由控制(order、allow_fallbacks、data_collection、sort)今日不適用於此端點;此處的 provider 區塊僅包含供應商特定選項。使用 Bring-your-own-key(BYOK)僅為平臺費用路由至你自己的供應商金鑰。
  • 實際設計時的限制包括 60 秒上游逾時、無音訊 URL(請送 base64 JSON,或最多 25 MB 的 OpenAI 樣式 multipart 檔案),以及不支援 SRT/VTT 輸出。大多數供應商(包括 OpenAI、Groq、Deepgram、Mistral)均可透過 response_format: "verbose_json" 取得單字與段落時間戳。
  • 定價依模型而定,為時長或 token 為基礎,且 無供應商加價。usage.cost 欄位回傳實際每請求成本,方便你量化開銷。

如何在 OpenRouter 轉錄音訊?

將 base64 編碼的音訊送至 POST /api/v1/audio/transcriptions,並從 JSON 回應讀取 text 欄位。你以 Bearer token 方式傳遞 OpenRouter API 金鑰,與聊天呼叫相同,設定模型並傳入音訊。

回應為 JSON,其中 text 字串包含文字稿,usage 物件報告音訊時長(秒)、token 數量及請求成本(美元)。你只需一次請求,文字稿即於回應主體返回,無需輪詢亦無工作 ID 可追蹤。

Three-step diagram of transcribing audio on OpenRouter: base64-encoded audio in the request body, POST /api/v1/audio/transcriptions with automatic load-balancing across providers, and a JSON response with text and usage fields

請求主體包含 model 與 input_audio 物件。在 input_audio 內放入 base64 資料與格式字串。可選擇加入語言提示、溫度與 provider 區塊。以下為完整範例:

# Encode the file to base64, then POST it.
AUDIO_B64=$(base64 -i meeting.mp3 | tr -d '\n')

curl https://openrouter.ai/api/v1/audio/transcriptions \
  -H "Authorization: Bearer $OPENROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/whisper-1",
    "input_audio": { "data": "'"$AUDIO_B64"'", "format": "mp3" },
    "language": "en"
  }'
import base64
import os

import requests

with open("meeting.mp3", "rb") as f:
    audio_b64 = base64.b64encode(f.read()).decode("utf-8")

api_key = os.environ["OPENROUTER_API_KEY"]

response = requests.post(
    "https://openrouter.ai/api/v1/audio/transcriptions",
    headers={"Authorization": f"Bearer {api_key}"},
    json={
        "model": "openai/whisper-1",
        "input_audio": {"data": audio_b64, "format": "mp3"},
        "language": "en",
    },
)

print(response.json()["text"])
import { OpenRouter } from '@openrouter/sdk';
import { readFileSync } from 'fs';

const openRouter = new OpenRouter({ apiKey: process.env.OPENROUTER_API_KEY });

const audioB64 = readFileSync('meeting.mp3').toString('base64');

const result = await openRouter.stt.createTranscription({
  sttRequest: {
    model: 'openai/whisper-1',
    inputAudio: { data: audioB64, format: 'mp3' },
    language: 'en',
  },
});

console.log(result.text);

有哪些可用的語音轉文字模型?

可從兩大類模型中挑選。Whisper 型別模型,例如 openai/whisper-1,以時長計價(每秒音訊),而更新的語音轉文字模型則以 token 計價。選擇哪一種取決於你的準確度要求、語言組合與預算。

STT 模型 ID 未出現在預設 /api/v1/models 目錄中,這是預期的,因為轉錄屬於你過濾的輸出模態。

curl "https://openrouter.ai/api/v1/models?output_modalities=transcription" \
  -H "Authorization: Bearer $OPENROUTER_API_KEY"

此操作會回傳語音轉文字模型及其目前每模型定價。若你想以頁面形式閱讀,亦可在 Speech-to-Text collection 找到相同清單,且 model catalog 提供即時每模型價格。

若想在連線前先試用模型,OpenRouter Playground 可在瀏覽器中轉錄上傳檔案。

逐項欄位請求合約

整個流程分為三個步驟。你需要將檔案進行 base64 編碼,使用模型和格式傳送 POST,並從回應中讀取 text 和 usage。data 欄位接收原始 base64 位元組,而不是 data: URI,因此不要以 data:audio/mp3;base64, 為字首。format 欄位為必填,並告知上游模型如何解碼這些位元組。

引數必填說明
model是STT 模型 slug,例如 openai/whisper-1
input_audio.data是音訊為 base64(原始位元組,不是 data: URI)
input_audio.format是wav、mp3、flac、m4a、ogg、webm、aac 中之一
language否ISO-639-1 程式碼(en、es 等)。若省略則自動偵測
temperature否取樣溫度,0 至 1
response_format否json(預設)或 verbose_json,後者會在支援的供應商回傳時加入 language、duration 和段落時間戳
timestamp_granularities否["segment"] 或 ["word"] 搭配 verbose_json;word 在 words 陣列中加入單字級時間戳
provider否供應商特定選項透傳(例如 Groq prompt)。此端點不支援每次請求的路由控制

此端點也接受 OpenAI 風格的 multipart/form-data 上傳(file 加上 model),上限 25 MB。若你已有為 OpenAI 的 /v1/audio/transcriptions 建置的客戶端,可將其基底 URL 指向 https://openrouter.ai/api/v1,並保持不變。超過 25 MB 的檔案將透過 base64 JSON 路徑處理。

語言提示為選填。若省略,模型會偵測語言;設定可減少短或雜訊片段的歧義。部分供應商可透過 provider 接收自訂引數。以 Groq 為例,它會透過 provider.options.groq.prompt 接收預期詞彙的 prompt,有助於正確處理專有名詞與行話。

回應與使用量計算

回應為 JSON,包含 text 字串與 usage 物件。使用量物件允許你針對每個請求計量消耗,而非估算。

{
  "text": "Thanks everyone for joining. Let's start with the Q3 numbers.",
  "usage": {
    "seconds": 9.2,
    "total_tokens": 113,
    "input_tokens": 83,
    "output_tokens": 30,
    "cost": 0.000508
  }
}

該 cost 值僅為檔案範例,非實際報價;實際成本取決於模型與音訊長度。使用量物件報告 seconds(音訊時長)、token 數量,以及 cost 美元。回應亦攜帶 X-Generation-Id 標頭,供你日後追蹤或除錯特定請求。

何時使用轉錄、音訊輸入或語音合成?

若想將音訊轉為文字,請使用 /audio/transcriptions;若在聊天中使用音訊輸入,則讓模型對音訊進行推理。

轉錄端點適用於會議記錄、語音指令、字幕以及可搜尋的通話或播客檔案。若你想對支援電話進行情緒分析、針對所說內容進行 Q&A,或在單一提示中混合音訊與其他模態,請使用 /chat/completions 上的 input_audio 內容型別。將文字轉為語音則是第三個獨立端點。

Side-by-side comparison of the transcription endpoint (POST /api/v1/audio/transcriptions, audio to text, returns JSON text plus usage) versus audio input on chat (input_audio on /chat/completions, reason about audio, returns a chat completion), with use cases for each

你想要…使用獲得
音訊轉文字(轉錄)POST /api/v1/audio/transcriptionsJSON 文字加使用量
模型對音訊進行推理(情緒、Q&A、多模態)input_audio 在 /chat/completions 上聊天完成

對於音訊分析與語音合成,請參閱 audio APIs announcement。

轉錄時供應商路由如何運作?

轉錄使用與聊天相同的路由層。若同一模型由多個供應商託管,我們會按價格進行負載平衡,將請求分配到各供應商,避免被鎖定於單一供應商。轉錄目前不支援每次請求的路由控制。你在聊天呼叫中設定的 order、only、allow_fallbacks、data_collection 與 sort 欄位,在 /api/v1/audio/transcriptions 上不會被套用。此端點的 provider 區塊提供供應商特定選項:

{
  "model": "openai/whisper-large-v3",
  "input_audio": { "data": "<base64>", "format": "wav" },
  "provider": {
    "options": {
      "groq": { "prompt": "Expected vocabulary: OpenRouter, API, transcription" }
    }
  }
}

那個請求會將一個詞彙提示傳給 Groq,讓它正確處理本來會被扭曲的專有名詞。選項以供應商 slug 為鍵,只有匹配的供應商選項會被轉發。如果你需要鎖定特定供應商或在一次轉錄請求上強制執行資料政策,這個端點目前還不支援此控制。完整的供應商物件已在 provider routing docs 中說明。

OpenRouter 不會標示供應商價格,因此你付的是目錄價格,Zero Completion Insurance 表示失敗的轉錄不會被收費。若你已經有供應商協議,BYOK 允許你使用自己的供應商金鑰路由,並只支付我們 5% 的平臺費,而不是在計畫依賴的免費額度後按使用量收費;請參閱 pricing page 瞭解最新資訊。

計畫的限制有哪些?

四項限制決定了你如何構造轉錄請求:

Diagram of supported audio formats (wav, mp3, flac, m4a, ogg, webm, aac) and the three limits to plan around: the 60-second processing timeout, no audio URLs, and no SRT/VTT output

限制對你的影響
60 秒上游超時~60 秒的處理時間,而非音訊長度的硬性上限。大型或未壓縮的錄音最容易超時。將長音訊分割成段落,逐段轉錄,然後拼接文字。
無音訊 URL此端點不支援以 URL 傳遞音訊。請使用 base64 JSON 或 OpenAI 風格的 multipart 檔案,大小上限 25 MB。壓縮格式(mp3、aac)可產生更小、更快的資料負載。
無 SRT/VTT 輸出srt、vtt、text 回應格式會被 400 拒絕。時間戳可透過 verbose_json 取得;請自行使用這些時間戳建立字幕檔。
格式支援依供應商而異常見格式為 wav/mp3/flac/m4a/ogg/webm/aac,但特定模型或供應商可能不支援全部。wav 是最安全的預設選項。

由於超時限制的是處理時間而非音訊長度,僅看片段持續時間並不能判斷是否能處理。像整晚遊戲錄音這類持續數小時的錄音,需要分段處理;單一請求無法覆蓋。

對於字幕,預設回應僅包含文字及使用量,沒有時間戳。將 response_format 設為 verbose_json 可獲得段落級時間戳,若傳入 timestamp_granularities: ["word"] 則還能得到單字級時間戳。OpenRouter 只對能回傳時間戳的端點(如 OpenAI、Groq、Deepgram、Mistral、Azure)傳送 verbose_json 請求;若某模型的所有端點都不支援,像 openai/gpt-4o-transcribe 那樣,請求會以 400 失敗。沒有內建的 .srt/.vtt 輸出,你必須自行從時間戳建立字幕檔。

一次轉錄請求的費用是多少?

你付的是模型的目錄價格,沒有我們的加價,usage.cost 欄位會告訴你每次請求的精確金額。Whisper 類模型按音訊秒數收費,更新模型則按 token 收費。

費率會變動,我們會在每個模型頁面的 catalog 顯示即時數值,而非在此列印。從回應中讀取 usage.cost 可得知每次請求實際成本。STT 模型為付費,API 轉錄會扣除你的信用餘額。

開始前,先在 Playground 確認模型適合你的音訊,配置呼叫,並在每次請求中讀取 usage.cost 以從第一天起追蹤消費。

常見問題

如何使用 OpenRouter 轉錄音訊檔?

將 base64 編碼的音訊傳送至 POST /api/v1/audio/transcriptions,並使用 model 與 input_audio 物件(data 加上 format)。回應為 JSON,包含 text 字串(逐字稿)與 usage 物件(秒數、tokens、成本)。使用與 Chat Completions 相同的 Bearer API 金鑰與授權。

OpenRouter 支援 Whisper 嗎?

是的。可使用三種 Whisper 模型:openai/whisper-1、openai/whisper-large-v3、openai/whisper-large-v3-turbo。STT 模型 ID 不在預設的 /api/v1/models 列表中,您可以透過 ?output_modalities=transcription 過濾或瀏覽 Speech-to-Text collection 來發現它們。Whisper 以時長計價,每秒音訊;較新的 STT 模型則以 token 計價。

OpenRouter 轉錄支援哪些音訊格式?

常見的集合為 wav、mp3、flac、m4a、ogg、webm 與 aac,需在必填的 input_audio.format 欄位中傳遞。支援度因模型與供應商而異,因此並非所有模型都接受所有格式。wav 是最安全的預設選擇,能廣泛相容;像 mp3 這類壓縮格式則提供較小、較快的資料量。

OpenRouter 能回傳時間戳記或 SRT/VTT 字幕嗎?

時間戳記,當然。將 response_format 設為 verbose_json 以取得段落級時間戳記,並加入 timestamp_granularities: ["word"] 以在 words 陣列中取得單字級時間戳記。大多數供應商都支援,包括 OpenAI、Groq、Deepgram、Mistral 與 Azure;若某模型沒有能回傳時間戳記的端點,例如 openai/gpt-4o-transcribe,則會以 400 錯誤拒絕。SRT/VTT 輸出不支援,請自行使用時間戳記建立字幕檔。

音訊長度上限為何?

實際上限為大約 60 秒的上游處理逾時,而非固定的音訊長度上限。短短與中等長度片段可一次呼叫完成。對於較長錄音,請將音訊切成段落,逐段轉錄,最後將文字拼接。

OpenRouter 的轉錄費用是多少?

您只需支付模型的目錄價格,無額外加價。Whisper 類模型按秒計價;較新的 STT 模型則按 token 計價。每個回應中的 usage.cost 欄位會列出該請求的實際美元成本。

來源:openrouter blog · openrouter.ai