音声文字変換

Gemini API は、Gemini 3.5 Transcribe モデル(gemini-3.5-transcribe)を使用して、音声ファイル内の音声をテキストに変換します。Gemini の音声理解機能に基づいて、自動言語識別、話者ダイアライゼーション、単語レベルのタイムスタンプ、カスタム語彙ヒントを使用して、正確な文字起こしを提供します。また、言い淀みの削除やスマートな書式設定などの機能を備えたスマート文字起こしモードも用意されています。

音声ファイルを文字起こしするには、音声をアップロードして gemini-3.5-transcribe に渡します。

Python

from google import genai

client = genai.Client()

audio_file = client.files.upload(file="path/to/sample.mp3")

interaction = client.interactions.create(
    model="gemini-3.5-transcribe",
    input=[
        {
            "type": "audio",
            "uri": audio_file.uri,
            "mime_type": audio_file.mime_type,
        }
    ],
)

print(interaction.output_text)

JavaScript

import { GoogleGenAI } from "@google/genai";

const client = new GoogleGenAI({});

const audioFile = await client.files.upload({
  file: "path/to/sample.mp3",
  config: { mime_type: "audio/mp3" },
});

const interaction = await client.interactions.create({
  model: "gemini-3.5-transcribe",
  input: [
    {
      type: "audio",
      uri: audioFile.uri,
      mime_type: audioFile.mimeType,
    },
  ],
});

console.log(interaction.output_text);

Go

package main

import (
    "context"
    "fmt"
    "log"

    "google.golang.org/genai"
    "google.golang.org/genai/interactions/models/interactions"
    "google.golang.org/genai/interactions/models/operations"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }

    audioFile, err := client.Files.UploadFromPath(ctx, "path/to/sample.mp3", nil)
    if err != nil {
        log.Fatal(err)
    }

    res, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
        Body: operations.NewCreateInteractionRequestBody(interactions.CreateModelInteraction{
            Model: interactions.Model("gemini-3.5-transcribe"),
            Input: interactions.NewInteractionsInput([]interactions.Content{
                interactions.NewContent(interactions.AudioContent{
                    URI:      genai.Ptr(audioFile.URI),
                    MimeType: interactions.AudioContentMimeType(audioFile.MIMEType).ToPointer(),
                }),
            }),
        }),
    })
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(res.Interaction.GetOutputText())
}

REST

# First upload the file via the Files API, then pass its URI:
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-3.5-transcribe",
    "input": [
      {
        "type": "audio",
        "uri": "YOUR_FILE_URI",
        "mime_type": "audio/mp3"
      }
    ]
  }'

概要

Gemini 3.5 Transcribe は、音声文字変換タスク用に最適化されています。さまざまなアクセント、背景雑音、多言語の会話に対応しています。

主な機能は次のとおりです。

  • 自動音声認識(ASR): 85 以上の言語 / 地域で言語を自動的に検出します。手動で構成しなくても、文内および文間のコードスイッチングを処理します。
  • カスタム語彙: 最大 1,000 個のフレーズを渡すことで、分野固有の用語、頭字語、固有名詞の認識をバイアスします。
  • 発言者識別: 複数の発言者を区別し、発言されたセグメントを個別のラベルに関連付けます。
  • 単語レベルのタイムスタンプ: 認識された各単語の正確な開始時間と終了時間のオフセットを生成します。
  • スマート文字起こし: 発話の途切れ、つなぎ言葉、繰り返しを削除し、構造化された形式を適用します。
  • 書式設定と正規化: 大文字と小文字の区別、句読点、逆テキスト正規化(「2,600 万ドル」を「$26M」に変換するなど)を適用します。

音声コンテンツに関する一般的な音声推論や質問応答には、音声理解を使用します。テキスト読み上げの音声合成には、テキスト読み上げを使用します。

言語の検出とヒント

デフォルトでは、モデルは音声言語を自動的に検出します。話者がコードスイッチングを行うと、言語が動的に切り替わります。

自動検出を使用するには、language_codes を省略するか、空のリストを指定します。

Python

interaction = client.interactions.create(
    model="gemini-3.5-transcribe",
    input=[
        {
            "type": "audio",
            "uri": audio_file.uri,
            "mime_type": audio_file.mime_type,
        }
    ],
    generation_config={
        "transcription_config": {
            "language_codes": [],
        }
    },
)

JavaScript

const interaction = await client.interactions.create({
  model: "gemini-3.5-transcribe",
  input: [
    {
      type: "audio",
      uri: audioFile.uri,
      mime_type: audioFile.mimeType,
    },
  ],
  generation_config: {
    transcription_config: {
      language_codes: [],
    },
  },
});

Go

package main

import (
    "context"
    "fmt"
    "log"

    "google.golang.org/genai"
    "google.golang.org/genai/interactions/models/interactions"
    "google.golang.org/genai/interactions/models/operations"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }

    audioFile, err := client.Files.UploadFromPath(ctx, "path/to/sample.mp3", nil)
    if err != nil {
        log.Fatal(err)
    }

    res, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
        Body: operations.NewCreateInteractionRequestBody(interactions.CreateModelInteraction{
            Model: interactions.Model("gemini-3.5-transcribe"),
            Input: interactions.NewInteractionsInput([]interactions.Content{
                interactions.NewContent(interactions.AudioContent{
                    URI:      genai.Ptr(audioFile.URI),
                    MimeType: interactions.AudioContentMimeType(audioFile.MIMEType).ToPointer(),
                }),
            }),
            GenerationConfig: &interactions.GenerationConfig{
                TranscriptionConfig: &interactions.TranscriptionConfig{
                    LanguageCodes: []string{},
                },
            },
        }),
    })
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(res.Interaction.GetOutputText())
}

REST

curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-3.5-transcribe",
    "input": [
      {
        "type": "audio",
        "uri": "YOUR_FILE_URI",
        "mime_type": "audio/mp3"
      }
    ],
    "generation_config": {
      "transcription_config": {
        "language_codes": []
      }
    }
  }'

言語を事前に把握している場合は、language_codes で BCP-47 言語コードを指定して、文字起こしの精度を高めます(サポートされている言語をご覧ください)。

Python

generation_config = {
    "transcription_config": {
        "language_codes": ["es-ES"],
    }
}

JavaScript

const generationConfig = {
  transcription_config: {
    language_codes: ["es-ES"],
  },
};

Go

package main

import (
    "google.golang.org/genai/interactions/models/interactions"
)

func main() {
    generationConfig := &interactions.GenerationConfig{
        TranscriptionConfig: &interactions.TranscriptionConfig{
            LanguageCodes: []string{"es-ES"},
        },
    }
    _ = generationConfig
}

REST

{
  "generation_config": {
    "transcription_config": {
      "language_codes": ["es-ES"]
    }
  }
}

カスタム語彙

音声モデルが、一般的でない単語、専門用語、ブランド名、固有名詞を認識しやすくします。custom_vocabulary 配列に最大 1,000 個の用語を指定します(通常、最適な結果が得られるのは 100 個までの用語です)。

Python

interaction = client.interactions.create(
    model="gemini-3.5-transcribe",
    input=[
        {
            "type": "audio",
            "uri": audio_file.uri,
            "mime_type": audio_file.mime_type,
        }
    ],
    generation_config={
        "transcription_config": {
            "custom_vocabulary": ["Gemini", "Kubernetes", "BigQuery"],
        }
    },
)

JavaScript

const interaction = await client.interactions.create({
  model: "gemini-3.5-transcribe",
  input: [
    {
      type: "audio",
      uri: audioFile.uri,
      mime_type: audioFile.mimeType,
    },
  ],
  generation_config: {
    transcription_config: {
      custom_vocabulary: ["Gemini", "Kubernetes", "BigQuery"],
    },
  },
});

Go

package main

import (
    "context"
    "fmt"
    "log"

    "google.golang.org/genai"
    "google.golang.org/genai/interactions/models/interactions"
    "google.golang.org/genai/interactions/models/operations"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }

    audioFile, err := client.Files.UploadFromPath(ctx, "path/to/sample.mp3", nil)
    if err != nil {
        log.Fatal(err)
    }

    res, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
        Body: operations.NewCreateInteractionRequestBody(interactions.CreateModelInteraction{
            Model: interactions.Model("gemini-3.5-transcribe"),
            Input: interactions.NewInteractionsInput([]interactions.Content{
                interactions.NewContent(interactions.AudioContent{
                    URI:      genai.Ptr(audioFile.URI),
                    MimeType: interactions.AudioContentMimeType(audioFile.MIMEType).ToPointer(),
                }),
            }),
            GenerationConfig: &interactions.GenerationConfig{
                TranscriptionConfig: &interactions.TranscriptionConfig{
                    CustomVocabulary: []string{"Gemini", "Kubernetes", "BigQuery"},
                },
            },
        }),
    })
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(res.Interaction.GetOutputText())
}

REST

curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-3.5-transcribe",
    "input": [
      {
        "type": "audio",
        "uri": "YOUR_FILE_URI",
        "mime_type": "audio/mp3"
      }
    ],
    "generation_config": {
      "transcription_config": {
        "custom_vocabulary": ["Gemini", "Kubernetes", "BigQuery"]
      }
    }
  }'

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

話者ダイアライゼーションは、録音内の異なる音声を識別し、各セグメントに spk_1spk_2 などの話者識別子でタグ付けします。最大 8 台のスピーカーがサポートされています(3 台以上のスピーカーの帰属は試験運用版です)。

mode 内で diarization_mode を構成して、ダイアライゼーションを有効にします。

Python

interaction = client.interactions.create(
    model="gemini-3.5-transcribe",
    input=[
        {
            "type": "audio",
            "uri": audio_file.uri,
            "mime_type": audio_file.mime_type,
        }
    ],
    generation_config={
        "transcription_config": {
            "mode": {
                "type": "verbatim",
                "diarization_mode": "speaker",
            },
        }
    },
)

JavaScript

const interaction = await client.interactions.create({
  model: "gemini-3.5-transcribe",
  input: [
    {
      type: "audio",
      uri: audioFile.uri,
      mime_type: audioFile.mimeType,
    },
  ],
  generation_config: {
    transcription_config: {
      mode: {
        type: "verbatim",
        diarization_mode: "speaker",
      },
    },
  },
});

Go

package main

import (
    "context"
    "fmt"
    "log"

    "google.golang.org/genai"
    "google.golang.org/genai/interactions/models/interactions"
    "google.golang.org/genai/interactions/models/operations"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }

    audioFile, err := client.Files.UploadFromPath(ctx, "path/to/sample.mp3", nil)
    if err != nil {
        log.Fatal(err)
    }

    res, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
        Body: operations.NewCreateInteractionRequestBody(interactions.CreateModelInteraction{
            Model: interactions.Model("gemini-3.5-transcribe"),
            Input: interactions.NewInteractionsInput([]interactions.Content{
                interactions.NewContent(interactions.AudioContent{
                    URI:      genai.Ptr(audioFile.URI),
                    MimeType: interactions.AudioContentMimeType(audioFile.MIMEType).ToPointer(),
                }),
            }),
            GenerationConfig: &interactions.GenerationConfig{
                TranscriptionConfig: &interactions.TranscriptionConfig{
                    Mode: genai.Ptr(interactions.NewTranscriptionConfigMode(interactions.NewTranscriptionMode(interactions.VerbatimTranscriptionMode{
                        DiarizationMode: genai.Ptr("speaker"),
                    }))),
                },
            },
        }),
    })
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(res.Interaction.GetOutputText())
}

REST

curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-3.5-transcribe",
    "input": [
      {
        "type": "audio",
        "uri": "YOUR_FILE_URI",
        "mime_type": "audio/mp3"
      }
    ],
    "generation_config": {
      "transcription_config": {
        "mode": {
          "type": "verbatim",
          "diarization_mode": "speaker"
        }
      }
    }
  }'

単語レベルのタイムスタンプ

単語レベルのタイムスタンプは、音声ストリームで認識されたすべての単語の正確な開始オフセットと終了オフセットを提供します。

mode 内で timestamp_granularities を構成して、タイムスタンプを有効にします。

Python

interaction = client.interactions.create(
    model="gemini-3.5-transcribe",
    input=[
        {
            "type": "audio",
            "uri": audio_file.uri,
            "mime_type": audio_file.mime_type,
        }
    ],
    generation_config={
        "transcription_config": {
            "mode": {
                "type": "verbatim",
                "timestamp_granularities": ["word"],
            },
        }
    },
)

JavaScript

const interaction = await client.interactions.create({
  model: "gemini-3.5-transcribe",
  input: [
    {
      type: "audio",
      uri: audioFile.uri,
      mime_type: audioFile.mimeType,
    },
  ],
  generation_config: {
    transcription_config: {
      mode: {
        type: "verbatim",
        timestamp_granularities: ["word"],
      },
    },
  },
});

Go

package main

import (
    "context"
    "fmt"
    "log"

    "google.golang.org/genai"
    "google.golang.org/genai/interactions/models/interactions"
    "google.golang.org/genai/interactions/models/operations"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }

    audioFile, err := client.Files.UploadFromPath(ctx, "path/to/sample.mp3", nil)
    if err != nil {
        log.Fatal(err)
    }

    res, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
        Body: operations.NewCreateInteractionRequestBody(interactions.CreateModelInteraction{
            Model: interactions.Model("gemini-3.5-transcribe"),
            Input: interactions.NewInteractionsInput([]interactions.Content{
                interactions.NewContent(interactions.AudioContent{
                    URI:      genai.Ptr(audioFile.URI),
                    MimeType: interactions.AudioContentMimeType(audioFile.MIMEType).ToPointer(),
                }),
            }),
            GenerationConfig: &interactions.GenerationConfig{
                TranscriptionConfig: &interactions.TranscriptionConfig{
                    Mode: genai.Ptr(interactions.NewTranscriptionConfigMode(interactions.NewTranscriptionMode(interactions.VerbatimTranscriptionMode{
                        TimestampGranularities: []string{"word"},
                    }))),
                },
            },
        }),
    })
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(res.Interaction.GetOutputText())
}

REST

curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-3.5-transcribe",
    "input": [
      {
        "type": "audio",
        "uri": "YOUR_FILE_URI",
        "mime_type": "audio/mp3"
      }
    ],
    "generation_config": {
      "transcription_config": {
        "mode": {
          "type": "verbatim",
          "timestamp_granularities": ["word"]
        }
      }
    }
  }'

modediarization_modetimestamp_granularities を組み合わせると、スピーカー ラベルと単語のタイムスタンプの両方を取得できます。

Python

generation_config = {
    "transcription_config": {
        "mode": {
            "type": "verbatim",
            "diarization_mode": "speaker",
            "timestamp_granularities": ["word"],
        },
    }
}

JavaScript

const generationConfig = {
  transcription_config: {
    mode: {
      type: "verbatim",
      diarization_mode: "speaker",
      timestamp_granularities: ["word"],
    },
  },
};

Go

package main

import (
    "google.golang.org/genai"
    "google.golang.org/genai/interactions/models/interactions"
)

func main() {
    generationConfig := &interactions.GenerationConfig{
        TranscriptionConfig: &interactions.TranscriptionConfig{
            Mode: genai.Ptr(interactions.NewTranscriptionConfigMode(interactions.NewTranscriptionMode(interactions.VerbatimTranscriptionMode{
                DiarizationMode:        genai.Ptr("speaker"),
                TimestampGranularities: []string{"word"},
            }))),
        },
    }
    _ = generationConfig
}

REST

{
  "generation_config": {
    "transcription_config": {
      "mode": {
        "type": "verbatim",
        "diarization_mode": "speaker",
        "timestamp_granularities": ["word"]
      }
    }
  }
}

文字起こしモード

Gemini 3.5 Transcribe は、mode パラメータを介して次の 2 つの文字起こしモードをサポートしています。

  • verbatim(デフォルト): 発言された内容をすべて正確に文字起こしし、フィラーワード(「えー」、「あー」、「~みたいな」、「~だよね」など)、繰り返し、一時停止、言い直しをそのまま残します。このモード({"type": "verbatim", ...})では、タイムスタンプと話者ダイアライゼーションが構成されます。
  • smart(スマート文字起こし): インテリジェントな後処理を適用して、文字起こしを読みやすく最適化します。
    • 発話の乱れを削除: 会話のフィラー、どもり、誤った開始を削除します。
    • インラインの自己訂正: 発言の訂正を直接解決します(たとえば、「火曜日に会いましょう。いや、水曜日の 2 時にしましょう」は「水曜日の午後 2 時に会いましょう」になります)。
    • 構造化された自動書式設定: 発言された考えを段落、番号付きリスト、箇条書き、書式設定された日付、通貨、数値に自動的に構造化します。
    • 文法的なクリーンアップ: 自然な句読点、文のケース、流れを適用します。
音声 verbatim の出力 smart(スマート文字起こし)の出力
「えっと、会議にはアリスを招待するべきだと思います。あ、いや、ボブとキャロルを招待するべきです。」 「えっと、会議にはアリスを招待して、いや、ボブとキャロルを招待しましょう。」 「会議には Bob と Carol を招待した方がいいと思います。」
「First item review budget second item finalize timeline third item send recap」 「first item review budget second item finalize timeline third item send recap」 「1. 予算を確認します。
2. タイムラインを確定する
3. ダイジェストを送信」

Python

interaction = client.interactions.create(
    model="gemini-3.5-transcribe",
    input=[
        {
            "type": "audio",
            "uri": audio_file.uri,
            "mime_type": audio_file.mime_type,
        }
    ],
    generation_config={
        "transcription_config": {
            "mode": "smart",
        }
    },
)
print(interaction.output_text)

JavaScript

const interaction = await client.interactions.create({
  model: "gemini-3.5-transcribe",
  input: [
    {
      type: "audio",
      uri: audioFile.uri,
      mime_type: audioFile.mimeType,
    },
  ],
  generation_config: {
    transcription_config: {
      mode: "smart",
    },
  },
});
console.log(interaction.output_text);

Go

package main

import (
    "context"
    "fmt"
    "log"

    "google.golang.org/genai"
    "google.golang.org/genai/interactions/models/interactions"
    "google.golang.org/genai/interactions/models/operations"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }

    audioFile, err := client.Files.UploadFromPath(ctx, "path/to/sample.mp3", nil)
    if err != nil {
        log.Fatal(err)
    }

    res, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
        Body: operations.NewCreateInteractionRequestBody(interactions.CreateModelInteraction{
            Model: interactions.Model("gemini-3.5-transcribe"),
            Input: interactions.NewInteractionsInput([]interactions.Content{
                interactions.NewContent(interactions.AudioContent{
                    URI:      genai.Ptr(audioFile.URI),
                    MimeType: interactions.AudioContentMimeType(audioFile.MIMEType).ToPointer(),
                }),
            }),
            GenerationConfig: &interactions.GenerationConfig{
                TranscriptionConfig: &interactions.TranscriptionConfig{
                    Mode: genai.Ptr(interactions.NewTranscriptionConfigMode(interactions.TranscriptionConfigModeEnumSmart)),
                },
            },
        }),
    })
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(res.Interaction.GetOutputText())
}

REST

curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-3.5-transcribe",
    "input": [
      {
        "type": "audio",
        "uri": "YOUR_FILE_URI",
        "mime_type": "audio/mp3"
      }
    ],
    "generation_config": {
      "transcription_config": {
        "mode": "smart"
      }
    }
  }'

音声文字変換出力の解析

完全な文字起こしテキストが interaction.output_text で返されます。

timestamp_granularities または diarization_mode が有効になっている場合、API はインタラクション コンテンツに付加された単語レベルの詳細なアノテーションも返します。

単語のタイムスタンプと話者のターンを抽出して反復処理する方法は次のとおりです。

Python

def extract_word_annotations(interaction):
    words = []
    for step in getattr(interaction, "steps", []) or []:
        for content in getattr(step, "content", []) or []:
            for annotation in getattr(content, "annotations", []) or []:
                if getattr(annotation, "type", None) == "word_info":
                    words.append(annotation)
    return words

words = extract_word_annotations(interaction)

for w in words:
    speaker = f"[{w.speaker}] " if getattr(w, "speaker", None) else ""
    start = getattr(w, "start_offset", "")
    end = getattr(w, "end_offset", "")
    timing = f"({start} -> {end}) " if start and end else ""
    print(f"{speaker}{timing}{w.text}")

JavaScript

function extractWordAnnotations(interaction) {
  const words = [];
  for (const step of interaction.steps ?? []) {
    for (const content of step.content ?? []) {
      for (const annotation of content.annotations ?? []) {
        if (annotation.type === "word_info") {
          words.push(annotation);
        }
      }
    }
  }
  return words;
}

const words = extractWordAnnotations(interaction);

for (const w of words) {
  const speaker = w.speaker ? `[${w.speaker}] ` : "";
  const timing = (w.start_offset && w.end_offset) ? `(${w.start_offset} -> ${w.end_offset}) ` : "";
  console.log(`${speaker}${timing}${w.text}`);
}

Go

package main

import (
    "fmt"

    "google.golang.org/genai/interactions/models/interactions"
)

func extractWordAnnotations(interaction *interactions.Interaction) []*interactions.WordInfo {
    var words []*interactions.WordInfo
    if interaction == nil {
        return words
    }
    for _, step := range interaction.Steps {
        if step.ModelOutputStep != nil {
            for _, content := range step.ModelOutputStep.Content {
                if content.TextContent != nil {
                    for _, annotation := range content.TextContent.Annotations {
                        if annotation.WordInfo != nil {
                            words = append(words, annotation.WordInfo)
                        }
                    }
                }
            }
        }
    }
    return words
}

func main() {
    var interaction *interactions.Interaction
    words := extractWordAnnotations(interaction)

    for _, w := range words {
        speaker := ""
        if w.Speaker != nil && *w.Speaker != "" {
            speaker = fmt.Sprintf("[%s] ", *w.Speaker)
        }
        timing := ""
        if w.StartOffset != nil && w.EndOffset != nil {
            timing = fmt.Sprintf("(%s -> %s) ", *w.StartOffset, *w.EndOffset)
        }
        fmt.Printf("%s%s%s\n", speaker, timing, w.GetText())
    }
}

REST

{
  "id": "interactions/abc123xyz",
  "status": "completed",
  "steps": [
    {
      "id": "step_001",
      "type": "model_output",
      "content": [
        {
          "type": "text",
          "text": "Hello world",
          "annotations": [
            {
              "type": "word_info",
              "text": "Hello",
              "speaker": "spk_1",
              "start_offset": "0.100s",
              "end_offset": "0.450s"
            },
            {
              "type": "word_info",
              "text": "world",
              "speaker": "spk_1",
              "start_offset": "0.500s",
              "end_offset": "0.850s"
            }
          ]
        }
      ]
    }
  ]
}

サポートされている言語

Gemini 3.5 Transcribe では、次の言語と BCP-47 言語コードがサポートされています。

言語 BCP-47 コード 言語 BCP-47 コード
アフリカーンス語 af-ZA 日本語 ja-JP
アムハラ語 am-ET ジャワ語 jv-ID
アラビア語(エジプト) ar-EG Kabuverdianu kea-CV
アルメニア語 hy-AM カンナダ語 kn-IN
アッサム語 as-IN カザフ語 kk-KZ
アゼルバイジャン語 az-AZ 韓国語 ko-KR
ベラルーシ語 be-BY キルギス語 ky-KG
ベンガル語(バングラデシュ) bn-BD ラトビア語 lv-LV
ベンガル語(インド) bn-IN リンガラ語 ln-CD
ボスニア語 bs-BA リトアニア語 lt-LT
ブルガリア語 bg-BG マケドニア語 mk-MK
ブルガリア語(アルーマニア語) rup-BG マレー語 ms-MY
ビルマ語 my-MM マラヤーラム語 ml-IN
広東語(繁体) yue-Hant-HK マルタ語 mt-MT
カタルーニャ語 ca-ES 標準中国語(簡体字) cmn-Hans-CN
セブアノ語 ceb マラーティー語 mr-IN
中央クメール語 km-KH モンゴル語 mn-MN
クロアチア語 hr-HR ネパール語 ne-NP
チェコ語 cs-CZ ノルウェー語 nb-NO
デンマーク語 da-DK オリヤ語 or-IN
オランダ語 nl-NL ポーランド語 pl-PL
英語(英国) en-GB ポルトガル語(ブラジル) pt-BR
英語(インド) en-IN ポルトガル語(ポルトガル) pt-PT
英語(米国) en-US パンジャブ語 pa-IN
エストニア語 et-EE パンジャブ語(グルムキー文字) pa-Guru-IN
ペルシア語 fa-IR ルーマニア語 ro-RO
フィリピン語 fil-PH ロシア語 ru-RU
フィンランド語 fi-FI セルビア語 sr-RS
フランス語 fr-FR シンド語(アラビア文字) sd-Arab-IN
ガリシア語 gl-ES スロバキア語 sk-SK
ジョージア語 ka-GE スロベニア語 sl-SI
ドイツ語 de-DE スペイン語(ラテンアメリカ) es-419
ギリシャ語 el-GR スペイン語(米国) es-US
グジャラート語 gu-IN スワヒリ語(ケニア) sw-KE
ハウサ語 ha-NG スウェーデン語 sv-SE
ヘブライ語 he-IL タジク語 tg-TJ
ヒンディー語 hi-IN テルグ語 te-IN
ハンガリー語 hu-HU タイ語 th-TH
アイスランド語 is-IS トルコ語 tr-TR
英語(インド) en-IN ウクライナ語 uk-UA
インドネシア語 id-ID ウズベク語 uz-UZ
イタリア語 it-IT ベトナム語 vi-VN

サポートされているオーディオ形式

Gemini 3.5 Transcribe は、次の音声形式の MIME タイプをサポートしています。

  • WAV - audio/wav
  • MP3 - audio/mp3
  • AIFF - audio/aiff
  • AAC - audio/aac
  • OGG - audio/ogg
  • FLAC - audio/flac
  • MPEG - audio/mpeg
  • M4A - audio/m4a
  • L16 - audio/l16
  • Opus - audio/opus
  • ALAW - audio/alaw
  • MULAW - audio/mulaw
  • WebM - audio/webm

サポートされている MIME タイプとパラメータ スキーマの完全なリストについては、Interactions API リファレンスをご覧ください。

パラメータ リファレンス

generation_configtranscription_config オブジェクト内のフィールドを設定して、文字起こしを構成します。

フィールド タイプ 説明
language_codes 文字列の配列 BCP-47 言語コード(例: ["en-US"])。省略または空([])の場合、モデルは言語を自動的に検出し、コード切り替えを処理します。
custom_vocabulary 文字列の配列 音声認識にバイアスをかけるためのカスタム用語、頭字語、固有名詞を最大 1,000 個。話者ダイアライゼーションと単語レベルのタイムスタンプには対応していません。
mode Object または String 文字起こしモードの構成。"smart" または逐語モード オブジェクト({"type": "verbatim", ...})を受け入れます。デフォルトは逐語文字起こしです。
mode.type 文字列 (逐語モードのみ)モード ID。常に "verbatim" に設定。
mode.timestamp_granularities 文字列の配列 (フリーコメント モードのみ)返されるタイムスタンプの粒度。単語の開始オフセットと終了オフセットを有効にするには、["word"] を渡します。カスタム語彙と互換性がありません。
mode.diarization_mode 文字列 (逐語モードのみ)発言者識別モード。"speaker" を渡して、個別の話者を識別してラベル付けします。カスタム語彙と互換性がありません。

ベスト プラクティス

  • クリアな音声を提供する: 音声録音で音声が明瞭に分離され、クリッピングがひどくならないようにします。
  • 言語のヒントを事前に指定する: 音声の言語を事前に把握している場合は、language_codes を指定して精度を最大限に高めます。
  • カスタム語彙のターゲット: 一般的な日常用語ではなく、custom_vocabulary には明確なドメイン用語、ブランド名、固有名詞のみを含めます。
  • 大きな録音には Files API を使用する: 数秒を超えるファイルの場合は、client.files.upload を使用してファイルをアップロードし、返されたファイル URI をモデルに渡します。

制限事項

  • 音声の長さ: 標準の単項リクエストでは、最大 1 時間の音声ファイルをサポートします。話者ダイアライゼーションや単語レベルのタイムスタンプなどの機能が有効になっている場合、音声処理は 30 分に制限されます。
  • 単語レベルのタイムスタンプ: 単語レベルのタイムスタンプを有効にすると、全体的な文字起こしの精度が低下する可能性があります。
  • 話者ダイアライゼーション: 話者ダイアライゼーションは最大 8 人の話者をサポートします。3 人以上の発言者の発言者属性は試験運用版です。
  • カスタム語彙: custom_vocabulary で最大 1,000 個の用語を指定できますが、通常は 100 個までの用語で最適な結果が得られます。custom_vocabulary を話者ダイアライゼーションや単語レベルのタイムスタンプと組み合わせることはできません。custom_vocabulary とこれらの機能のいずれかを同時に指定するリクエストは、API によって拒否されます。
  • モードの互換性: スマート文字起こし("smart")は timestamp_granularities または diarization_mode と組み合わせることはできません。

次のステップ

  • Live API を使用して、リアルタイム音声文字変換ガイドでリアルタイム音声をストリーミングします。
  • 音声理解を使用して、音声コンテンツの分析、要約、クエリを行います。
  • テキスト読み上げを使用してテキストから音声を合成する方法を学習する。
  • モデルの料金とトークン上限については、料金ページをご覧ください。
  • メディア ファイルのアップロードと管理の詳細については、Files API ガイドをご覧ください。