3行でいうと
- コマンドは
whisper 音声ファイル --model モデル名。日本語は--language Japanese、英語への翻訳は--task translate(READMEの例)。turboは翻訳向けに訓練されていないので、翻訳にはmediumやlargeを使う、とREADMEにあります。 - 出力形式は
--output_formatでtxt、vtt、srt、tsv、json、jsonl、all(既定)から選べます(公式のコード)。 - Pythonでは
whisper.load_model("turbo")とmodel.transcribe("audio.mp3")。結果の辞書にtext、segments、languageが入ります。 - OpenAI APIは
POST /v1/audio/transcriptionsにファイルを送ります。公式のガイドが recommended と書くモデルはgpt-transcribe。whisper-1と翻訳の入口は、2027年2月26日に停止予定と告知されています。 - 1ファイルは25MB以下(ガイドの記載)。長い録音は、区切りのよい所で分割します。
この記事は、公式の資料を2026年10月25日に読んでまとめたものです。この記事は、実際に使って確かめた記録ではありません。コマンドの写しは、公式のREADMEかガイドに載っているものだけを「公式の写し」とし、オプション名を並べてこの記事で組んだものは「この記事の例(動作は確かめていません)」と書き分けます。画面に出る文字や出力の形は、読んだ資料では確認できていない部分が多いので、手元の画面と照らして読んでください。
先に結論
- まず1本、READMEの形で動かす。
whisper audio.mp3 --model turbo。結果がファイルに書かれる所までを確かめてから、オプションを足す。 - 言語は、分かっているなら指定する。 公式のコードでは、指定しないと言語の検出が働きます。READMEの日本語の例は
--language Japaneseです。 - 「翻訳」は英語への翻訳だけ。
--task translateは英語への翻訳です(READMEの記述)。 - APIは、公式の資料で「移行の途中」。 新しい資料は
gpt-transcribeを案内し、whisper-1(字幕形式・単語の時刻・翻訳で使う)は停止が告知されています。使う前に、最新の公式資料を読んでください。 - 1時間でやる順番は、この記事の最後に案として載せています。
前提:用語をそろえる
- transcribe/translate:transcribeは、話された言語のまま文字にすること。translateは、英語に訳すこと(READMEの説明)。
- セグメント:音声を区切った1つの文のかたまり。開始と終了の時刻がつきます。
- SRT/VTT:字幕用のファイル形式。動画の字幕に使われます。
- JSON:プログラムで読みやすい、決まった形のデータの書き方。
- ISO-639-1の言語コード:
ja、enのような、2文字の言語の略号。APIのlanguageに使います(APIリファレンス)。 - プロンプト(prompt):APIの文字起こしで、固有名詞や専門用語の手がかりを渡す文章(APIの
promptパラメータ)。AIへの指示文ではなく、文字起こしの手がかりです。 - VAD:音声がある区間を見つける仕組み(APIの
chunking_strategyで出てきます)。
たとえ話:「録音テープを書記に渡すとき、言語と清書の形を伝える」
録音テープ(音声ファイル)を書記に渡すとき、「何語か」「そのまま書くか英語に訳すか」「清書の形(ただの文章か、字幕か、時刻つきの表か)」を伝えます。この記事の場面は、その伝え方の違いです。これはこの記事のたとえです。
場面1:録音1本を、コマンドで文字にする(READMEの基本)
- 05の手順で、ffmpegと
openai-whisperを入れておきます。 - ターミナルを開き、音声ファイルのあるフォルダに移ります(
cdの使い方は、READMEには書かれていません)。 - 次のコマンドを実行します(READMEの例の写し。READMEは3つのファイルを同時に渡す書き方です)。
whisper audio.flac audio.mp3 audio.wav --model turbo
- 1本だけなら、この記事の例として、次のようになります(ファイル名の部分を変えた例。動作は確かめていません)。
whisper audio.mp3 --model turbo
- 初回はモデルのダウンロードがあります(05)。
- 実行中は、既定で進行状況と文字が表示されます(
--verboseの既定は True)。表示の形は、読んだ資料には載っていません。 - 終わると、既定では、今いるフォルダに、複数の形式のファイルが書かれます(
--output_dirの既定は.、--output_formatの既定はall)。ファイル名の決まり方は、取得できなかったページにあり、確認できていません。出力先のフォルダを、ファイル一覧で見てください。 --modelを省略したときの既定はturboです(公式のコードの引数一覧)。- 全オプションは次で見られます(README)。
whisper --help
場面2:日本語の音声を、日本語で文字にする
READMEの例は次の1行です(公式の写し)。
whisper japanese.wav --language Japanese
--languageには、言語の名前(Japanese)を渡しています。公式のコードの引数の説明は、言語の名前かコードを指定できる趣旨で、指定しなければ(None)検出に任せます。jaというコードを使う書き方は、READMEには例がありません(公式のコードtokenizer.pyの言語の一覧には、日本語がjaとして入っています。01を参照)。- 日本語向けの専用の説明は、読んだ範囲では見つかりませんでした。モデルカードは、言語ごとの精度は学習データの量と関係し、低い資源の言語では、幻覚(話されていない文字が出る)や繰り返しが増える可能性があると書いています。日本語についての数字は、公式の資料に見つかりませんでした。
- 日本語は、README上は「多言語」のモデル名で使う形です。
.enのついた名前は英語向けです。 - 長い無音のあとに、話していない言葉が出る問題に関係しそうなオプションとして、コードの引数一覧に
--hallucination_silence_threshold(「幻覚が疑われる前の長い無音を飛ばす」趣旨。単語の時刻が必要)があります。効き目は、読んだ資料では確認できていません。
場面3:英語に翻訳する(--task translate)
READMEの例です(公式の写し)。
whisper japanese.wav --model medium --language Japanese --task translate
--taskはtranscribe(既定)かtranslateを選びます(公式のコードの引数一覧)。translateは英語への翻訳です。- READMEは、
turboは翻訳向けに訓練されていない、と書いています。turboで翻訳を頼むと、元の言語のまま返る、とも書かれています。翻訳をしたいときは、mediumやlargeのような多言語モデルを使う形です。 - 英語以外への翻訳は、READMEには書かれていません。
場面4:出力形式を選ぶ
--output_format(短縮 -f)と --output_dir(短縮 -o)で選びます(公式のコードの引数一覧)。
| 指定 | 内容 | 補足 |
|---|---|---|
txt |
文字だけ | 公式のコードの選択肢 |
vtt |
字幕(WebVTT) | 同上 |
srt |
字幕(SubRip) | 同上 |
tsv |
タブ区切りの表 | 列や時刻の単位は、取得できなかったコードにあり、確認できていません |
json |
JSON | 中身の項目は、コマンドの説明では確認できていません。Pythonの戻り値(場面6)は text、segments、language |
jsonl |
1行ごとのJSON | 選択肢にあります |
all |
全部 | 既定 |
この記事の例(動作は確かめていません)。字幕だけを out フォルダに出す形です。
whisper audio.mp3 --model turbo --output_format srt --output_dir out
字幕の見た目を調整するオプション
公式のコードの引数一覧には、字幕の調整に関する次のオプションがあります。どれも、--word_timestamps True(単語ごとの時刻)が必要、と説明されています。
| オプション | 内容(公式のコードの説明の要約) | 既定 |
|---|---|---|
--word_timestamps |
単語ごとの時刻を取る(実験的、と説明) | False |
--highlight_words |
SRT/VTTで、話している単語に下線 | False |
--max_line_width |
1行の最大文字数 | 指定なし |
--max_line_count |
1つの字幕の最大行数 | 指定なし |
--max_words_per_line |
1つの字幕の最大単語数。--max_line_width があると効かない |
指定なし |
日本語のように、単語の区切りが空白で示されない言語で、これらがどう働くかは、公式の資料では確認できていません。
場面5:モデルの大きさを選ぶ
- READMEの表(05に写しました)で、
tinyからlarge、turboまで、必要なVRAMの目安と相対速度が分かります。 - コマンドの
--modelに名前を渡します。例(この記事の例):
whisper audio.mp3 --model small --language Japanese
- 大きいモデルほど必要なVRAMが増える、とREADMEの表にあります。精度が上がるかどうかの比較は、READMEの表には載っていません。モデルカードは、評価をしてから使うよう勧めています。
- CPUで動かすときの注意は05の「GPUとCPU」を参照。
場面6:Pythonから使う(READMEの基本)
- Pythonのファイル(例:
transcribe_test.py)を作ります。ファイルの作り方は、READMEには書かれていません。 - 次を書きます(READMEの例の写し)。
import whisper
model = whisper.load_model("turbo")
result = model.transcribe("audio.mp3")
print(result["text"])
- ターミナルで、そのファイルを実行します(
python transcribe_test.py。この記事の補足で、Python一般の使い方です)。 - 画面に、文字起こしの全文が出ます。
- 戻り値
resultは辞書で、公式のコードではtext(全文)、segments(区切りごとの詳細)、language(使われた言語。指定がなければ検出した言語)が入ります。 - READMEは、
transcribe()が音声を30秒の窓で順に処理する、と書いています。 - 公式のコードの
transcribe()の引数には、次があります。verbose、temperature、compression_ratio_threshold、logprob_threshold、no_speech_threshold、condition_on_previous_text、initial_prompt、carry_initial_prompt、word_timestamps、clip_timestamps、hallucination_silence_threshold。このほかの引数は**decode_optionsとして、デコード(文字を決める処理)の設定に渡されます。 - 言語を指定する例は、この記事で組んだものです(動作は確かめていません。
languageは、コードの説明で「decode_optionsに入る」とある名前です)。
import whisper
model = whisper.load_model("turbo")
result = model.transcribe("japanese.wav", language="ja")
print(result["language"])
print(result["text"])
- 各区切りの中身(開始・終了の時刻など)の項目名は、今回の取得では確認できていません。実際に出して確かめてください。この記事の補足の例です。
for seg in result["segments"]:
print(seg)
低水準の呼び出し
READMEは、より細かい制御用として、whisper.load_audio、whisper.pad_or_trim、whisper.log_mel_spectrogram、model.detect_language、whisper.decode を使う例を載せています。コードの全文は、READMEの「Python usage」で確認してください(この記事では、組み直しません)。
場面7:言語の検出と、初期プロンプト
--languageを指定しなければ、言語を検出します(公式のコードの引数の説明)。--initial_prompt(Pythonではinitial_prompt)は、最初の窓に渡す文章です(公式のコードの引数の説明)。専門用語や固有名詞の表記を寄せたいときに使う形の機能とみられますが、効き目は、読んだ公式の資料では確認できていません(見立て)。--carry_initial_promptは、初期プロンプトを毎回の処理の前に付ける設定です(既定は False)。--condition_on_previous_text(既定は True)は、前の出力を、次の窓の手がかりにします。--clip_timestampsは、処理する範囲を「開始,終了」の組で渡します(既定は0)。一部だけ文字にしたいとき用の機能とみられます。--temperatureなどの細かいオプションの効き目は、公式のREADMEには説明がありません。モデルカードは、繰り返し(repetition)対策として、ビーム探索と温度の調整があるが完全には防げない、と書いています。
場面8:OpenAI APIで、ファイルを文字にする
05の「OpenAI APIで使う場合の準備」で、キーを環境変数 OPENAI_API_KEY に入れ、SDKを入れておきます。
8-1 curl(公式ガイドの例の写し)
curl --request POST \
--url https://api.openai.com/v1/audio/transcriptions \
--header "Authorization: Bearer $OPENAI_API_KEY" \
--header 'Content-Type: multipart/form-data' \
--form file=@/path/to/file/audio.mp3 \
--form model=gpt-transcribe
@/path/to/file/audio.mp3は、自分のファイルの場所に置き換えます。- 返ってくるのはJSONで、
text(結果)とlanguages(検出された言語)を含む、とガイドにあります。 - コマンドの区切りの書き方(行末の
\)は、macOSやLinuxのシェルの書き方です。WindowsのPowerShellでの書き方は、公式のページでは確認できていません。
8-2 Python(公式ガイドの例の写し)
from openai import OpenAI
client = OpenAI()
audio_file = open("audio.wav", "rb")
transcription = client.audio.transcriptions.create(
model="gpt-transcribe", file=audio_file
)
print(transcription.text)
8-3 JavaScript(公式ガイドの例の写し)
import fs from "fs";
import OpenAI from "openai";
const openai = new OpenAI();
const transcription = await openai.audio.transcriptions.create({
file: fs.createReadStream("fixtures/audio.wav"),
model: "gpt-transcribe",
});
console.log(transcription.text);
8-4 主なパラメータ(APIリファレンスとガイドから)
| パラメータ | 内容 | 注意 |
|---|---|---|
file |
音声ファイルそのもの | 対応形式:ガイドは mp3、mp4、mpeg、mpga、m4a、wav、webm。APIリファレンスは、これらに flac、ogg を加えて載せています(資料同士で違います)。リンクのURLは渡せず、アップロードです(ヘルプ) |
model |
モデル名 | リファレンスの一覧に whisper-1、gpt-transcribe、gpt-4o-transcribe、gpt-4o-mini-transcribe、gpt-4o-transcribe-diarize など |
language |
入力言語(ISO-639-1、例 ja) |
精度と遅延が良くなる、とリファレンスにあります。gpt-transcribe では、単数の language ではなく、複数形の languages を使い、両方は送らない、とガイドにあります |
languages |
想定する入力言語の配列 | gpt-transcribe のみ |
prompt |
文脈の手がかり | gpt-4o-transcribe-diarize では非対応。録音の言語に合わせる、とリファレンスにあります |
keywords |
出そうな語句の配列 | gpt-transcribe のみ。関係ない語を入れると、話されていない語が出ることがある、とガイドにあります |
response_format |
出力の形 | json、text、srt、verbose_json、vtt、diarized_json。モデルごとに違う(下の表) |
temperature |
0〜1 | 0だと、モデルが自動で温度を上げる、とリファレンスにあります |
timestamp_granularities |
時刻の細かさ(word か segment) |
response_format が verbose_json のとき。ガイドは「whisper-1 のみ対応」と書いています |
chunking_strategy |
長い音声の区切り方 | "auto"、またはVADの設定。未指定なら1つのかたまりで処理 |
stream |
ストリーム出力 | whisper-1 では無視される |
配列(languages、keywords)をcurlで送るときのキー名の書き方は、今回読んだ範囲に例が見つかりませんでした。SDKの例か、APIリファレンスの原文で確認してください。
8-5 モデルごとの出力形式(リファレンスの記載)
| モデル | 使える response_format |
|---|---|
gpt-transcribe |
リファレンスは、json、text、srt、verbose_json、vtt、diarized_json を全体の選択肢として載せ、「モデルごとに違う」と書いています。gpt-transcribe の対応の内訳は、読んだ範囲では見つかりませんでした |
gpt-4o-transcribe、gpt-4o-mini-transcribe |
json のみ |
gpt-4o-transcribe-diarize |
json、text、diarized_json(話者の注釈は diarized_json が必要) |
whisper-1 |
字幕(SRT/VTT)と単語の時刻に使う、とTranscriptionガイドにあります |
8-6 返ってくるもの
json:text、場合によりlanguages(検出された言語。空の配列なら、確かな言語が見つからなかった)、usage(トークン数または音声の秒数)。diarized_json:segments(start、end、speaker、textなど)、duration、task。話者名は、known_speaker_namesを渡せばその名前、なければ A、B…(リファレンス)。text、srt、vtt:その形式の文字列。
場面9:字幕形式や単語の時刻をAPIで取る(旧モデル whisper-1)
公式の資料では、字幕(SRT/VTT)と単語の時刻は whisper-1 の役割とされ、同時に whisper-1 の停止が告知されています(2026年8月26日告知、2027年2月26日停止予定。Deprecations)。既存の仕組みとの互換用、とガイドが書いています。
この記事の例(パラメータ名を並べたもの。動作は確かめていません):SRT形式で受け取る。
curl --request POST \
--url https://api.openai.com/v1/audio/transcriptions \
--header "Authorization: Bearer $OPENAI_API_KEY" \
--header 'Content-Type: multipart/form-data' \
--form file=@/path/to/file/audio.mp3 \
--form model=whisper-1 \
--form response_format=srt
単語の時刻は、response_format=verbose_json と、timestamp_granularities[](ガイドに載る名前)を組み合わせます。値には word か segment があります(リファレンス)。単語の時刻は遅延が増え、区切りの時刻は増えない、とリファレンスにあります。verbose_json の項目の詳細は、読んだ範囲では見つかりませんでした。
場面10:長い録音
- APIの場合:ファイルは25MB以下(ガイド)。ヘルプは、
whisper-1については「リクエストの最大が25 MiB」と書き、新しいモデルは、長さやトークンなどの別の制限がありうるとしています(数字はなし)。圧縮された形式にするか、25MB以下に分けます。文の途中で切ると、文脈が失われて精度が下がるため、区切りのよい位置で分ける、とガイドにあります。分割の例として、サードパーティのPyDubが紹介されています(OpenAIは動作や安全性を保証しない、と書かれています)。コードはガイドの原文で確認してください。 chunking_strategyに"auto"を渡すと、音量をそろえてから、VADで区切りを決めます(リファレンス)。gpt-4o-transcribe-diarizeは、30秒を超える入力で必須です。- コマンドの場合:READMEは、
transcribe()が30秒の窓で順に処理する、と書いています。ファイルサイズの上限は、READMEには書かれていません。
場面11:途中経過を受け取る(ストリーム)
gpt-transcribeでstream=trueを指定すると、処理中に部分の文字を受け取れます(ガイド)。curlでは--form stream=trueを足す、とあります。- 途中経過は
transcript.text.deltaのイベント、最後に全文と検出言語がtranscript.text.doneで届きます。 - 話者分離では、区切りが確定したときの
transcript.text.segmentも届きます。 - マイクや通話の、話している間の文字起こしは、ファイルのストリームではなく、別の入口(Realtime transcription)です。07を参照してください。
場面12:英語への翻訳をAPIで(/v1/audio/translations)
/v1/audio/translationsはwhisper-1で録音を英語にします。出力は英語のみ(ガイド)。- この入口は、2027年2月26日に停止予定です。後継は、Realtime translation(
/v1/realtime/translations)で、モデルのIDを変えるだけでは移れない、とガイドにあります(Deprecationsも同じ趣旨)。 - APIリファレンスの翻訳のページには、
modelの一覧に複数の名前が載る一方、説明に「whisper-1のみ利用可」という趣旨の文があります。ページ内で食い違うため、使う前に原文で確認してください。 - パラメータは、
file、model、prompt(英語で)、response_format(json、text、srt、verbose_json、vtt)、temperatureです。 - Realtime translationの手順は、この記事では読んでいません。
最初の1時間でやる順番(この記事の案)
公式の手順ではなく、この記事の案です(見立て)。
| 目安 | やること | 見る場所 |
|---|---|---|
| 0〜15分 | ffmpegと openai-whisper を入れる。ffmpeg -version、whisper --help を確かめる |
05 |
| 15〜25分 | 短い(1分ほど)自分の音声1本を --model turbo で文字にする。出力先のファイル名を見る |
場面1 |
| 25〜35分 | --language Japanese を付けて、付けない場合と結果を比べる |
場面2 |
| 35〜45分 | --output_format srt などで形式を変え、ファイルの中身を見る |
場面4 |
| 45〜55分 | Pythonの数行で、result["text"] と result["segments"] の中身を出す |
場面6 |
| 55〜60分 | APIを使うなら、キーを環境変数に入れ、curlの例(gpt-transcribe)を1回。使わないなら07を読む |
場面8 |
つまずき表
| 症状 | 考えられる原因(公式の記述から) | 確かめること |
|---|---|---|
| 翻訳のはずが、元の言語のまま出る | turbo は翻訳向けに訓練されていない(README) |
--model medium か large にする |
| 話していない文が出る/同じ文が繰り返される | モデルカードが、幻覚と繰り返しを挙げている | 音声の無音部分、モデルの大きさ、--condition_on_previous_text False などの設定を、自分の音声で比べる。効き目は公式では確認できていません |
| 日本語なのに、別の言語として処理される | 言語を指定していないと、検出に任せる(コード) | --language Japanese(README)を付ける |
| 出力ファイルが見つからない | --output_dir の既定は今いるフォルダ |
--output_dir を指定し、そのフォルダを見る |
| APIで「ファイルが大きすぎる」ような失敗 | 25MBの上限(ガイド) | 圧縮形式にする、または区切りのよい所で分ける |
| 拡張子の形式を受け付けない | ガイドとリファレンスで対応形式の一覧が違う | リファレンスの形式(flac、ogg を含む)か、ガイドの形式(mp3 など)に変換する。ffmpegで変換する方法は、公式のAPI資料には書かれていません |
gpt-transcribe で language を送ったら失敗した |
単数の language の代わりに、languages を使い、両方は送らない(ガイド) |
languages に切り替える |
字幕形式や単語の時刻が gpt-transcribe で取れない |
字幕・単語の時刻は whisper-1(ガイド) |
whisper-1(停止予定)を使うか、アプリ側で対応する。移行の注意は、Transcriptionガイドにあります |
| APIキーが無い、認証の失敗 | OPENAI_API_KEY が設定されていない(クイックスタート) |
05の手順で設定し、ターミナルを開き直す(setx の反映の仕方は、公式では確認できていません) |
気をつけること
- この記事は、実際に使って確かめた記録ではありません。公式のページを要約の形で読んだ範囲です。出力の見え方(画面の文字、ファイルの中身)は、ほとんど確認できていません。
- 公式のコード
whisper/utils.py(出力ファイルの名前、TSVの列)は、取得に失敗したため読めていません。 - 公式の資料同士で食い違う所:APIの対応形式(ガイドとリファレンス)、
whisper-1の停止(ガイドとDeprecationsには停止の記載、whisper-1のモデルのページには見つからなかった。01参照)、翻訳のリファレンスのmodelの説明。 - APIの停止予定:
whisper-1、gpt-4o-transcribe、gpt-4o-mini-transcribe、gpt-4o-transcribe-diarize、/v1/audio/translationsは、2027年2月26日。新しい仕組みに移るときは、使っている出力形式や付加情報(時刻、話者)が残るか、確かめる必要がある、とTranscriptionガイドにあります。 - モデルカードは、本人の同意なく録られた個人の録音の文字起こしに使うことを避けるよう警告し、重要な判断への利用にも注意しています。APIに送った音声の扱い(保存、学習)は、01と04を参照してください。
- 音声ファイルをAPIに送ると、OpenAIのサーバーに音声が渡ります(07の表を参照)。コマンドやPythonライブラリで自分のPCで処理する形については、READMEに送信の記述は見つかりませんでした(送らない、と保証する文ではありません)。
- 料金・無料枠・レート制限の数字は、この記事には載せていません(01、04を参照)。
- 取得したページの中に、AIへの指示のような文は見つかりませんでした。
出典
- openai/whisper README(OpenAI、GitHub、確認日 2026-10-25)
- openai/whisper README(blob表示、OpenAI、GitHub、確認日 2026-10-25)
- whisper/transcribe.py(OpenAI、GitHub、確認日 2026-10-25)
- whisper/init.py(OpenAI、GitHub、確認日 2026-10-25)
- Whisper Model Card(OpenAI、GitHub、確認日 2026-10-25)
- whisper/tokenizer.py(OpenAI、GitHub、確認日 2026-10-25。言語コード
jaの確認のみ) - File transcription(OpenAI、確認日 2026-10-25)
- Transcription(OpenAI、確認日 2026-10-25)
- Create transcription(API reference、OpenAI、確認日 2026-10-25)
- Create translation(API reference、OpenAI、確認日 2026-10-25)
- Audio API FAQ(OpenAI Help Center、確認日 2026-10-25)
- Developer quickstart(OpenAI、確認日 2026-10-25)
- Deprecations(OpenAI、確認日 2026-10-25)