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

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")

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);

ОТДЫХ

# 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 языковых версиях . Обрабатывает переключение кодов внутри предложений и между предложениями без ручной настройки.
  • Пользовательский словарь: распознавание смещено в сторону терминов, аббревиатур и собственных имён, специфичных для предметной области, путем пропуска до 1000 фраз.
  • Диалог говорящих: различает нескольких говорящих и присваивает каждому фрагменту речи отдельные метки.
  • Временные метки на уровне слов: генерирует точные начальные и конечные временные смещения для каждого распознанного слова.
  • Интеллектуальная транскрипция: устраняет невнятность, слова-паразиты, повторения и применяет структурированное форматирование.
  • Форматирование и нормализация: Применяется нормализация регистра, пунктуации и инверсная нормализация текста, например, преобразование "двадцать шесть миллионов долларов" в "$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: [],
    },
  },
});

ОТДЫХ

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": []
      }
    }
  }'

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

Python

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

JavaScript

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

ОТДЫХ

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

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

Вы можете настроить модель распознавания речи на использование редких слов, технического жаргона, названий брендов или имен собственных. Укажите до 1000 терминов в массиве custom_vocabulary (наилучшие результаты обычно достигаются при использовании до 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"],
    },
  },
});

ОТДЫХ

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_1 или spk_2 . Поддерживается до 8 говорящих (возможность указания 3 и более говорящих является экспериментальной).

Включите диаризацию, настроив diarization_mode в 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",
      },
    },
  },
});

ОТДЫХ

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"
        }
      }
    }
  }'

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

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

Включите отображение временных меток, настроив timestamp_granularities в 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",
                "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"],
      },
    },
  },
});

ОТДЫХ

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"]
        }
      }
    }
  }'

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

Python

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

JavaScript

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

ОТДЫХ

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

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

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

  • verbatim (по умолчанию) : Возвращает точную дословную расшифровку всего произнесенного, сохраняя необработанные слова-паразиты («ум», «э», «типа», «знаешь»), повторения, паузы и ложные начала. Временные метки и диаризация говорящего настраиваются в этом режиме ( {"type": "verbatim", ...} ).
  • smart (Smart transcription) : Оптимизирует транскрипцию для чтения, применяя интеллектуальную постобработку:
    • Удаление невнятных фраз : устраняет разговорные слова-паразиты, заикание и ложные начала речи.
    • Встроенные самокоррекции : напрямую исправляют устные исправления (например, "Давайте встретимся во вторник, на самом деле нет, в среду в два" становится "Давайте встретимся в среду в 14:00" ).
    • Автоматическое структурированное форматирование : автоматически структурирует устные мысли в абзацы, нумерованные списки, маркированные списки, форматированные даты, валюты и числа.
    • Грамматическая коррекция : Применяет естественную пунктуацию, регистр предложений и плавность изложения.
Устное аудио verbatim вывод smart (умная транскрипция) вывод
«Э-э, так вот, на встречу, я думаю, нам следует пригласить Элис и, нет, подождите, Боба и Кэрол». «Э-э, на встречу, я думаю, нам следует пригласить Элис, а Боба и Кэрол, нет, подождите». «Думаю, на встречу нам следует пригласить Боба и Кэрол».
«Первый пункт: обзор бюджета, второй пункт: окончательная доработка графика, третий пункт: отправка итогового отчета» «Первый пункт: обзор бюджета, второй пункт: окончательная доработка графика, третий пункт: отправка итогового отчета» «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": {
                "type": "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: {
        type: "smart",
      },
    },
  },
});
console.log(interaction.output_text);

ОТДЫХ

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": "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}`);
}

ОТДЫХ

{
  "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 Кабувердиану 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

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

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

Поле Тип Описание
language_codes Массив строк Языковые коды BCP-47 (например, ["en-US"] ). Если они опущены или пусты ( [] ), модель автоматически определяет язык и обрабатывает переключение кодов.
custom_vocabulary Массив строк До 1000 пользовательских терминов, аббревиатур или собственных имён для корректировки распознавания речи.
mode Объект или строка Настройка режима транскрипции. Принимает объект режима ( {"type": "smart"} или {"type": "verbatim", ...} ) или строковое перечисление ( "smart" , "verbatim" ). По умолчанию используется дословная транскрипция.
mode.type Нить Идентификатор режима ( "smart" или "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 можно указать до 1000 терминов, но наилучшие результаты обычно достигаются при использовании до 100 терминов.
  • Совместимость режимов: Интеллектуальная транскрипция ( "type": "smart" ) не может быть объединена с timestamp_granularities или diarization_mode .

Что дальше?