Gemini API mengonversi ucapan dalam file audio menjadi teks menggunakan model Transcribe Gemini 3.5 (gemini-3.5-transcribe). Berdasarkan kemampuan pemahaman audio Gemini, API ini memberikan transkripsi yang akurat dengan identifikasi bahasa otomatis, diarisasi penutur, stempel waktu tingkat kata, dan petunjuk kosakata kustom. Fitur ini juga menyediakan mode transkripsi cerdas yang menampilkan penghapusan ketidaklancaran dan pemformatan cerdas.
Untuk mentranskripsikan file audio, upload audio dan teruskan ke 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);
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"
}
]
}'
Ringkasan
Transkripsi Gemini 3.5 dioptimalkan untuk tugas speech-to-text. Model ini menangani beragam aksen, suara bising di latar belakang, dan percakapan multi-bahasa.
Kemampuan utama meliputi:
- Pengenalan ucapan otomatis (ASR): Mendeteksi bahasa secara otomatis di lebih dari 85 lokalitas. Menangani peralihan kode intra-kalimat dan antar-kalimat tanpa konfigurasi manual.
- Kosakata kustom: Memiringkan pengenalan terhadap istilah khusus domain, akronim, dan nama diri dengan meneruskan hingga 1.000 frasa.
- Diarisasi pembicara: Membedakan beberapa pembicara dan mengatribusikan segmen yang diucapkan ke label yang berbeda.
- Stempel waktu tingkat kata: Membuat offset waktu mulai dan berakhir yang akurat untuk setiap kata yang dikenali.
- Transkripsi pintar: Menghapus ketidaklancaran, kata pengisi, pengulangan, dan menerapkan format terstruktur.
- Pemformatan dan normalisasi: Menerapkan kapitalisasi, tanda baca, dan normalisasi teks terbalik, seperti mengonversi "dua puluh enam juta dolar" menjadi "$26M".
Untuk penalaran audio umum atau menjawab pertanyaan terkait konten audio, gunakan Pemahaman audio. Untuk sintesis audio text-to-speech, gunakan Text-to-speech.
Deteksi dan petunjuk bahasa
Secara default, model akan mendeteksi bahasa lisan secara otomatis. Fitur ini beralih antarbahasa secara dinamis saat pembicara berganti kode.
Untuk menggunakan deteksi otomatis, hapus language_codes atau berikan daftar kosong:
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: [],
},
},
});
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": []
}
}
}'
Jika Anda mengetahui bahasa sebelumnya, tentukan kode bahasa BCP-47 di language_codes untuk meningkatkan akurasi transkripsi (lihat Bahasa yang didukung):
Python
generation_config = {
"transcription_config": {
"language_codes": ["es-ES"],
}
}
JavaScript
const generationConfig = {
transcription_config: {
language_codes: ["es-ES"],
},
};
REST
{
"generation_config": {
"transcription_config": {
"language_codes": ["es-ES"]
}
}
}
Kosakata kustom
Anda dapat mengarahkan model ucapan ke kata-kata yang tidak umum, jargon teknis, nama merek, atau nama diri. Berikan hingga 1.000 istilah dalam array custom_vocabulary (hasil terbaik biasanya dicapai dengan hingga 100 istilah):
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"],
},
},
});
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"]
}
}
}'
Diarisasi pembicara
Diarisasi pembicara mengidentifikasi suara yang berbeda dalam rekaman dan memberi tag pada setiap segmen dengan ID pembicara seperti spk_1 atau spk_2. Hingga 8 speaker didukung (atribusi untuk 3 speaker atau lebih bersifat eksperimental).
Aktifkan pemisahan pembicara dengan mengonfigurasi diarization_mode dalam 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",
},
},
},
});
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"
}
}
}
}'
Stempel waktu tingkat kata
Stempel waktu tingkat kata memberikan offset awal dan akhir yang tepat untuk setiap kata yang dikenali dalam aliran audio.
Aktifkan stempel waktu dengan mengonfigurasi timestamp_granularities dalam 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"],
},
},
},
});
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"]
}
}
}
}'
Anda dapat menggabungkan diarization_mode dan timestamp_granularities di mode untuk menerima label pembicara dan stempel waktu kata:
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"],
},
},
};
REST
{
"generation_config": {
"transcription_config": {
"custom_vocabulary": ["Gemini"],
"mode": {
"type": "verbatim",
"diarization_mode": "speaker",
"timestamp_granularities": ["word"]
}
}
}
}
Mode transkripsi
Gemini 3.5 Transcribe mendukung dua mode transkripsi melalui parameter mode:
verbatim(default): Menampilkan transkrip kata demi kata yang persis dari semua yang diucapkan, dengan mempertahankan kata pengisi mentah ("um", "eh", "kayak", "tahu"), pengulangan, jeda, dan awal yang salah. Stempel waktu dan diarisasi pembicara dikonfigurasi dalam mode ini ({"type": "verbatim", ...}).smart(Transkripsi cerdas): Mengoptimalkan transkrip untuk dibaca dengan menerapkan pasca-pemrosesan cerdas:- Penghapusan ketidaklancaran: Menghapus kata pengisi percakapan, gagap, dan permulaan yang salah.
- Koreksi mandiri inline: Menyelesaikan koreksi lisan secara langsung (misalnya, "Mari bertemu pada hari Selasa, eh tidak, hari Rabu pukul dua" menjadi "Mari bertemu pada hari Rabu pukul 14.00").
- Pemformatan terstruktur otomatis: Secara otomatis menyusun pemikiran yang diucapkan menjadi paragraf, daftar bernomor, poin-poin, tanggal, mata uang, dan angka yang diformat.
- Pembersihan tata bahasa: Menerapkan tanda baca, kapitalisasi kalimat, dan alur yang alami.
| Audio lisan | verbatim output |
Output smart (Transkripsi cerdas) |
|---|---|---|
| "Um, jadi untuk rapat, saya pikir kita harus, eh, mengundang Alice dan, tunggu, bukan, Bob dan Carol." | "Um jadi untuk rapat, saya rasa kita harus mengundang Alice dan bukan Bob dan Carol." | "Untuk rapat, sebaiknya kita mengundang Budi dan Ari." |
| "Item pertama tinjau anggaran item kedua selesaikan linimasa item ketiga kirim ringkasan" | "tinjau anggaran item pertama selesaikan linimasa item kedua kirim ringkasan item ketiga" | "1. Tinjau anggaran 2. Menyelesaikan linimasa 3. Kirim ringkasan" |
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);
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"
}
}
}'
Mengurai output transkripsi
Teks transkrip lengkap ditampilkan di interaction.output_text.
Jika timestamp_granularities atau diarization_mode diaktifkan, API juga akan menampilkan anotasi tingkat kata yang mendetail dan dilampirkan ke konten interaksi.
Berikut cara mengekstrak dan melakukan iterasi pada stempel waktu kata dan pergantian pembicara:
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}`);
}
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"
}
]
}
]
}
]
}
Bahasa yang didukung
Bahasa dan kode bahasa BCP-47 berikut didukung untuk Transkripsi Gemini 3.5:
| Language | Kode BCP-47 | Language | Kode BCP-47 |
|---|---|---|---|
| Afrika | af-ZA |
Jepang | ja-JP |
| Amharik | am-ET |
Jawa | jv-ID |
| Arab (Mesir) | ar-EG |
Kabuverdianu | kea-CV |
| Armenia | hy-AM |
Kannada | kn-IN |
| Assam | as-IN |
Kazak | kk-KZ |
| Azerbaijan | az-AZ |
Korea | ko-KR |
| Belarusia | be-BY |
Kirgiz | ky-KG |
| Bengali (Bangladesh) | bn-BD |
Latvia | lv-LV |
| Bengali (India) | bn-IN |
Lingala | ln-CD |
| Bosnia | bs-BA |
Lituania | lt-LT |
| Bulgaria | bg-BG |
Makedonia | mk-MK |
| Bulgaria (Aromania) | rup-BG |
Melayu | ms-MY |
| Burma | my-MM |
Malayalam | ml-IN |
| Kanton (Tradisional) | yue-Hant-HK |
Malta | mt-MT |
| Katalan | ca-ES |
China Mandarin (Aksara Sederhana) | cmn-Hans-CN |
| Cebuano | ceb |
Marathi | mr-IN |
| Khmer Tengah | km-KH |
Mongolia | mn-MN |
| Kroasia | hr-HR |
Nepal | ne-NP |
| Ceko | cs-CZ |
Norwegia | nb-NO |
| Denmark | da-DK |
Oriya | or-IN |
| Belanda | nl-NL |
Polandia | pl-PL |
| Inggris (Britania Raya) | en-GB |
Portugis (Brasil) | pt-BR |
| Inggris (India) | en-IN |
Portugis (Portugal) | pt-PT |
| Inggris (Amerika Serikat) | en-US |
Punjabi | pa-IN |
| Estonia | et-EE |
Punjabi (skrip Gurmukhi) | pa-Guru-IN |
| Persia | fa-IR |
Rumania | ro-RO |
| Filipino | fil-PH |
Rusia | ru-RU |
| Finlandia | fi-FI |
Serbia | sr-RS |
| Prancis | fr-FR |
Sindhi (skrip Arab) | sd-Arab-IN |
| Galisia | gl-ES |
Slovakia | sk-SK |
| Georgia | ka-GE |
Slovenia | sl-SI |
| Jerman | de-DE |
Spanyol (Amerika Latin) | es-419 |
| Yunani | el-GR |
Spanyol (Amerika Serikat) | es-US |
| Gujarati | gu-IN |
Swahili (Kenya) | sw-KE |
| Hausa | ha-NG |
Swedia | sv-SE |
| Ibrani | he-IL |
Tajik | tg-TJ |
| Hindi | hi-IN |
Telugu | te-IN |
| Hungaria | hu-HU |
Thai | th-TH |
| Islandia | is-IS |
Turki | tr-TR |
| Inggris - India | en-IN |
Ukraina | uk-UA |
| Indonesia | id-ID |
Uzbek | uz-UZ |
| Italia | it-IT |
Vietnam | vi-VN |
Referensi parameter
Konfigurasi transkripsi dengan menyetel kolom dalam objek transcription_config di generation_config:
| Kolom | Jenis | Deskripsi |
|---|---|---|
language_codes |
Array string | Kode bahasa BCP-47 (misalnya, ["en-US"]). Jika tidak ada atau kosong ([]), model akan otomatis mendeteksi bahasa dan menangani pengalihan kode. |
custom_vocabulary |
Array string | Hingga 1.000 istilah kustom, akronim, atau nama diri untuk memengaruhi pengenalan ucapan. |
mode |
Object atau String | Konfigurasi mode transkripsi. Menerima "smart" atau objek mode kata demi kata ({"type": "verbatim", ...}). Secara default, transkripsi kata demi kata. |
mode.type |
String | (Khusus mode kata demi kata) ID mode. Selalu ditetapkan ke "verbatim". |
mode.timestamp_granularities |
Array string | (Khusus mode Kata demi kata) Tingkat perincian stempel waktu yang akan ditampilkan. Teruskan ["word"] untuk mengaktifkan offset awal dan akhir kata. |
mode.diarization_mode |
String | (Khusus mode kata demi kata) Mode diarisasi. Teruskan "speaker" untuk mengidentifikasi dan melabeli pembicara yang berbeda. |
Praktik terbaik
- Berikan audio yang jernih: Pastikan rekaman audio memiliki pemisahan suara yang jelas dan hindari pemangkasan yang parah.
- Berikan petunjuk bahasa jika diketahui: Jika Anda mengetahui bahasa audio sebelumnya, tentukan
language_codesuntuk memaksimalkan akurasi. - Targetkan kosakata kustom: Hanya sertakan istilah domain, nama merek, atau kata benda yang berbeda dalam
custom_vocabulary, bukan kata-kata umum sehari-hari. - Gunakan Files API untuk rekaman berukuran besar: Untuk file yang berdurasi lebih dari beberapa detik, upload file menggunakan
client.files.uploaddan teruskan URI file yang ditampilkan ke model.
Batasan
- Durasi audio: Permintaan unary standar mendukung file audio hingga 1 jam. Pemrosesan audio dibatasi hingga 30 menit jika fitur seperti diarisasi speaker atau stempel waktu tingkat kata diaktifkan.
- Stempel waktu tingkat kata: Mengaktifkan stempel waktu tingkat kata dapat menurunkan akurasi transkripsi secara keseluruhan.
- Diarisasi pembicara: Diarisasi pembicara mendukung hingga 8 pembicara. Atribusi speaker untuk 3 speaker atau lebih bersifat eksperimental.
- Kosakata kustom: Anda dapat memberikan hingga 1.000 istilah dalam
custom_vocabulary, tetapi hasil terbaik biasanya dicapai dengan hingga 100 istilah. - Kompatibilitas mode: Transkripsi smart (
"smart") tidak dapat digabungkan dengantimestamp_granularitiesataudiarization_mode.
Langkah berikutnya
- Streaming audio real-time dengan Panduan transkripsi langsung menggunakan Live API.
- Jelajahi Pemahaman audio untuk menganalisis, meringkas, atau membuat kueri konten audio.
- Pelajari cara menyintesis audio dari teks menggunakan Text-to-speech.
- Periksa halaman Harga untuk mengetahui harga model dan batas token.
- Lihat panduan Files API untuk mengetahui detail tentang cara mengupload dan mengelola file media.