Transkripsi audio

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

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

REST

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

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

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: [],
    },
  },
});

REST

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

Jika Anda mengetahui bahasa sebelumnya, tentukan kode bahasa BCP-47 di language_codes untuk meningkatkan akurasi transkripsi (lihat Bahasa yang didukung):

Python

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

JavaScript

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

REST

{
  "generationConfig": {
    "audioTranscriptionConfig": {
      "languageCodes": ["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

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"],
    },
  },
});

REST

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

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 menyetel diarization ke 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,
    },
  },
});

REST

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

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 menyetel word_timestamp ke 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,
    },
  },
});

REST

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

Anda dapat menggabungkan diarization dan word_timestamp dalam satu permintaan untuk menerima label pembicara dan stempel waktu kata:

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"],
  },
};

REST

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

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. Diperlukan saat menggunakan stempel waktu atau diarization speaker.
  • 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

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

REST

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

Mengurai output transkripsi

Teks transkrip lengkap ditampilkan di response.text.

Jika word_timestamp atau diarization diaktifkan, API juga akan menampilkan anotasi tingkat kata yang mendetail dan label pembicara yang dilampirkan ke bagian kandidat.

Berikut cara mengekstrak dan melakukan iterasi pada stempel waktu kata dan pergantian pembicara:

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

REST

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

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

Format audio yang didukung

Transkripsi Gemini 3.5 mendukung jenis MIME format audio berikut:

  • WAV - audio/wav
  • MP3 - audio/mp3
  • AIFF - audio/aiff
  • AAC - audio/aac
  • OGG - audio/ogg
  • FLAC - audio/flac
  • MPEG - audio/mpeg
  • M4A - audio/m4a
  • L16 - audio/l16
  • Opus - audio/opus
  • ALAW - audio/alaw
  • MULAW - audio/mulaw
  • WebM - audio/webm

Untuk mengetahui daftar lengkap jenis MIME dan skema parameter yang didukung, lihat referensi Interactions API.

Referensi parameter

Konfigurasi transkripsi dengan menyetel kolom dalam objek audio_transcription_config di GenerateContentConfig:

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.
word_timestamp Boolean Setel ke True untuk menyertakan offset awal dan akhir kata. Jika dihilangkan atau False, tidak ada stempel waktu kata yang ditampilkan.
diarization Boolean Setel ke True untuk mengidentifikasi dan melabeli pembicara yang berbeda.
mode String Mode transkripsi. Nilai yang didukung: "VERBATIM" (default) dan "SMART". Tidak kompatibel dengan stempel waktu dan diarisasi.

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_codes untuk 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 berdurasi panjang: Untuk file yang berdurasi lebih dari beberapa detik, upload file menggunakan client.files.upload dan teruskan file yang ditampilkan ke konten 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 (mode: "SMART") tidak dapat digabungkan dengan word_timestamp atau diarization.

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.