For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
メインナビゲーション

ファイルの文字起こし

録音した音声をテキストに変換します。

録音が完了している場合や、処理する音声の範囲が決まっている場合は、ファイルの文字起こしを使用します。音声をアップロードすると、最終的な文字起こし結果を受け取れます。また、モデルがファイルを処理している間に、テキストをストリーミングで受け取ることもできます。

まずは gpt-transcribe を使用してください。録音した音声を元の言語で文字起こしする際の推奨モデルです。話者ラベル、単語単位のタイムスタンプ、字幕形式、英語への翻訳が必要な場合にのみ、専用モデルを使用してください。

ファイルサイズの上限は 25 MB です。対応する入力形式は mp3mp4mpegmpgam4awavwebm です。

マイク、通話、メディアストリームから継続して届く音声には、 リアルタイム文字起こしを使用してください。

クイックスタート

文字起こし

gpt-transcribe を指定して、音声ファイルを /v1/audio/transcriptions に送信します。

音声の文字起こし
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)

モデルは文字起こし結果と検出した言語を JSON で返します。

{
  "text": "Bonjour, pouvez-vous m'entendre ?",
  "languages": [{ "code": "fr" }]
}

モデルが十分な信頼度で言語を推定できない場合は、"languages": [] を返します。リクエストとレスポンスの全フィールドについては、音声 API リファレンスを参照してください。

文字起こしへのコンテキストの追加

gpt-transcribepromptkeywordslanguages を使用すると、専門用語や複数の言語を含む音声の文字起こし精度を向上できます。

コンテキストと言語のヒントの追加
from openai import OpenAI

client = OpenAI()

with open("meeting.wav", "rb") as audio_file:
    transcription = client.audio.transcriptions.create(
        model="gpt-transcribe",
        file=audio_file,
        prompt="A customer support call about a premium plan and account AC-42.",
        extra_body={
            "keywords": ["premium plan", "AC-42", "billing"],
            "languages": ["en", "fr"],
        },
    )

print(transcription.text)
  • 録音に関するコンテキストを自由形式で指定するには、prompt を使用します。
  • 音声に含まれると予想される用語をそのまま指定するには、keywords を使用します。
  • 想定される入力言語を指定するには、languages を使用します。

キーワードはヒントであり、出力を必須にするものではありません。関連する用語だけを含め、発話されていない用語を出力させずに精度が向上するかを評価してください。

gpt-transcribe では、単数形の language フィールドに代わって languages を使用します。両方のフィールドを送信しないでください。各キーワードは 1 行に収め、<>、キャリッジリターン、ラインフィードを含めないでください。これらの文字が含まれている場合や、prompt がモデルの長さ制限を超えている場合、API はリクエスト全体を拒否します。

話者ダイアライゼーション

録音の各部分で誰が話しているかを識別する必要がある場合にのみ、gpt-4o-transcribe-diarize を使用してください。このモデルは話者ラベルの付与に特化しており、通常のファイルの文字起こしには推奨されません。

レスポンス形式に diarized_json を指定すると、speakerstartend のメタデータを含むセグメントを受け取れます。30 秒を超える音声では、chunking_strategy"auto" または音声区間検出の構成に設定してください。

必要に応じて、known_speaker_names[]known_speaker_references[] で最大 4 つの短い参照音声を指定し、セグメントを既知の話者に対応付けることができます。参照クリップは 2~10 秒の長さにし、メインの音声アップロードで対応している入力形式を使用してください。マルチパートフォームデータを使用する場合は、データ URL としてエンコードしてください。

会議の録音の話者ダイアライゼーション
import base64
from openai import OpenAI

client = OpenAI()


def to_data_url(path: str) -> str:
    with open(path, "rb") as fh:
        return "data:audio/wav;base64," + base64.b64encode(fh.read()).decode("utf-8")


with open("meeting.wav", "rb") as audio_file:
    transcript = client.audio.transcriptions.create(
        model="gpt-4o-transcribe-diarize",
        file=audio_file,
        response_format="diarized_json",
        chunking_strategy="auto",
        extra_body={
            "known_speaker_names": ["agent"],
            "known_speaker_references": [to_data_url("agent.wav")],
        },
    )

for segment in transcript.segments:
    print(segment.speaker, segment.text, segment.start, segment.end)

stream=true の場合、話者ラベル付きのレスポンスでは、セグメントが完了するたびに transcript.text.segment イベントが送信されます。transcript.text.delta イベントには segment_id フィールドが含まれますが、差分には部分的な話者の割り当て情報は含まれません。モデルが話者を割り当てるのは、セグメントを確定するときだけです。

話者ラベルの付与は /v1/audio/transcriptions で利用できます。 リアルタイム文字起こしセッションでは対応していません。

翻訳

録音済みの音声を英語に翻訳するには、/v1/audio/translationswhisper-1 を使用します。録音の元の言語を維持する文字起こしとは異なり、このエンドポイントは英語のテキストを返します。

音声の翻訳
from openai import OpenAI

client = OpenAI()
audio_file = open("german.wav", "rb")

translation = client.audio.translations.create(
    model="whisper-1",
    file=audio_file,
)

print(translation.text)

英語以外の言語で録音された音声の場合、レスポンスには英語への翻訳が含まれます。

Hello, my name is Wolfgang and I come from Germany. Where are you heading today?

このエンドポイントは英語への翻訳にのみ対応しています。

対応言語

入力される言語があらかじめわかっている場合は、gpt-transcribelanguages を使用してください。対応する言語コードの形式には、次のものがあります。

  • enesfr などの ISO 639-1 コード
  • engspayuecmn など、一部の ISO 639-3 コード
  • zh-cnzh-twzh-hk など、地域を指定した zh のロケールコード

API は、未対応の言語コードや形式が正しくない言語コードを拒否します。レスポンスには、モデルが十分な信頼度で検出できた言語も含まれます。

whisper-1 については、Whisper の言語一覧を参照してください。Whisper は 98 言語に対応していますが、精度は言語によって異なります。言語のヒントを 1 つ受け付ける既存のモデルでは、languages の代わりに language を使用します。

タイムスタンプ

単語単位またはセグメント単位のタイムスタンプが必要な場合は、whisper-1 を使用してください。timestamp_granularities[] パラメーターを使用すると、字幕作成や動画編集に利用できる構造化されたタイムスタンプデータが返されます。

タイムスタンプのオプション
from openai import OpenAI

client = OpenAI()
audio_file = open("speech.wav", "rb")

transcription = client.audio.transcriptions.create(
    file=audio_file,
    model="whisper-1",
    response_format="verbose_json",
    timestamp_granularities=["word"],
)

print(transcription.words)

timestamp_granularities[] パラメーターに対応しているのは whisper-1 のみです。

長い音声の入力

Transcriptions API は最大 25 MB のファイルを受け付けます。それより大きい録音ファイルには、圧縮音声形式を使用するか、ファイルを 25 MB 以下のチャンクに分割してください。文の途中で分割すると、コンテキストが失われて精度が低下する可能性があるため、避けてください。

対処方法の 1 つとして、オープンソースの Python パッケージ PyDub で音声を分割できます。

from pydub import AudioSegment

song = AudioSegment.from_wav("good_morning.wav")

# PyDub handles time in milliseconds
ten_minutes = 10 * 60 * 1000

first_10_minutes = song[:ten_minutes]

first_10_minutes.export("good_morning_10.wav", format="wav")

OpenAI は、PyDub などのサードパーティ製ソフトウェアの使いやすさやセキュリティについて、一切保証しません。

プロンプト

プロンプトを使用すると、固有名詞、略語、書式、録音に固有の語彙の認識を改善できます。gpt-transcribe では、文字起こしへのコンテキストの追加で説明した keywordslanguages をプロンプトと組み合わせて使用してください。

既存の gpt-4o-transcribegpt-4o-mini-transcribe を使用した連携でも、プロンプトを利用できます。gpt-4o-transcribe-diarize はプロンプトに対応していません。

プロンプトは、次のような場面で役立ちます。

  • 製品名、専門用語、頭字語の正確な文字起こし
  • 長い録音を分割した際の、前のチャンクからのコンテキストの引き継ぎ
  • 句読点、大文字と小文字の区別、フィラーの保持
  • 言語に応じた希望の表記体系の選択

whisper-1 のプロンプトには 224 トークンの制限があり、推奨される文字起こしモデルほど細かく出力を制御できません。ワークフローで Whisper が必要な場合は、信頼性の向上をご覧ください。

文字起こしのストリーミング

ファイルの文字起こしでは、モデルが録音済みの音声を処理している間に、テキストを逐次ストリーミングできます。リアルタイムセッションは必要ありません。

録音済み音声の文字起こしのストリーミング

gpt-transcribestream=true を設定します。Transcriptions API は、モデルが録音の各部分を文字起こしするたびに、文字起こしイベントを返します。

文字起こしのストリーミング
from openai import OpenAI

client = OpenAI()
audio_file = open("speech.wav", "rb")

stream = client.audio.transcriptions.create(
    model="gpt-transcribe",
    file=audio_file,
    stream=True,
)

for event in stream:
    print(event)

モデルは音声の文字起こし中に transcript.text.delta イベントを発行し、最後の transcript.text.done イベントで文字起こしの全文を返します。response_format="diarized_json" を指定して話者ラベル付きの文字起こしを行う場合、話者分離モデルはセグメントを確定するたびに transcript.text.segment イベントも発行します。

gpt-transcribe では、最後のイベントに検出された言語も含まれます。

{
  "type": "transcript.text.done",
  "text": "Bonjour, pouvez-vous m'entendre ?",
  "languages": [{ "code": "fr" }]
}

既存の gpt-4o-transcribegpt-4o-mini-transcribegpt-4o-transcribe-diarize を使用した連携でも、ファイルのストリーミングをサポートしています。 whisper-1 はサポートしていません。

録音中の音声の文字起こしのストリーミング

マイク、通話、メディアストリームからのライブ音声には、上記のファイル向けストリーミングの手順ではなく、リアルタイム文字起こしガイドを使用してください。このガイドでは、現在の文字起こしセッションのフローと、gpt-live-transcribe を使用する推奨のリアルタイム処理手順を説明しています。

信頼性の向上

タイムスタンプ、字幕、翻訳のために whisper-1 を使用する場合、以下の手法で珍しい単語や頭字語の認識精度を向上できる可能性があります。汎用的な文字起こしを新たに実装する場合は、これらの手法の代わりに gpt-transcribe から始め、文字起こしのコンテキストを使用してください。