Расшифровка аудиозаписи

API Gemini преобразует речь в аудиофайлах в текст, используя модель транскрипции Gemini 3.5 ( 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")

response = client.models.generate_content(
    model="gemini-3.5-transcribe",
    contents=[audio_file],
)

print(response.text)

JavaScript

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

const ai = new GoogleGenAI({});

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

const response = await ai.models.generateContent({
  model: "gemini-3.5-transcribe",
  contents: [audioFile],
});

console.log(response.text);

ОТДЫХ

# First upload the file via the Files API, then pass its URI:
curl -X POST "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.5-transcribe:generateContent" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [
      {
        "parts": [
          {
            "fileData": {
              "fileUri": "YOUR_FILE_URI",
              "mimeType": "audio/mp3"
            }
          }
        ]
      }
    ]
  }'

Обзор

Gemini 3.5 Transcribe оптимизирован для задач преобразования речи в текст. Он обрабатывает различные акценты, фоновый шум и многоязычные разговоры.

Ключевые возможности включают в себя:

  • Автоматическое распознавание речи (ASR): автоматически определяет языки в более чем 85 языковых версиях . Обрабатывает переключение кодов внутри предложений и между предложениями без ручной настройки.
  • Пользовательский словарь: распознавание смещено в сторону терминов, аббревиатур и собственных имён, специфичных для предметной области, путем пропуска до 1000 фраз.
  • Диалог говорящих: различает нескольких говорящих и присваивает каждому фрагменту речи отдельные метки.
  • Временные метки на уровне слов: генерирует точные начальные и конечные временные смещения для каждого распознанного слова.
  • Интеллектуальная транскрипция: устраняет невнятность, слова-паразиты, повторения и применяет структурированное форматирование.
  • Форматирование и нормализация: Применяется нормализация регистра, пунктуации и инверсная нормализация текста, например, преобразование "двадцать шесть миллионов долларов" в "$26M".

Для общего анализа аудиоконтента или ответов на вопросы используйте функцию «Понимание аудио» . Для синтеза речи из текста используйте функцию «Преобразование текста в речь» .

Определение языка и подсказки

По умолчанию модель автоматически определяет используемый язык. Она динамически переключается между языками при смене языка говорящими.

Для автоматического определения языка опустите параметр language_codes или укажите пустой список:

Python

from google import genai
from google.genai import types

client = genai.Client()

response = client.models.generate_content(
    model="gemini-3.5-transcribe",
    contents=[audio_file],
    config=types.GenerateContentConfig(
        audio_transcription_config=types.AudioTranscriptionConfig(
            language_codes=[],
        )
    ),
)

JavaScript

const response = await ai.models.generateContent({
  model: "gemini-3.5-transcribe",
  contents: [audioFile],
  config: {
    audioTranscriptionConfig: {
      languageCodes: [],
    },
  },
});

ОТДЫХ

curl -X POST "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.5-transcribe:generateContent" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [
      {
        "parts": [
          {
            "fileData": {
              "fileUri": "YOUR_FILE_URI",
              "mimeType": "audio/mp3"
            }
          }
        ]
      }
    ],
    "generationConfig": {
      "audioTranscriptionConfig": {
        "languageCodes": []
      }
    }
  }'

Если язык известен заранее, укажите языковые коды BCP-47 в language_codes для повышения точности транскрипции (см. раздел «Поддерживаемые языки »):

Python

config = types.GenerateContentConfig(
    audio_transcription_config=types.AudioTranscriptionConfig(
        language_codes=["es-ES"],
    )
)

JavaScript

const config = {
  audioTranscriptionConfig: {
    languageCodes: ["es-ES"],
  },
};

ОТДЫХ

{
  "generationConfig": {
    "audioTranscriptionConfig": {
      "languageCodes": ["es-ES"]
    }
  }
}

Пользовательский словарь

Вы можете настроить модель распознавания речи на использование редких слов, технического жаргона, названий брендов или имен собственных. Укажите до 1000 терминов в массиве custom_vocabulary (наилучшие результаты обычно достигаются при использовании до 100 терминов):

Python

from google import genai
from google.genai import types

client = genai.Client()

response = client.models.generate_content(
    model="gemini-3.5-transcribe",
    contents=[audio_file],
    config=types.GenerateContentConfig(
        audio_transcription_config=types.AudioTranscriptionConfig(
            custom_vocabulary=["Gemini", "Kubernetes", "BigQuery"],
        )
    ),
)

JavaScript

const response = await ai.models.generateContent({
  model: "gemini-3.5-transcribe",
  contents: [audioFile],
  config: {
    audioTranscriptionConfig: {
      customVocabulary: ["Gemini", "Kubernetes", "BigQuery"],
    },
  },
});

ОТДЫХ

curl -X POST "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.5-transcribe:generateContent" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [
      {
        "parts": [
          {
            "fileData": {
              "fileUri": "YOUR_FILE_URI",
              "mimeType": "audio/mp3"
            }
          }
        ]
      }
    ],
    "generationConfig": {
      "audioTranscriptionConfig": {
        "customVocabulary": ["Gemini", "Kubernetes", "BigQuery"]
      }
    }
  }'

Диалогизация говорящих

Функция диаризации речи идентифицирует разные голоса в записи и помечает каждый сегмент идентификатором говорящего, например, spk_1 или spk_2 . Поддерживается до 8 говорящих (возможность указания 3 и более говорящих является экспериментальной).

Включите диаризацию, установив параметр diarization в True :

Python

from google import genai
from google.genai import types

client = genai.Client()

response = client.models.generate_content(
    model="gemini-3.5-transcribe",
    contents=[audio_file],
    config=types.GenerateContentConfig(
        audio_transcription_config=types.AudioTranscriptionConfig(
            diarization=True,
        )
    ),
)

JavaScript

const response = await ai.models.generateContent({
  model: "gemini-3.5-transcribe",
  contents: [audioFile],
  config: {
    audioTranscriptionConfig: {
      diarization: true,
    },
  },
});

ОТДЫХ

curl -X POST "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.5-transcribe:generateContent" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [
      {
        "parts": [
          {
            "fileData": {
              "fileUri": "YOUR_FILE_URI",
              "mimeType": "audio/mp3"
            }
          }
        ]
      }
    ],
    "generationConfig": {
      "audioTranscriptionConfig": {
        "diarization": true
      }
    }
  }'

Временные метки на уровне слов

Временные метки на уровне слов обеспечивают точное смещение начала и конца для каждого распознанного слова в аудиопотоке.

Включите отображение временных меток, установив параметр word_timestamp в True :

Python

from google import genai
from google.genai import types

client = genai.Client()

response = client.models.generate_content(
    model="gemini-3.5-transcribe",
    contents=[audio_file],
    config=types.GenerateContentConfig(
        audio_transcription_config=types.AudioTranscriptionConfig(
            word_timestamp=True,
        )
    ),
)

JavaScript

const response = await ai.models.generateContent({
  model: "gemini-3.5-transcribe",
  contents: [audioFile],
  config: {
    audioTranscriptionConfig: {
      wordTimestamp: true,
    },
  },
});

ОТДЫХ

curl -X POST "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.5-transcribe:generateContent" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [
      {
        "parts": [
          {
            "fileData": {
              "fileUri": "YOUR_FILE_URI",
              "mimeType": "audio/mp3"
            }
          }
        ]
      }
    ],
    "generationConfig": {
      "audioTranscriptionConfig": {
        "wordTimestamp": true
      }
    }
  }'

Вы можете объединить diarization и word_timestamp в одном запросе, чтобы получить как метки говорящего, так и временные метки слов:

Python

config = types.GenerateContentConfig(
    audio_transcription_config=types.AudioTranscriptionConfig(
        diarization=True,
        word_timestamp=True,
        custom_vocabulary=["Gemini"],
    )
)

JavaScript

const config = {
  audioTranscriptionConfig: {
    diarization: true,
    wordTimestamp: true,
    customVocabulary: ["Gemini"],
  },
};

ОТДЫХ

{
  "generationConfig": {
    "audioTranscriptionConfig": {
      "diarization": true,
      "wordTimestamp": true,
      "customVocabulary": ["Gemini"]
    }
  }
}

Режимы транскрипции

Gemini 3.5 Transcribe поддерживает два режима транскрипции с помощью параметра mode :

  • VERBATIM (по умолчанию) : Возвращает точную дословную расшифровку всего произнесенного, сохраняя слова-паразиты («хм», «э», «типа», «знаешь»), повторения, паузы и ложные начала. Требуется при использовании временных меток или диаризации говорящих.
  • SMART (Smart transcription) : Оптимизирует транскрипцию для чтения за счет интеллектуальной постобработки:
    • Удаление невнятных фраз : устраняет разговорные слова-паразиты, заикание и ложные начала речи.
    • Встроенные самокоррекции : напрямую исправляют устные исправления (например, "Давайте встретимся во вторник, на самом деле нет, в среду в два" становится "Давайте встретимся в среду в 14:00" ).
    • Автоматическое структурированное форматирование : автоматически структурирует устные мысли в абзацы, нумерованные списки, маркированные списки, форматированные даты, валюты и числа.
    • Грамматическая коррекция : Применяет естественную пунктуацию, регистр предложений и плавность изложения.
Устное аудио VERBATIM вывод Вывод SMART (Smart transcription)
«Э-э, так вот, на встречу, я думаю, нам следует пригласить Элис и, нет, подождите, Боба и Кэрол». «Э-э, на встречу, я думаю, нам следует пригласить Элис, а Боба и Кэрол, нет, подождите». «Думаю, на встречу нам следует пригласить Боба и Кэрол».
«Первый пункт: обзор бюджета, второй пункт: окончательная доработка графика, третий пункт: отправка итогового отчета» «Первый пункт: обзор бюджета, второй пункт: окончательная доработка графика, третий пункт: отправка итогового отчета» «1. Пересмотреть бюджет»
2. Завершение согласования сроков.
3. Отправить краткий обзор

Python

from google import genai
from google.genai import types

client = genai.Client()

response = client.models.generate_content(
    model="gemini-3.5-transcribe",
    contents=[audio_file],
    config=types.GenerateContentConfig(
        audio_transcription_config=types.AudioTranscriptionConfig(
            mode="SMART",
        )
    ),
)
print(response.text)

JavaScript

const response = await ai.models.generateContent({
  model: "gemini-3.5-transcribe",
  contents: [audioFile],
  config: {
    audioTranscriptionConfig: {
      mode: "SMART",
    },
  },
});
console.log(response.text);

ОТДЫХ

curl -X POST "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.5-transcribe:generateContent" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [
      {
        "parts": [
          {
            "fileData": {
              "fileUri": "YOUR_FILE_URI",
              "mimeType": "audio/mp3"
            }
          }
        ]
      }
    ],
    "generationConfig": {
      "audioTranscriptionConfig": {
        "mode": "SMART"
      }
    }
  }'

Анализ результатов транскрипции

Полный текст стенограммы возвращается в response.text .

Если включены word_timestamp или diarization , API также возвращает подробные аннотации на уровне слов и метки говорящего, прикрепленные к рассматриваемым частям речи.

Вот как извлечь и перебрать временные метки слов и реплики говорящих:

Python

def extract_word_transcriptions(response):
    words = []
    for candidate in getattr(response, "candidates", []) or []:
        content = getattr(candidate, "content", None)
        for part in getattr(content, "parts", []) or []:
            transcription = getattr(part, "audio_transcription", None)
            if transcription:
                speaker = getattr(transcription, "speaker_label", "")
                for word_info in getattr(transcription, "words", []) or []:
                    word = getattr(word_info, "word", "")
                    start = getattr(word_info, "start_offset", "")
                    end = getattr(word_info, "end_offset", "")
                    words.append({
                        "word": word,
                        "speaker": speaker,
                        "start_offset": start,
                        "end_offset": end,
                    })
    return words

words = extract_word_transcriptions(response)

for w in words:
    speaker = f"[{w['speaker']}] " if w["speaker"] else ""
    timing = f"({w['start_offset']} -> {w['end_offset']}) " if w["start_offset"] and w["end_offset"] else ""
    print(f"{speaker}{timing}{w['word']}")

JavaScript

function extractWordTranscriptions(response) {
  const words = [];
  for (const candidate of response.candidates ?? []) {
    for (const part of candidate.content?.parts ?? []) {
      const transcription = part.audioTranscription;
      if (transcription) {
        const speaker = transcription.speakerLabel ?? "";
        for (const wordInfo of transcription.words ?? []) {
          words.push({
            word: wordInfo.word ?? "",
            speaker: speaker,
            startOffset: wordInfo.startOffset ?? "",
            endOffset: wordInfo.endOffset ?? "",
          });
        }
      }
    }
  }
  return words;
}

const words = extractWordTranscriptions(response);

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

ОТДЫХ

{
  "candidates": [
    {
      "content": {
        "parts": [
          {
            "audioTranscription": {
              "speakerLabel": "spk_1",
              "words": [
                {
                  "word": "Hello",
                  "startOffset": "0.100s",
                  "endOffset": "0.450s"
                },
                {
                  "word": "world",
                  "startOffset": "0.500s",
                  "endOffset": "0.850s"
                }
              ]
            }
          }
        ],
        "role": "model"
      },
      "finishReason": "STOP"
    }
  ]
}

Поддерживаемые языки

В Gemini 3.5 Transcribe поддерживаются следующие языки и языковые коды BCP-47:

Язык Код BCP-47 Язык Код BCP-47
африкаанс af-ZA японский ja-JP
амхарский am-ET яванский jv-ID
Арабский (Египет) ar-EG Кабувердиану 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

Справочник параметров

Настройте транскрипцию, задав поля в объекте audio_transcription_config в GenerateContentConfig :

Поле Тип Описание
language_codes Массив строк Языковые коды BCP-47 (например, ["en-US"] ). Если они опущены или пусты ( [] ), модель автоматически определяет язык и обрабатывает переключение кодов.
custom_vocabulary Массив строк До 1000 пользовательских терминов, аббревиатур или собственных имён для корректировки распознавания речи.
word_timestamp Логический Установите значение True , чтобы включить смещения начала и конца слов. Если это значение опущено или установлено False , метки времени слов не возвращаются.
diarization Логический Установите значение True , чтобы идентифицировать и помечать отдельных говорящих.
mode Нить Режим транскрипции. Поддерживаемые значения: "VERBATIM" (по умолчанию) и "SMART" . Несовместимо с временными метками и диаризацией.

Передовые методы

  • Обеспечьте чистое звучание: убедитесь, что в аудиозаписях четкое разделение голосов и избегайте сильных искажений.
  • Указывайте языковые подсказки, если они известны: если язык аудиозаписи известен заранее, укажите language_codes для максимальной точности.
  • Целевой пользовательский словарь: Включайте в custom_vocabulary только уникальные термины из предметной области, названия брендов или имена собственные, а не распространенные повседневные слова.
  • Для больших записей используйте Files API: если длина файла превышает несколько секунд, загрузите его с помощью client.files.upload и передайте полученный файл в содержимое модели.

Ограничения

  • Длительность аудио: Стандартные унарные запросы поддерживают аудиофайлы до 1 часа. Обработка аудио ограничена 30 минутами при включении таких функций, как диаризация говорящего или временные метки на уровне слов.
  • Временные метки на уровне слов: Включение временных меток на уровне слов может снизить общую точность транскрипции.
  • Диалог говорящих: Диалог говорящих поддерживает до 8 говорящих. Привязка говорящих для 3 или более говорящих является экспериментальной функцией.
  • Пользовательский словарь: В custom_vocabulary можно указать до 1000 терминов, но наилучшие результаты обычно достигаются при использовании до 100 терминов.
  • Совместимость режимов: Интеллектуальная транскрипция ( mode: "SMART" ) не может сочетаться с word_timestamp или diarization .

Что дальше?