1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

定番のWhisperと新登場のZoom Scribe APIで日本語・英語の文字起こしを比べてみた

1
Last updated at Posted at 2026-07-10

はじめに

「無料で文字起こしをしたい」と思ったとき、これまでの定番といえば OpenAI の Whisper でした。オープンソースで誰でも使えて精度も高い、頼れる存在です。
実際に私も過去に、Whisperを使って英語の会議補助アプリを作ったりしました。

そんな中いつものようにQiitaを徘徊していると、面白いイベントを発見しました。2026年3月に登場した Zoom AI Services に関するものです。Zoomの会議で実際に使われている文字起こしエンジンが、Scribe API としてREST APIで使えるようになりました。無料トライアルで $20分のクレジット が付与されるので、気軽に試せます。

そこでこの記事では、WhisperとZoom Scribe APIそれぞれで簡単なPythonスクリプトを作成してみます。その後、同じ音声(日本語・英語 各1本)を両方で文字起こしして、次の4点を比べてみます。

  • 導入の手軽さ: 動かすまでに何ステップ必要か
  • 速さ: 文字起こしが終わるまでの時間
  • 精度: 日本語・英語をどれだけ正しく聞き取れるか
  • PCへの負荷: 実行中のメモリ使用量をタスクマネージャーで監視

登場選手の紹介

Whisper(ローカル実行)

OpenAIが公開しているオープンソースの音声認識モデルです。最大の特徴は、AIモデルそのものを自分のPCにダウンロードして動かすこと。インターネットに音声を送らないので完全オフラインで動きますが、その分、PCのメモリ(RAM)とCPUをがっつり使います

Zoom Scribe API(クラウド実行)

Zoom AI Services の文字起こしAPIです。音声ファイルをAPIに送ると、Zoomのサーバー側で処理して結果だけが返ってきます。自分のPCではAIモデルを動かさないので負荷はほぼゼロ。Zoomミーティングで毎日大量の音声を処理しているエンジンと同じものが使われています。もちろん日本語(ja-JP)にも対応しています。

仕組みの違いを図にすると

スペック比較

Whisper Zoom Scribe API
実行場所 自分のPC(ローカル) Zoomのサーバー(クラウド)
料金 無料 Fast: \$0.20/時間、Batch: $0.15/時間
(1時間の音声で約32円※)
無料枠 無料トライアルで $20分(Fast換算で約100時間分!)
オフライン動作 ×(インターネット必須)
必要なPCスペック RAM数GB以上を推奨 低スペックでもOK
日本語対応 ○(ja-JP)

※ 1ドル=160円で計算

検証環境と準備

環境

項目 内容
OS Windows 11 Pro
CPU AMD Ryzen 7 5825U
RAM 16GB
Python 3.14.3

Zoom Scribe APIキーの取得

  1. Zoom開発者向け料金ページ から Zoom Build Platform の無料トライアルを選んでアカウントを作成する(※既存のZoomアカウントとは別に、新規/独立アカウントが必要です。トライアルで $20分のクレジットが付与されます)
  2. Zoom App Marketplace に作成したアカウントでログインし、左下の Developer をクリック
  3. 右上の Develop から Build SDK App を選択し API KeyAPI Secret を取得する

取得したキーは、スクリプトと同じフォルダに .env というファイルを作って書いておきます。

.env
ZOOM_API_KEY=ここにAPIキーを貼る
ZOOM_API_SECRET=ここにAPIシークレットを貼る

サンプルコード

セットアップ

Pythonの仮想環境(venv)を作って、必要なライブラリをまとめて入れます。

python -m venv venv
.\venv\Scripts\activate
pip install openai-whisper requests PyJWT python-dotenv

Whisperは内部で ffmpeg という音声変換ツールを使うので、入っていない場合はインストールしておきます。

winget install ffmpeg

Whisper

whisper_transcribe.py
import sys
import time
import whisper

# 使うモデル名(変更したい場合はここを書き換える)
MODEL_NAME = "small"

# コマンドライン引数から音声ファイルのパスを受け取る
audio_path = sys.argv[1]

# 第2引数があれば言語コード、なければNone(自動判定)
language = sys.argv[2] if len(sys.argv) > 2 else None

# モデルを読み込み、かかった秒数を計測する
start = time.time()
model = whisper.load_model(MODEL_NAME)
load_time = time.time() - start
print("モデル読み込み:", round(load_time, 1), "")

# 音声を文字起こしし、かかった秒数を計測する(languageがNoneなら自動判定)
start = time.time()
result = model.transcribe(audio_path, language=language)
transcribe_time = time.time() - start
print("文字起こし:", round(transcribe_time, 1), "")

# 検出した言語と文字起こし結果を表示する
print("検出言語:", result["language"])
print("--- 結果 ---")
print(result["text"])

# 2つの処理時間を合計して表示する
print("合計:", round(load_time + transcribe_time, 1), "")

ポイントは2つだけです。

  • whisper.load_model("small") : AIモデルをPCに読み込む(初回は約460MBのダウンロードも走ります)
  • model.transcribe(...) : 文字起こしの実行。言語は自動判定してくれます(第2引数で明示指定も可能)

Zoom Scribe API

zoom_transcribe.py
import sys
import os
import time
import base64
import jwt
import requests
from dotenv import load_dotenv

# コマンドライン引数から音声ファイルパスと言語コードを取得する
audio_path = sys.argv[1]
language = sys.argv[2] if len(sys.argv) > 2 else "ja-JP"

# .envからZoomのAPIキーとシークレットを読み込む
load_dotenv()
api_key = os.environ["ZOOM_API_KEY"]
api_secret = os.environ["ZOOM_API_SECRET"]

# 認証用のJWTを生成する(HS256、2時間有効)
now = int(time.time())
payload = {"iss": api_key, "iat": now - 30, "exp": now + 7200}
token = jwt.encode(payload, api_secret, algorithm="HS256")

# 音声ファイルを読み込み、data URI形式のbase64文字列に変換する
ext = audio_path.split(".")[-1]
with open(audio_path, "rb") as f:
    audio_base64 = "data:audio/" + ext + ";base64," + base64.b64encode(f.read()).decode()

# Scribe APIにPOSTし、応答までの秒数を計測する
url = "https://api.zoom.us/v2/aiservices/scribe/transcribe"
headers = {"Authorization": "Bearer " + token, "Content-Type": "application/json"}
body = {"file": audio_base64, "config": {"language": language, "timestamps": True}}
start = time.time()
response = requests.post(url, headers=headers, json=body)
elapsed = time.time() - start

# 文字起こし結果と所要時間を表示する
print("文字起こし(API応答):", round(elapsed, 1), "")
print("--- 結果 ---")
print(response.json()["result"]["text_display"])

処理の流れは3ステップです。

  • .env のキーから JWT を作る
  • 音声ファイルを base64 にしてJSONに詰める
  • https://api.zoom.us/v2/aiservices/scribe/transcribe にPOSTすると、レスポンスに文字起こし結果が入って返ってくる

実行コマンド

どちらのスクリプトも「第1引数に音声ファイル、第2引数に言語コード(省略可)」の同じ形で動きます。

# Whisper(言語を省略すると自動判定)
python whisper_transcribe.py 日本語.m4a
python whisper_transcribe.py 英語.m4a en

# Zoom Scribe API(言語を省略すると日本語)
python zoom_transcribe.py 日本語.m4a
python zoom_transcribe.py 英語.m4a en-US

実験

音声サンプル

同じ条件で比べるため、自分で原稿を朗読して録音しました。
原稿には、文字起こしエンジンが苦手としやすい要素をわざと詰め込んでいます。

苦手要素 原稿に入れた例
同音異義語 貴社の記者が汽車で帰社 / 橋の端で箸を持つ
数字・日付・単位 7月13日 13時30分 / 8.5パーセント / 1,250万円
カタカナ語・英語混じり REST API / JSON / ダッシュボード
早口言葉 生麦生米生卵 / 東京特許許可局

早口言葉は得意ではないのでつっかかりました。ですが、会議などのシチュエーションを考えると、言い直すこともあると思うのでそのまま進めます。

日本語の原稿(約1分・290文字):

本日は、音声認識の実験を行います。まず同音異義語のテストです。貴社の記者が汽車で帰社しました。庭には二羽、鶏がいます。橋の端で箸を持って立ち止まりました。
次に数字と日付です。会議は7月13日金曜日、13時30分から約45分間、参加者は128名の予定です。予算は前年比8.5パーセント増の1,250万円です。
続いてカタカナ語と専門用語です。クラウド上のREST APIをPythonから呼び出し、レスポンスのJSONをパースして、ダッシュボードにリアルタイムで表示します。
最後に少し早口言葉を。生麦生米生卵、東京特許許可局、隣の客はよく柿食う客だ。以上で日本語のテストを終わります。

拙いですが、英語の文もしゃべってみました。

英語の原稿(約1分・約120単語):

Today I'm testing two speech recognition services: OpenAI's Whisper and the Zoom Scribe API. First, some numbers and dates. The meeting is scheduled for Friday, July thirteenth, at one thirty p.m., and about a hundred and twenty-eight people are expected to join. The budget increased by eight point five percent to twelve thousand five hundred dollars.
Next, technical terms. I'll call a REST API from Python, parse the JSON response, and display the results on a dashboard in real time. Words like asynchronous, authentication, and initialization are often difficult for transcription engines.
Finally, a few commonly confused phrases: they're going there with their friends. I want to buy two tickets, too. That's all for the English test. Thank you for listening.

Whisper結果

実行結果(日本語):

モデル読み込み: 2.7 秒
文字起こし: 30.2 秒
検出言語: ja
合計: 33.0 秒

文字起こし結果:

本日は本性認識の実験を行います。まず、同音意義語のテストです。記者の記者が記者で記者しました。庭には庭鳥がいます。橋の橋で橋を持って立ち止まりました。
次に数字と日付です。会議は7月13日金曜日13時30分から約45分間、参加者は128名の予定です。予算は前年費8.5%増の1250万円です。
続いて、片金子と専用用語です。フラード上のレストAPIをパイソンから呼び出し、レスポンスのJSONをパースして、ラッシュボードにリアルタイムで表示します。
最後に少し早口言葉を、生麦生ゴメ生タウン語、東京特極、虚角局長、隣のかきはよくかき空客だ。以上で日本語のテストを終わります。

数字と日付(7月13日、13時30分、128名、8.5%)はしっかり正確です。一方で「音声認識→本性認識」「カタカナ語→片金子」「クラウド→フラード」「REST API→レストAPI」など、同音異義語やカタカナ語ではかなり苦戦しました。smallモデル(CPU実行)の限界で、より大きいモデルにすれば精度は上がりますが、その分メモリと時間はさらに必要になります。

実行結果(英語・en を指定):

モデル読み込み: 1.9 秒
文字起こし: 15.4 秒
検出言語: en
合計: 17.3 秒

文字起こし結果:

Today, I'm testing two Speech's recognition service, OpenAI's Whisper and Zoom's Club API. First, some numbers and dates. The meeting is scheduled for Friday, July 13th. At 1.30pm and about 128 people are expected to join. The budget increased by 8.5% to $12,500.
Next, technical terms. I'll call our list API from Python, first a JSON response and display the result on our dashboard in real time. World-like asynchronous authentication and initialization are often difficult for transcription engines.
Finally, a few commonly confused phrases. They are going to there with their friends. I want to buy two tickets too. That's all for the English test. Thank you for listening.

英語は日本語より得意で、数字は完璧です。ただ「Scribe API→Club API」「a REST API→our list API」「Words like→World-like」のような聞き間違いがちらほら残りました。(私の発音が原因だと思いますが…)

最初、英語音声を言語自動判定に任せたら「ja」と誤判定され、出力が日本語まじりの不思議な文章になってしまいました。言語がわかっている場合は python whisper_transcribe.py 英語.m4a en のように明示指定するのが安全です。

モデルを読み込んだ瞬間にメモリ使用量が跳ね上がり、ピークで約1.6GBに達しました。smallモデルでこれなので、より高精度なmediumlargeを使うとさらに増えます(largeは10GB近く必要と言われています)。文字起こし中はCPUもほぼ張り付きになり、ファンが元気に回り始めました。

Zoom Scribe API結果

実行結果(日本語):

文字起こし(API応答): 3.5 秒

文字起こし結果:

本日は音声認識の実験を行います。 まず、同音異義語のテストです。 汽車の汽車が汽車で帰車しました。庭には2羽、鶏がいます。 橋の端で箸を持って立ち止まりました。
次にとです。 会議は7月13日金曜日13時30分から約45分間、参加者は128名の予定です。予算は前年比8.5%増の1,250万円です。
続いてカタカナ語と専用用語です。クラウド上のREST APIをPythonから呼び出し、レスポンスのJSONをパースしてダッシュボードにリアルタイムで表示します。
最後に少し早口言葉を。生麦、生米、生卵、東京特許許可局局長、隣の柿はよく柿食う客だ。以上で日本語のテストを終わります。

56秒の音声がわずか3.5秒で返ってきました。数字(7月13日、13時30分、128名、8.5%、1,250万円)とカタカナ語まじりの専門用語(クラウド、REST API、Python、JSON、ダッシュボード)はほぼ完璧です。「貴社の記者が汽車で帰社」のような同音異義語の一部は間違えました。

実行結果(英語):

文字起こし(API応答): 3.0 秒

文字起こし結果:

Today, I'm testing two speech recognition services: OpenAI's Whisper and Zoom Scrub API. First, some numbers and dates. The meeting is scheduled for Friday, July 13th, at 1:30 PM, and about 128 people are expected to join. The budget increased by 8.5% to $12,500.
Next, technical terms. I'll call a REST API from Python, parse the JSON response, and display the result on a dashboard in real-time. Words like asynchronous, authentication, and initialization are often difficult for transcription engines.
Finally, a few commonly confused phrases: "They're going to there with their friends." "I want to buy two tickets, too." That's all for the English test. Thank you for listening!

英語はさらに強く、読み上げた数字を「July 13th」「1:30 PM」「8.5%」「$12,500」と自然な表記に整えてくれます。they're / their の使い分けも正確で、誤りは固有名詞の「Scribe」を「Scrub」と聞き取った程度でした。

処理はZoomのサーバー側で行われるので、手元のPCは音声を送って結果を待っているだけ。ピークのメモリ使用量は約43MBで、Whisperの約1/38。

比較結果まとめ

実測した結果を表にまとめます。

比較項目 Whisper (small) Zoom Scribe API (Fast)
導入の手間 pip + ffmpeg(2ステップ) アカウント作成 + キー取得(初回のみ)
処理時間(日本語 56秒) 33.0秒(読込2.7 + 文字起こし30.2) 3.5秒
処理時間(英語 59秒) 17.3秒(読込1.9 + 文字起こし15.4) 3.0秒
精度(日本語) 数字は正確。同音異義語・カタカナ語で誤り多め 数字・専門用語ほぼ完璧。難問の同音異義語のみ誤り
精度(英語) おおむね正確だが単語の聞き違いが点在。言語自動判定の誤爆も ほぼ完璧(Scribe→Scrubの1箇所程度)
メモリ使用量 約1.6GB 約43MB
コスト 無料 無料クレジット内(今回の検証は1円未満)

今回の環境(GPUなしのノートPC)では、速度で約10倍、メモリで約1/38という大差でZoom Scribe APIが上回りました。精度も日英ともZoomのほうが読みやすい結果です。なおWhisperはsmallモデルでの結果なので、大きいモデルやGPUを使えば精度は改善しますが、その分さらに重くなります。「軽さと速さと精度を同時に、しかも低スペックPCで」というのがクラウドAPIの強みだと実感しました。

まとめ

実際に両方を動かしてみて感じた使い分けはこうです。

  • Zoom Scribe API が向いているケース
    • PCのスペックに余裕がない(ノートPCでもサクサク)
    • 環境構築に時間をかけたくない、すぐ結果がほしい
    • 将来的に翻訳(Translator API)や要約(Summarizer API)まで組み合わせたい
  • Whisper が向いているケース
    • 完全オフラインで処理したい(音声を外部に送れない事情がある)

これまで「無料で文字起こし=Whisper一択」でしたが、$20の無料クレジット(Fast換算で約100時間分)があるZoom Scribe APIの登場で状況は変わったと感じます。これから文字起こしを始める方には、重いモデル管理が不要でコードも短いZoom Scribe APIがいい候補になりそうです。

参考リンク

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?