Claude Opus 5.5 が SeedRouter で利用できます

Whisper-1 API:初めての音声文字起こし

Whisper-1 に録音を送り、タスク ID を保存してテキストや字幕を取得します。Python の例でファイル確認、タイムスタンプ、最新料金を学びます。

Markdown で読む

初めての Whisper-1 API リクエストには、音声ファイル、明示的なモデル ID、出力形式が必要です。SeedRouter では録音をアップロードして返されたタスク ID を保存し、完了後に文字起こしをダウンロードします。内容を知っている短い録音から始めましょう。抜けた言葉や不自然な表記に気付きやすくなります。

このガイドは SeedRouter の非同期契約に沿っています。OpenAI SDK の同期サンプルをそのまま置き換えるものではありません。Whisper-1 モデルページには Playground と最新料金、API リファレンスには全フィールドと未完了の互換性確認事項があります。[1]

録音を 1 つ準備する

処理する権限のある音声を使ってください。短い WAV または MP3 が出発点として便利です。現在のアップロード上限は 26,214,400 バイトです。ファイルには読み取り可能で再生時間を測定できる音声が必要です。テキストファイルの拡張子を .mp3 に変えても有効な音声にはなりません。リファレンスでは、文書に記載された 9 形式と実環境の確認に合格した形式を区別しています。[1]

以下の録音は、このチュートリアル用に作成したオリジナルの英語合成音声です。カバー画像にはその波形を使っています。カバーの引用文は録音台本からの抜粋であり、精度に関する主張ではありません。

10.31 秒のサンプルをダウンロード。台本の原文は次のとおりです。「This is a sample recording for an audio transcription tutorial. Our meeting starts at nine thirty on Monday. Please bring the project notes and review the final checklist before we begin.」

API キーはサーバー側の環境変数に保存します。公開ウェブページ、モバイルアプリのバンドル、共有スクリーンショットには入れないでください。以下の Python サンプルは requests を使い、環境変数から SEEDROUTER_API_KEY を読み取ります。

Whisper-1 API リクエストを一度だけ送信する

最初のリクエストには json を選びます。字幕のタイムコードを扱わずに、ダウンロードした成果物の text フィールドを読めます。multipart の file パートには実際のバイトデータが必要です。値に URL を指定してもファイルのアップロードにはなりません。multipart のコンテンツタイプと boundary はクライアントに設定させてください。[1]

これを transcribe.py として保存します。POST 前に送信マーカーを書き込み、受理後にタスク ID を保存します。再実行すると既存のタスクを読み取ります。POST の結果が不明な場合は、マーカーが意図しない重複送信を防ぎます。

import json
import os
from pathlib import Path

import requests

base = "https://api.seedrouter.ai/v1"
headers = {"Authorization": f"Bearer {os.environ['SEEDROUTER_API_KEY']}"}
state = Path("whisper-task.json")
audio = Path("recording.wav")

if not state.exists():
    if not 0 < audio.stat().st_size <= 26_214_400:
        raise ValueError("Choose a nonempty recording within the upload limit")
    with state.open("x") as marker:
        json.dump({"status": "submission_unconfirmed"}, marker)
    with audio.open("rb") as recording:
        response = requests.post(
            f"{base}/audio/transcriptions",
            headers=headers,
            files={"file": (audio.name, recording, "audio/wav")},
            data={"model": "whisper-1", "response_format": "json"},
            timeout=180,
            allow_redirects=False,
        )
    response.raise_for_status()
    accepted = response.json()
    task_id = accepted.get("id")
    if not isinstance(task_id, str) or not task_id.startswith("task_"):
        raise RuntimeError("Submission could not be confirmed; check task history")
    state.write_text(json.dumps({"id": task_id}), encoding="utf-8")

saved = json.loads(state.read_text(encoding="utf-8"))
if "id" not in saved:
    raise RuntimeError("Check task history before submitting another recording")

response = requests.get(
    f"{base}/tasks/{saved['id']}", headers=headers, timeout=30,
    allow_redirects=False,
)
response.raise_for_status()
task = response.json()
print(task["status"])
if task["status"] == "completed":
    result = requests.get(task["output"]["url"], timeout=60)
    result.raise_for_status()
    print(result.json()["text"])
elif task["status"] == "failed":
    print(task["error"])

python transcribe.py を実行します。processing と表示された場合は数秒待ち、同じコマンドを再実行してください。再アップロードせず、保存済み ID を読み取ります。意図的に新しい録音を処理する場合は、録音ごとに別の状態ファイルを保存します。クライアントのタイムアウトだけではタスク失敗と判断できません。

完了した文字起こしを読む

受理時のレスポンスには id、model、status、created_at があります。完了時には output.url と output.format が追加されます。この URL は結果ファイルを指します。追加の有料リクエストが必要なメディア生成タスクではありません。GET で成果物を取得します。[1]

録音を聞きながら文字を確認します。字幕や正確な引用として使う前に、名前、数字、文の区切りを確認してください。文字起こしは発話の下書きであり、タイムスタンプがあっても確認は必要です。

2026 年 10 月 19 日のローカルのエンドツーエンド確認では、5 つすべての文字起こし形式と英語入力の翻訳が完了しました。これらは、テストした録音での結果取得と課金動作を確認したものです。精度の割合や言語間の翻訳品質を示すものではありません。

テキスト、タイムスタンプ、字幕を選ぶ

次の作業選択ダウンロードしたファイルの読み方
アプリケーションで文字を使うjsonJSON。まず text を読む
プレーンテキストの文字起こしを編集するtextプレーンテキスト
編集ソフトに字幕を取り込むsrt または vtt字幕テキスト
単語やセグメントを位置合わせするverbose_json要求したタイムスタンプ付き JSON

単語タイムスタンプには response_format=verbose_json を送信し、timestamp_granularities[] という繰り返し multipart フィールドに word を指定します。両方必要なら segment のパートも追加します。Python の requests では、繰り返しフィールドに (name, value) のペアのリストを使います。タイムスタンプは秒単位です。[2]

単語タイムスタンプと話者ラベルは別の出力です。セグメントを要求しただけでは、Whisper-1 は会議に話者ラベルを付けません。また、途中のテキストはストリーミングしません。このモデルでは stream が無視されます。検証済みの処理では chunking_strategy を省略してください。明示的な auto の選択は実環境の互換性確認に合格しませんでした。[1]

必要に応じて言語や表記の文脈を追加する

任意の language=en は、入力が英語であることを文字起こしリクエストに伝えます。自動検出する場合は省略してください。製品名が聞き違えられやすい場合は、音声と同じ言語で正しい表記を prompt に入れます。Whisper のプロンプトは文脈を与えるもので、特定のレイアウトを確実に命じるチャット指示のようには動作しません。[3]

文脈は音声に関係する内容に絞ります。Whisper が参照するのは、自身のトークナイザーの末尾 224 トークンだけです。長文を送信しても無制限の用語集にはならず、文字数を数えることもこのトークン規則の確かな代わりにはなりません。

英語への翻訳では、エンドポイントを /audio/translations に変えます。リクエストの 5 フィールドは file、model、prompt、response_format、temperature です。翻訳の出力は英語で、翻訳先言語の選択機能はありません。プロンプトを渡す場合は英語にしてください。[4]

作業を広げる前に費用を確認する

以下の料金表は音声の実測時間を使用します。同じ録音で文字起こしが長くなっても時間料金は増えません。各ファイルの時間を整数秒に切り上げてから音声計量単位に換算します。正確な計算式は API リファレンスにあります。Playground は録音の長さを読み取れると推定料金を表示します。失敗したリクエストは課金されません。

ModelUSD per minuteUSD per million audio metering units
whisper-1$0.036$36

For each recording: units = round(ceil(duration in seconds) × 1000 / 60). Multiply these audio units by the live unit rate. These are duration units, not transcript tokens. Both transcription and English translation use this rule. Failed requests are not charged.

多くのファイルを処理する前に、代表的な録音を 1 つ検証し、結果を確認します。各録音のタスク ID を残しておくと、接続中断後に既存の状態を読んで復旧できます。字幕やテストの少ない形式の組み合わせを追加する前に、全パラメータのリファレンスを確認してください。

初めての連携でよくある質問

OpenAI Python SDK の例をそのまま使えますか?

いいえ。multipart の入力フィールドはなじみのあるものですが、SeedRouter は非同期のタスク ID を返します。POST レスポンスに text があると想定する同期クライアントには調整が必要です。この例では送信と結果の取得を明示しています。

JSON 結果に単語タイムスタンプがないのはなぜですか?

デフォルトの json はテキスト向けの形式です。verbose_json と word のタイムスタンプ粒度を一緒に要求してください。セグメント時刻だけでは単語ごとの項目は作られません。

タイムアウト後にもう一度 POST すべきですか?

まず保存済みのタスク ID またはタスク履歴を確認します。受理後にレスポンスだけが失われた可能性があります。既存のタスクを読むことで、同じ録音への重複リクエストを避けられます。

Whisper-1 は廃止されますか?

OpenAI は、自社 API 上の Whisper を 2027 年 2 月 26 日に終了すると発表しました。この告知は本サービスの終了日を定めるものではありません。新しい連携を作る際は、ライフサイクルの告知を保守チェックリストに含めてください。[5]

参照元

[1] SeedRouter Whisper-1 API リファレンスと検証状況。確認日:2026 年 10 月 19 日。

[2] OpenAI 文字起こしリファレンス。

[3] OpenAI Whisper プロンプトガイド。

[4] OpenAI 翻訳リファレンス。

[5] OpenAI 文字起こしモデルの廃止告知。

関連ガイド