【2026年版】Whisper API を Python で30分実装

シアン基調の空間でリボン状の音波が滑らかに流れ右側で黄色の光に変換されていく構図

議事録の文字起こしや動画字幕の手作業は、もうエンジニアの仕事ではありません。Whisper API を使えば、1時間の会議録音を数十秒で日本語テキストに変換できます。

本記事では、Whisper API を Python で30分以内に動かす最短手順を解説します。OpenAI と Groq の2系統を料金・速度・精度の3軸で公式情報に基づき比較し、長尺音声・話者分離まで対応できる応用パターンを示します。

目次

Whisper API とは何か

Whisper は OpenAI が開発した多言語音声認識モデルで、API 経由でもローカルでも利用できます。まず押さえるべきは「オープンソース版」と「商用 API 版」の区別です。

オープンソース版と商用版の違い

オープンソース版は GitHub の openai/whisper リポジトリで MIT ライセンス配布されており、tiny(39M)、base、small、medium、large(1,550M)、turbo(809M)の6系統が存在します。large は約10GB、turbo は約6GB の VRAM で動作し、元論文は arXiv:2212.04356(2022年12月)として公開されています。

商用 API は OpenAI と Groq の2系統が主流です。OpenAI は Speech to Text APIwhisper-1 と GPT-4o 系の gpt-4o-transcribe / gpt-4o-mini-transcribe を提供しています。Groq は LPU と呼ばれる独自チップで Whisper を高速実行し、公式ドキュメントでは whisper-large-v3whisper-large-v3-turbo が選べます。

両者ともエンドポイントは OpenAI 互換のため、SDK の base_url を切り替えるだけで実装を流用できます。選択軸は「速度と料金の Groq」か「エコシステム統合の OpenAI」かに集約されます。

OpenAI と Groq の3軸比較

アクア色の額装空間に三角形の軸構造が浮かび3つの頂点で珊瑚色の光が均衡している構図
料金・速度・精度の3軸を三角バランスで対比

ここでは公式の一次情報のみで、料金・速度・精度を並べて比較します。「速い」「安い」では選定材料になりません。

料金比較表

主要5モデルの料金を整理した表です。すべて2026年5月時点の公式料金表に基づきます。

モデル 提供元 料金($/時) 料金($/分) 備考
whisper-1 OpenAI $0.36 $0.006 標準モデル
gpt-4o-transcribe OpenAI $0.36 $0.006 GPT-4o 系
gpt-4o-mini-transcribe OpenAI $0.18 $0.003 GPT-4o mini 系
whisper-large-v3 Groq $0.111 約$0.00185 Speed Factor 217x
whisper-large-v3-turbo Groq $0.04 約$0.00067 Speed Factor 228x

料金の出典は OpenAI 公式 API ドキュメントGroq Pricing です。turbo は whisper-1 比で約9倍安価で、1時間の音声を $0.04 で書き起こせる計算になります。Groq には10秒の最小課金単位があり、5秒の音声でも10秒分が課金される点には注意が必要です。

速度の実値

Groq の優位は Speed Factor、すなわち音声長に対する処理速度の倍率にあります。Groq 公式ブログの turbo リリース告知(2024年10月9日)では、Artificial Analysis のベンチマークで 216x real-time が報告されました。料金表の最新値では turbo が 228x、無印 large-v3 が 217x です。1時間の音声であれば、turbo は約16秒で処理が完了します。OpenAI 側は Speed Factor を公表していないため、速度勝負では Groq に分があります。

精度の客観評価

精度は Open ASR Leaderboard の WER(Word Error Rate、単語誤り率)で比較できます。Hugging Face の whisper-large-v3 モデルカードによれば、平均 WER は 7.44 です。内訳は LibriSpeech Clean 2.01、GigaSpeech 10.02、Earnings22 11.29、AMI 15.95 となっています。

v3 はメルスペクトログラム入力ビン数を 80 から 128 に拡張し、広東語トークンも追加されました。学習データは弱ラベル付き音声100万時間と v2 由来の疑似ラベル400万時間を合わせた計500万時間で、v2 比のエラー率を 10〜20% 削減しています。Groq の turbo は Distil-Whisper より WER が約1%低く、large-v3 と同等精度を維持しつつ高速化されています。精度差は実用上ほぼ無視できる範囲で、選定軸は速度と料金に絞られます。

Python で30分実装する最短手順

ミントグリーンの背景に置かれた円形ダイヤルの目盛りが黄色の光で3分割されている俯瞰構図
30分実装を環境・キー・コードの3区分ダイヤルで表現

ここから実装に入ります。30分の内訳は環境構築10分、API キー取得10分、コード実行10分が目安で、前提は Python 3.10 以降です。

環境構築と API キー取得

最初に SDK をインストールします。比較のため両方入れておくと便利です。


pip install openai groq python-dotenv

OpenAI のキーは platform.openai.com、Groq のキーは console.groq.com から発行できます。プロジェクト直下に .env を作成し、OPENAI_API_KEYGROQ_API_KEY を記述してください。.env は必ず .gitignore に追加します。誤コミットすると、第三者による無断利用と請求発生のリスクが残ります。

OpenAI SDK での実装サンプル

以下のコードで OpenAI の whisper-1 を呼び出せます。audio/sample.m4a には任意の音声ファイルを置きます。


import os
from dotenv import load_dotenv
from openai import OpenAI

load_dotenv()
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])

with open("audio/sample.m4a", "rb") as f:
    transcript = client.audio.transcriptions.create(
        model="whisper-1",
        file=f,
        language="ja",
        response_format="verbose_json",
        timestamp_granularities=["segment"],
    )

print(transcript.text)

language="ja" は ISO-639-1 の2文字コードで、日本語を明示すると認識精度と推論時間が安定します。response_formatverbose_json にすると、セグメント情報やタイムスタンプも取得できます。gpt-4o-transcribe を使う場合は model 引数の差し替えだけで動作します。対応フォーマットは mp3、mp4、mpeg、mpga、m4a、wav、webm の7種で、アップロード上限は 25MB です。

Groq の OpenAI 互換 SDK での実装サンプル

Groq は OpenAI SDK 互換のため、base_url を Groq のエンドポイントに切り替えれば同じ構文で動きます。以下は専用 SDK を使った例です。


import os
from dotenv import load_dotenv
from groq import Groq

load_dotenv()
client = Groq(api_key=os.environ["GROQ_API_KEY"])

with open("audio/sample.m4a", "rb") as f:
    transcript = client.audio.transcriptions.create(
        model="whisper-large-v3-turbo",
        file=f,
        language="ja",
        response_format="verbose_json",
        timestamp_granularities=["segment", "word"],
    )

print(transcript.text)

エンドポイントは https://api.groq.com/openai/v1/audio/transcriptions で、OpenAI SDK の base_url に指定する形でも使えます。対応フォーマットは flac、mp3、mp4、mpeg、mpga、m4a、ogg、wav、webm の9種です。timestamp_granularitiesword を含めると、単語単位のタイムスタンプを取得できます。これにより字幕生成や検索ハイライトの実装が容易になります。

実装を一段落させた読者は、関連チュートリアルの30分で動かす RAG 実装入門もあわせて参照すると、テキスト化後の検索基盤まで一気通貫で組めます。

長尺音声・タイムスタンプ・話者分離

深いシアンの空間に水平の目盛り定規状の構造物が斜めに伸び琥珀色のマーカーが等間隔に並ぶ構図
長尺音声を区切るタイムスタンプを目盛り定規で可視化

会議録音やインタビューでは、ファイルが 25MB を超えるケースが頻発します。応用パターンを3つに分けて解説します。

25MB / 100MB 上限と分割

OpenAI の上限は 25MB、Groq では Free tier が 25MB、Developer tier が 100MB です。超過する音声は事前に分割して逐次処理します。以下は pydub で 10分単位に切り出す例です。


from pydub import AudioSegment
from pathlib import Path

audio = AudioSegment.from_file("audio/long_meeting.m4a")
chunk_ms = 10 * 60 * 1000  # 10分
chunks_dir = Path("audio/chunks")
chunks_dir.mkdir(exist_ok=True)

for i, start in enumerate(range(0, len(audio), chunk_ms)):
    chunk = audio[start:start + chunk_ms]
    chunk.export(chunks_dir / f"part_{i:03d}.mp3", format="mp3", bitrate="64k")

分割後は part_000.mp3 から順に Whisper API へ投入し、返ってきたテキストを結合します。前チャンクの末尾文を prompt パラメータに渡すと、固有名詞の継続性が保たれます。

タイムスタンプ粒度と話者分離

タイムスタンプ粒度は segment(デフォルト)と word の2種類が選べます。字幕(SRT/VTT)生成には segment、検索インデックスや動画ハイライトには word が向きます。

話者分離(Diarization)は Whisper 単体では行えず、pyannote.audio など別モデルとの組み合わせが必要です。実装の流れは「pyannote で話者ターンを検出 → Whisper でテキスト化 → 時刻でマージ」の3段階となります。前提として Hugging Face のトークン取得とライセンス同意が必要です。30分実装の枠外として別途検証することを推奨します。

つまずきやすいポイントと対処法

実装中に遭遇しやすい3つの落とし穴を整理します。

日本語精度を上げる prompt

日本語の固有名詞や専門用語は、prompt パラメータに用語リストを渡すと正答率が上がる傾向があります。「ベクトル検索、RAG、Embedding」のように社内用語をカンマ区切りで渡すと、表記揺れの抑制に役立ちます。prompt は約 224 トークン分が反映される仕様のため、記事タイトルや主要登場人物名を簡潔にまとめる運用が現実的です。

最小課金10秒ルールとコスト最適化

Groq の公式ドキュメントでは、1リクエストあたりの最小課金単位が10秒、最短音声長が0.01秒と定義されています。短いボイスメモを大量処理すると課金単価が見かけより上振れます。基本方針は「短い音声はバッチ結合」「長尺は10〜20分単位でチャンク化」です。月100時間処理する場合、turbo なら $4.00、whisper-1 なら $36.00 の差となります。

典型エラー(413 / 415 / 429)

413 は上限超過で、事前に pydub で分割します。415 は対応外フォーマットで、Groq は9種、OpenAI は7種の範囲に揃える必要があります。429 はレート制限超過で、time.sleep(2 ** retry_count) 形式のエクスポネンシャルバックオフを実装してください。

FAQ

Q1. Whisper API の料金は1時間でいくらですか?

OpenAI の whisper-1 は $0.36/時、Groq の whisper-large-v3-turbo は $0.04/時 です。GPT-4o 系の gpt-4o-mini-transcribe は $0.18/時 で、価格優位は Groq turbo にあります。Groq には10秒の最小課金単位があり、短い音声を大量に投げる用途では設計次第で見かけ料金が変動します。

Q2. Groq と OpenAI のどちらを選ぶべきですか?

速度と料金重視なら Groq turbo、エコシステム統合重視なら OpenAI を推奨します。精度は WER で見る限り両者にほぼ差がないため、選定軸は実装要件で決められます。

Q3. 25MB を超える音声はどう処理しますか?

pydub で 10〜20分ごとのチャンクに分割してから API へ投入する方式が一般的です。前チャンクの末尾文を次の prompt に渡して文脈を引き継がせます。Groq の Developer tier なら 100MB まで一括アップロード可能で、分割の手間が減ります。

Q4. 日本語の精度を上げる方法はありますか?

language="ja" を明示し、prompt パラメータに固有名詞や専門用語を渡すと表記揺れが抑制される傾向があります。録音品質が悪い場合はノイズ除去を行い、64kbps 以上で mp3 化してから投入すると安定します。

Q5. 議事録自動化に必要な構成は何ですか?

最低構成は「録音 → 文字起こし(Whisper API) → 要約(LLM) → Slack/Notion 配信」の4段階です。話者ごとの発言を分ける場合は pyannote.audio を追加し、社内ナレッジ検索まで拡張するならテキスト化後に RAG 構成へ連結します。

まとめ

Whisper API は2026年現在、OpenAI と Groq の2系統が主流で、Groq の whisper-large-v3-turbo は $0.04/時、Speed Factor 228x という料金・速度の優位を持ちます。精度は Open ASR Leaderboard 平均 WER 7.44 と公開値で確認でき、両者の差は実用上ほぼ無視できます。実装はどちらも OpenAI 互換 SDK の数十行で済み、長尺音声は pydub 分割と prompt 引き継ぎで対応可能です。

次のアクションは、Groq の無料枠で5分の音声を試し、本記事のコードを動かすことです。応用としてClaude MCP サーバーを Python で10分実装を参照すると、文字起こし結果を AI エージェントへ連携する基盤まで構築できます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次