ترانویسی

‫Gemini API بااستفاده از مدل Gemini 3.5 Transcribe (gemini-3.5-transcribe)، گفتار موجود در فایل‌های صوتی را به نوشتار تبدیل می‌کند. براساس قابلیت‌های درک صوتی Gemini، این API ترانویسی دقیقی با شناسایی خودکار زبان، تفکیک گوینده، مُهرهای زمان در سطح کلمه، و راهنمایی‌های واژگان سفارشی ارائه می‌دهد. همچنین، حالت ترانویسی هوشمند را ارائه می‌دهد که دارای ویژگی‌های ناروانی‌زدایی و قالب‌بندی هوشمند است.

برای ترانویسی فایل صوتی، صدا را بارگذاری کنید و آن را به 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);

رفتن

package main

import (
    "context"
    "fmt"
    "log"

    "google.golang.org/genai"
    "google.golang.org/genai/interactions/models/interactions"
    "google.golang.org/genai/interactions/models/operations"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }

    audioFile, err := client.Files.UploadFromPath(ctx, "path/to/sample.mp3", nil)
    if err != nil {
        log.Fatal(err)
    }

    res, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
        Body: operations.NewCreateInteractionRequestBody(interactions.CreateModelInteraction{
            Model: interactions.Model("gemini-3.5-transcribe"),
            Input: interactions.NewInteractionsInput([]interactions.Content{
                interactions.NewContent(interactions.AudioContent{
                    URI:      genai.Ptr(audioFile.URI),
                    MimeType: interactions.AudioContentMimeType(audioFile.MIMEType).ToPointer(),
                }),
            }),
        }),
    })
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(res.Interaction.GetOutputText())
}

استراحت

# 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): به‌طور خودکار زبان‌ها را در بیش‌از ۸۵ منطقه تشخیص می‌دهد. جابه‌جایی کد درون‌جمله‌ای و بین‌جمله‌ای را بدون پیکربندی دستی مدیریت می‌کند.
  • واژگان سفارشی: با ارسال حداکثر ۱۰۰۰ عبارت، تشخیص را به‌سمت اصطلاحات خاص دامنه، سرنام‌ها، و نام‌های خاص متمایل می‌کند.
  • تفکیک گوینده: بین چند گوینده تمایز قائل می‌شود و بخش‌های گفتاری را به برچسب‌های متمایز نسبت می‌دهد.
  • مُهرهای زمان در سطح کلمه: برای هر کلمه تشخیص‌داده‌شده، زمان شروع و پایان دقیق تولید می‌کند.
  • ترانویسی هوشمند: نارسایی‌های گفتاری، کلمات پرکننده، و تکرارها را پاک می‌کند و قالب‌بندی ساختاریافته اعمال می‌کند.
  • قالب‌بندی و عادی‌سازی: بزرگ‌نویسی، نقطه‌گذاری، و عادی‌سازی معکوس نوشتار را اعمال می‌کند، مثلاً «بیست‌وشش میلیون دلار» را به «۲۶ میلیون دلار» تبدیل می‌کند.

برای استدلال صوتی عمومی یا پاسخ دادن به سؤال درباره محتوای صوتی، از درک صوتی استفاده کنید. برای ترکیب صدای نوشتار به گفتار، از نوشتار به گفتار استفاده کنید.

تشخیص زبان و راهنمایی‌ها

به‌طور پیش‌فرض، مدل به‌طور خودکار زبان گفتاری را تشخیص می‌دهد. وقتی گویندگان زبانشان را تغییر می‌دهند، به‌طور پویا بین زبان‌ها جابه‌جا می‌شود.

برای استفاده از تشخیص خودکار، 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: [],
    },
  },
});

رفتن

package main

import (
    "context"
    "fmt"
    "log"

    "google.golang.org/genai"
    "google.golang.org/genai/interactions/models/interactions"
    "google.golang.org/genai/interactions/models/operations"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }

    audioFile, err := client.Files.UploadFromPath(ctx, "path/to/sample.mp3", nil)
    if err != nil {
        log.Fatal(err)
    }

    res, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
        Body: operations.NewCreateInteractionRequestBody(interactions.CreateModelInteraction{
            Model: interactions.Model("gemini-3.5-transcribe"),
            Input: interactions.NewInteractionsInput([]interactions.Content{
                interactions.NewContent(interactions.AudioContent{
                    URI:      genai.Ptr(audioFile.URI),
                    MimeType: interactions.AudioContentMimeType(audioFile.MIMEType).ToPointer(),
                }),
            }),
            GenerationConfig: &interactions.GenerationConfig{
                TranscriptionConfig: &interactions.TranscriptionConfig{
                    LanguageCodes: []string{},
                },
            },
        }),
    })
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(res.Interaction.GetOutputText())
}

استراحت

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

رفتن

package main

import (
    "google.golang.org/genai/interactions/models/interactions"
)

func main() {
    generationConfig := &interactions.GenerationConfig{
        TranscriptionConfig: &interactions.TranscriptionConfig{
            LanguageCodes: []string{"es-ES"},
        },
    }
    _ = generationConfig
}

استراحت

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

واژگان سفارشی

می‌توانید مدل گفتار را به‌سمت کلمات غیرمعمول، اصطلاحات فنی، نام‌های نمانام، یا اسامی خاص هدایت کنید. حداکثر ۱۰۰۰ عبارت را در آرایه custom_vocabulary ارائه دهید (بهترین نتایج معمولاً با حداکثر ۱۰۰ عبارت به‌دست می‌آید):

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

رفتن

package main

import (
    "context"
    "fmt"
    "log"

    "google.golang.org/genai"
    "google.golang.org/genai/interactions/models/interactions"
    "google.golang.org/genai/interactions/models/operations"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }

    audioFile, err := client.Files.UploadFromPath(ctx, "path/to/sample.mp3", nil)
    if err != nil {
        log.Fatal(err)
    }

    res, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
        Body: operations.NewCreateInteractionRequestBody(interactions.CreateModelInteraction{
            Model: interactions.Model("gemini-3.5-transcribe"),
            Input: interactions.NewInteractionsInput([]interactions.Content{
                interactions.NewContent(interactions.AudioContent{
                    URI:      genai.Ptr(audioFile.URI),
                    MimeType: interactions.AudioContentMimeType(audioFile.MIMEType).ToPointer(),
                }),
            }),
            GenerationConfig: &interactions.GenerationConfig{
                TranscriptionConfig: &interactions.TranscriptionConfig{
                    CustomVocabulary: []string{"Gemini", "Kubernetes", "BigQuery"},
                },
            },
        }),
    })
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(res.Interaction.GetOutputText())
}

استراحت

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 برچسب‌گذاری می‌کند. تا ۸ گوینده پشتیبانی می‌شود (انتساب برای ۳ گوینده یا بیشتر آزمایشی است).

با پیکربندی 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",
      },
    },
  },
});

رفتن

package main

import (
    "context"
    "fmt"
    "log"

    "google.golang.org/genai"
    "google.golang.org/genai/interactions/models/interactions"
    "google.golang.org/genai/interactions/models/operations"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }

    audioFile, err := client.Files.UploadFromPath(ctx, "path/to/sample.mp3", nil)
    if err != nil {
        log.Fatal(err)
    }

    res, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
        Body: operations.NewCreateInteractionRequestBody(interactions.CreateModelInteraction{
            Model: interactions.Model("gemini-3.5-transcribe"),
            Input: interactions.NewInteractionsInput([]interactions.Content{
                interactions.NewContent(interactions.AudioContent{
                    URI:      genai.Ptr(audioFile.URI),
                    MimeType: interactions.AudioContentMimeType(audioFile.MIMEType).ToPointer(),
                }),
            }),
            GenerationConfig: &interactions.GenerationConfig{
                TranscriptionConfig: &interactions.TranscriptionConfig{
                    Mode: genai.Ptr(interactions.NewTranscriptionConfigMode(interactions.NewTranscriptionMode(interactions.VerbatimTranscriptionMode{
                        DiarizationMode: genai.Ptr("speaker"),
                    }))),
                },
            },
        }),
    })
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(res.Interaction.GetOutputText())
}

استراحت

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

رفتن

package main

import (
    "context"
    "fmt"
    "log"

    "google.golang.org/genai"
    "google.golang.org/genai/interactions/models/interactions"
    "google.golang.org/genai/interactions/models/operations"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }

    audioFile, err := client.Files.UploadFromPath(ctx, "path/to/sample.mp3", nil)
    if err != nil {
        log.Fatal(err)
    }

    res, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
        Body: operations.NewCreateInteractionRequestBody(interactions.CreateModelInteraction{
            Model: interactions.Model("gemini-3.5-transcribe"),
            Input: interactions.NewInteractionsInput([]interactions.Content{
                interactions.NewContent(interactions.AudioContent{
                    URI:      genai.Ptr(audioFile.URI),
                    MimeType: interactions.AudioContentMimeType(audioFile.MIMEType).ToPointer(),
                }),
            }),
            GenerationConfig: &interactions.GenerationConfig{
                TranscriptionConfig: &interactions.TranscriptionConfig{
                    Mode: genai.Ptr(interactions.NewTranscriptionConfigMode(interactions.NewTranscriptionMode(interactions.VerbatimTranscriptionMode{
                        TimestampGranularities: []string{"word"},
                    }))),
                },
            },
        }),
    })
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(res.Interaction.GetOutputText())
}

استراحت

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

می‌توانید diarization_mode و timestamp_granularities را در mode ترکیب کنید تا هم برچسب‌های گوینده و هم مُهرهای زمان کلمه را دریافت کنید:

Python

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

JavaScript

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

رفتن

package main

import (
    "google.golang.org/genai"
    "google.golang.org/genai/interactions/models/interactions"
)

func main() {
    generationConfig := &interactions.GenerationConfig{
        TranscriptionConfig: &interactions.TranscriptionConfig{
            Mode: genai.Ptr(interactions.NewTranscriptionConfigMode(interactions.NewTranscriptionMode(interactions.VerbatimTranscriptionMode{
                DiarizationMode:        genai.Ptr("speaker"),
                TimestampGranularities: []string{"word"},
            }))),
        },
    }
    _ = generationConfig
}

استراحت

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

حالت‌های ترانویسی

‫Gemini 3.5 Transcribe از دو حالت ترانویسی ازطریق پارامتر mode پشتیبانی می‌کند:

  • verbatim (پیش‌فرض): ترانویسی دقیق کلمه‌به‌کلمه از هر آنچه گفته شده است را برمی‌گرداند و کلمات پرکننده خام («ام»، «اِ»، «مثلاً»، «می‌دانی»)، تکرارها، مکث‌ها، و شروع‌های اشتباه را حفظ می‌کند. مُهرهای زمان و بخش‌بندی صدای گوینده در این حالت ({"type": "verbatim", ...}) پیکربندی شده‌اند.
  • smart (ترانویسی هوشمند): ترانویسی را با اعمال پس‌پردازش هوشمند برای خواندن بهینه‌سازی می‌کند:
    • ناروانی‌زدایی: کلمات پرکننده مکالمه، لکنت زبان، و شروع‌های اشتباه را حذف می‌کند.
    • خوداصلاحی درون‌خطی: اصلاحات گفتاری را مستقیماً حل می‌کند (برای مثال، «بیایید سه‌شنبه همدیگر را ببینیم، نه، درواقع چهارشنبه ساعت دو» به «بیایید چهارشنبه ساعت ۲:۰۰ بعدازظهر همدیگر را ببینیم» تبدیل می‌شود).
    • قالب‌بندی ساختاریافته خودکار: به‌طور خودکار افکار بیان‌شده را در قالب پاراگراف، فهرست شماره‌دار، فهرست نقطه‌دار، تاریخ‌های قالب‌بندی‌شده، واحد پول، و عدد ساختاردهی می‌کند.
    • پاک‌سازی دستوری: نشانه‌های سجاوندی، حروف بزرگ و کوچک، و جریان طبیعی را اعمال می‌کند.
صوتی گفتاری ‫verbatim برونداد برونداد smart (ترانویسی هوشمند)
«ام، خب برای جلسه، فکر می‌کنم باید، اه، آلیس را دعوت کنیم و، نه صبر کن، باب و کارول.» «خب برای جلسه فکر می‌کنم باید آلیس را دعوت کنیم و نه صبر کن باب و کارول.» «برای جلسه، فکر می‌کنم باید باب و کارول را دعوت کنیم.»
«مورد اول بازبینی بودجه مورد دوم نهایی کردن زمان‌بندی مورد سوم ارسال خلاصه» «مورد اول بازبینی بودجه مورد دوم نهایی کردن زمان‌بندی مورد سوم ارسال خلاصه» «۱. مرور بودجه
۲. نهایی کردن خط زمان
۳. ارسال خلاصه»

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

رفتن

package main

import (
    "context"
    "fmt"
    "log"

    "google.golang.org/genai"
    "google.golang.org/genai/interactions/models/interactions"
    "google.golang.org/genai/interactions/models/operations"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }

    audioFile, err := client.Files.UploadFromPath(ctx, "path/to/sample.mp3", nil)
    if err != nil {
        log.Fatal(err)
    }

    res, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
        Body: operations.NewCreateInteractionRequestBody(interactions.CreateModelInteraction{
            Model: interactions.Model("gemini-3.5-transcribe"),
            Input: interactions.NewInteractionsInput([]interactions.Content{
                interactions.NewContent(interactions.AudioContent{
                    URI:      genai.Ptr(audioFile.URI),
                    MimeType: interactions.AudioContentMimeType(audioFile.MIMEType).ToPointer(),
                }),
            }),
            GenerationConfig: &interactions.GenerationConfig{
                TranscriptionConfig: &interactions.TranscriptionConfig{
                    Mode: genai.Ptr(interactions.NewTranscriptionConfigMode(interactions.TranscriptionConfigModeEnumSmart)),
                },
            },
        }),
    })
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(res.Interaction.GetOutputText())
}

استراحت

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

درحال تجزیه خروجی ترانویسی

متن کامل ترانویسی در 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}`);
}

رفتن

package main

import (
    "fmt"

    "google.golang.org/genai/interactions/models/interactions"
)

func extractWordAnnotations(interaction *interactions.Interaction) []*interactions.WordInfo {
    var words []*interactions.WordInfo
    if interaction == nil {
        return words
    }
    for _, step := range interaction.Steps {
        if step.ModelOutputStep != nil {
            for _, content := range step.ModelOutputStep.Content {
                if content.TextContent != nil {
                    for _, annotation := range content.TextContent.Annotations {
                        if annotation.WordInfo != nil {
                            words = append(words, annotation.WordInfo)
                        }
                    }
                }
            }
        }
    }
    return words
}

func main() {
    var interaction *interactions.Interaction
    words := extractWordAnnotations(interaction)

    for _, w := range words {
        speaker := ""
        if w.Speaker != nil && *w.Speaker != "" {
            speaker = fmt.Sprintf("[%s] ", *w.Speaker)
        }
        timing := ""
        if w.StartOffset != nil && w.EndOffset != nil {
            timing = fmt.Sprintf("(%s -> %s) ", *w.StartOffset, *w.EndOffset)
        }
        fmt.Printf("%s%s%s\n", speaker, timing, w.GetText())
    }
}

استراحت

{
  "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.400s"
            },
            {
              "type": "word_info",
              "text": "world",
              "speaker": "spk_1",
              "start_offset": "0.500s",
              "end_offset": "0.800s"
            }
          ]
        }
      ]
    }
  ]
}

زبان‌های پشتیبانی‌شده

زبان‌ها و کدهای زبان BCP-47 زیر برای Gemini 3.5 Transcribe پشتیبانی می‌شوند:

زبان کد 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
Belarusian 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 Slovenian 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

قالب‌های صوتی پشتیبانی‌شده

‫Gemini 3.5 Transcribe از انواع MIME قالب صوتی زیر پشتیبانی می‌کند:

  • 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‎

برای مشاهده فهرست کامل انواع MIME و طرح‌واره‌های پارامتر پشتیبانی‌شده، به مرجع Interactions API مراجعه کنید.

مرجع پارامتر

ترانویسی را با تنظیم فیلدها در شیء transcription_config در generation_config پیکربندی کنید:

فیلد نوع شرح
language_codes آرایه رشته‌ها کدهای زبان BCP-47 (مثلاً ["en-US"]). اگر حذف شود یا خالی باشد ([])، مدل به‌طور خودکار زبان را تشخیص می‌دهد و تغییر کد را مدیریت می‌کند.
custom_vocabulary آرایه رشته‌ها تا ۱۰۰۰ اصطلاح سفارشی، سرنام، یا نام خاص برای سوگیری تشخیص گفتار. با بخش‌بندی صدای گوینده و مُهرهای زمان سطح کلمه ناسازگار است.
mode شیء یا رشته پیکربندی حالت ترانویسی. "smart" یا شیء حالت کلمه‌به‌کلمه ({"type": "verbatim", ...}) را می‌پذیرد. به‌طور پیش‌فرض ترانویسی کلمه‌به‌کلمه است.
mode.type رشته (فقط حالت «عین عبارت») شناسه حالت. همیشه روی "verbatim" تنظیم شده است.
mode.timestamp_granularities آرایه رشته‌ها (فقط حالت کلمه‌به‌کلمه) جزئیات مُهرهای زمان برای برگرداندن. برای فعال کردن افست‌های شروع و پایان کلمه، ["word"] را ارسال کنید. با واژگان سفارشی سازگار نیست.
mode.diarization_mode رشته (فقط حالت «عین عبارت») حالت «تشخیص گوینده». "speaker" را برای شناسایی و برچسب‌گذاری گویندگان متمایز ارسال کنید. با واژگان سفارشی سازگار نیست.

روال‌های مطلوب

  • صدای واضح ارائه دهید: مطمئن شوید صداهای ضبط‌شده دارای تفکیک صدای واضح باشند و از برش شدید اجتناب کنید.
  • درصورت اطلاع، راهنمایی‌های زبانی ارائه دهید: اگر ازقبل زبان صوتی را می‌دانید، language_codes را مشخص کنید تا دقت به حداکثر برسد.
  • واژگان سفارشی هدف: فقط اصطلاحات دامنه متمایز، نام‌های تجاری، یا اسامی خاص را در custom_vocabulary اضافه کنید، نه کلمات رایج روزمره.
  • از Files API برای قطعه‌های ضبط‌شده بزرگ استفاده کنید: برای فایل‌های طولانی‌تر از چند ثانیه، فایل را بااستفاده از client.files.upload بارگذاری کنید و شناسه منبع یکسان فایل برگردانده‌شده را به مدل ارسال کنید.

محدودیت‌ها

  • مدت صدا: درخواست‌های تک‌تایی استاندارد از فایل‌های صوتی تا ۱ ساعت پشتیبانی می‌کنند. وقتی ویژگی‌هایی مثل تفکیک گوینده یا مُهرهای زمان در سطح کلمه فعال باشد، پردازش صدا به ۳۰ دقیقه محدود می‌شود.
  • مُهرهای زمان در سطح کلمه: فعال کردن مُهرهای زمان در سطح کلمه ممکن است دقت کلی ترانویسی را کاهش دهد.
  • بخش‌بندی صدای گوینده: بخش‌بندی صدای گوینده حداکثر از ۸ گوینده پشتیبانی می‌کند. انتساب گوینده برای ۳ گوینده یا بیشتر آزمایشی است.
  • واژگان سفارشی: می‌توانید حداکثر ۱٬۰۰۰ عبارت را در custom_vocabulary ارائه دهید، اما بهترین نتایج معمولاً با حداکثر ۱۰۰ عبارت به‌دست می‌آید. نمی‌توانید custom_vocabulary را با گوینده‌شناسی یا مُهرهای زمان در سطح کلمه ترکیب کنید؛ میانای برنامه‌سازی کاربردی درخواست‌هایی را که custom_vocabulary را در کنار هریک از این ویژگی‌ها مشخص می‌کنند رد می‌کند.
  • سازگاری حالت: ترانویسی هوشمند ("smart") را نمی‌توان با timestamp_granularities یا diarization_mode ترکیب کرد.

قدم بعدی چیست

  • بااستفاده از Live API، صدا را به‌طور هم‌زمان با راهنمای ترانویسی زنده جاری‌سازی کنید.
  • درک صوتی را کاوش کنید تا محتوای صوتی را تجزیه‌وتحلیل، خلاصه، یا پُرسمان کنید.
  • با نحوه ترکیب صدا از نوشتار بااستفاده از نوشتار به گفتار آشنا شوید.
  • برای اطلاع از قیمت‌گذاری مدل و محدودیت‌های توکن، صفحه قیمت‌گذاری را بررسی کنید.
  • برای جزئیات مربوط به بارگذاری و مدیریت فایل‌های رسانه‌ای، راهنمای Files API را بررسی کنید.