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.
Что дальше?
- Транслируйте аудио в реальном времени с помощью руководства по транскрипции в реальном времени, используя API Live.
- Изучите возможности анализа аудиоконтента для его обработки, обобщения или запроса.
- Узнайте, как синтезировать аудио из текста с помощью функции преобразования текста в речь .
- Информацию о ценах и лимитах токенов можно найти на странице «Цены» .
- Подробную информацию о загрузке и управлении медиафайлами см. в руководстве по Files API .