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