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:録音1本を、コマンドで文字にする(READMEの基本)

  1. 05の手順で、ffmpegと openai-whisper を入れておきます。
  2. ターミナルを開き、音声ファイルのあるフォルダに移ります(cd の使い方は、READMEには書かれていません)。
  3. 次のコマンドを実行します(READMEの例の写し。READMEは3つのファイルを同時に渡す書き方です)。
whisper audio.flac audio.mp3 audio.wav --model turbo
  1. 1本だけなら、この記事の例として、次のようになります(ファイル名の部分を変えた例。動作は確かめていません)。
whisper audio.mp3 --model turbo
  1. 初回はモデルのダウンロードがあります(05)。
  2. 実行中は、既定で進行状況と文字が表示されます(--verbose の既定は True)。表示の形は、読んだ資料には載っていません。
  3. 終わると、既定では、今いるフォルダに、複数の形式のファイルが書かれます(--output_dir の既定は .、--output_format の既定は all)。ファイル名の決まり方は、取得できなかったページにあり、確認できていません。出力先のフォルダを、ファイル一覧で見てください。
  4. --model を省略したときの既定は turbo です(公式のコードの引数一覧)。
  5. 全オプションは次で見られます(README)。
whisper --help

場面2:日本語の音声を、日本語で文字にする

READMEの例は次の1行です(公式の写し)。

whisper japanese.wav --language Japanese

場面3:英語に翻訳する(--task translate)

READMEの例です(公式の写し)。

whisper japanese.wav --model medium --language Japanese --task translate

場面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:モデルの大きさを選ぶ

whisper audio.mp3 --model small --language Japanese

場面6:Pythonから使う(READMEの基本)

  1. Pythonのファイル(例:transcribe_test.py)を作ります。ファイルの作り方は、READMEには書かれていません。
  2. 次を書きます(READMEの例の写し)。
import whisper

model = whisper.load_model("turbo")
result = model.transcribe("audio.mp3")
print(result["text"])
  1. ターミナルで、そのファイルを実行します(python transcribe_test.py。この記事の補足で、Python一般の使い方です)。
  2. 画面に、文字起こしの全文が出ます。
  3. 戻り値 result は辞書で、公式のコードでは text(全文)、segments(区切りごとの詳細)、language(使われた言語。指定がなければ検出した言語)が入ります。
  4. READMEは、transcribe() が音声を30秒の窓で順に処理する、と書いています。
  5. 公式のコードの 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 として、デコード(文字を決める処理)の設定に渡されます。
  6. 言語を指定する例は、この記事で組んだものです(動作は確かめていません。language は、コードの説明で「decode_options に入る」とある名前です)。
import whisper

model = whisper.load_model("turbo")
result = model.transcribe("japanese.wav", language="ja")
print(result["language"])
print(result["text"])
  1. 各区切りの中身(開始・終了の時刻など)の項目名は、今回の取得では確認できていません。実際に出して確かめてください。この記事の補足の例です。
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:言語の検出と、初期プロンプト

場面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

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 返ってくるもの

場面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:長い録音

場面11:途中経過を受け取る(ストリーム)

場面12:英語への翻訳をAPIで(/v1/audio/translations)

最初の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 の反映の仕方は、公式では確認できていません)

気をつけること

出典