Introduction
The Universal Translator allows for caption translations in over 150 languages and dubbing in over 70 languages. It can be accessed through three main entry points in the VideoCloud UI, enabling customers to select which languages they would like their captions or audio tracks translated to.
Interacting with the Universal Translator during Ingestion
To select the target languages for captions translation and dubbing in the ingestion process, follow the next steps:
- Click Upload
-
Choose the target languages for both Captions Translations and Dubbing Languages.
-
(Optional) You can enable the review checkbox to pause dubbing until after you review your translated captions.
- Complete the upload. Auto-captions are generated, and then translated into the languages you selected.
- If review is enabled, confirm caption quality either in the VideoCloud Captions Editor or by downloading, editing, and re-uploading caption tracks.
- After review, explicitly trigger dubbing. Brightcove generates dubbed audio tracks for all selected languages once the prerequisites are satisfied.
Editing a text track
You may want to edit a text track to review automatically generated content before creating a new audio track. To do this, follow the next steps:
- Select your video and navigate to the Languages section.
- Click the Edit text track pencil icon next to your desired language.
- Add your changes and click Publish text track or Generate audio to generate your audio directly.
Using Video Details
In the Languages section of the Video Details page, you can manage captions and dubbing for each video. This includes adding new caption tracks, triggering dubbing, and retriggering dubbing after making edits.
- Navigate to the Video Details page and locate the Languages section of your video.
-
Click New to add text and audio tracks in one or more target languages.
-
When generating captions, you can optionally enable Use Translation Glossary and/or Use Custom Instructions in the translation dialog to apply your configured account-level Translation Glossaries and Custom Translation Instructions to this translation job.
-
To create an additional audio track in another language, click Generate audio on the desired language or click New next to Audio Tracks and select Translate audio.
- If you edit captions later, you can retrigger dubbing. Retriggering overwrites the existing dubbed audio tracks with new ones based on the updated captions.
Translating transcripts
In the Languages section of the Video Details page, you can translate existing transcripts into additional languages.
- Navigate to the Video Details page and open the Languages section.
- Switch the title dropdown to Transcripts.
- Open the New menu and select Translate Transcripts.
- Select the target languages and click Generate.
Adding new languages in bulk
Use the Media module to add captions and generate translations for multiple videos at once. Follow the next steps:
- In the Media module, select the videos you want to update.
- Click ... and choose Captions and Audio.
- Set your preferences and click Generate to start processing.
- After processing is complete, review the generated tracks and publish as needed.
Admin Module Settings
Upload Settings
You can set your default preferences for the universal translator following the next process:
- Navigate to the Admin menu.
- Select Upload Settings and scroll down to Captions and Languages.
- Add the default Caption Translation Languages and Dubbing Languages by clicking Add in each section.
- Enter your languages and click Add.
- Click Save in the Upload Settings page.
Captions and Audio
In the Captions and Audio admin section, you can set the default published / draft status for the captions and translations you generate at upload or directly from the Media module.
To do this, follow the next process:
- Navigate to the Admin menu.
- Select Captions and Audio and scroll down to the Default Track Status section.
- Select your default Auto-Caption Tracks and Caption Translations Tracks status.
AI Transparency Labels
You can toggle AI transparency labels on and customize the suffix that is appended to generated track labels, such as (Auto Generated). The suffix helps viewers identify AI generated content in the player.
- Navigate to the Admin menu.
- Select Captions and Audio and scroll down to AI Transparency Labels.
- Turn on the labels you want to apply and change the suffix in the corresponding text fields if needed. For Universal Translator workflows, use:
- Caption Translation - Adds the label to translated caption tracks.
- Dubbing - Adds the label to generated dubbed audio tracks.
- After generation, you can still edit the track label manually from the track details dialog if needed.
- The label is visible to viewers in the player track menu.
Dubbing Voice Type
Choose how dubbed audio tracks are created.
- Voice Cloning (default) - Generates dubbing using voices that closely match the original audio track.
- Synthetic Voice - Generates dubbing using a natural-sounding AI voice that does not replicate the original speaker.
To configure follow the next steps:
- Navigate to the Admin module.
- Select Captions and Audio and scroll down to the Translations & Dubbing section.
- Select Voice Cloning or Synthetic Voice.
Creating Language Groups
With language groups, you can organize sets of languages into reusable groups for captions and audio translations.
- In the Language Groups section, click Add.
- Enter your information and click Add.
Translation Glossaries and Custom Translation Instructions
Translation Glossaries and Custom Translation Instructions help you control how the Universal Translator translates your captions. Both are configured from the Admin menu, in the Captions and Audio page's Translations & Dubbing section.
Translation Glossaries
Translation Glossaries let you enforce specific translations for individual terms within a given language pair, so names and key terms (such as product names) stay consistent or remain untranslated. Each glossary applies to one source language → target language pair, and you can create multiple glossaries for different language pairs.
To create a Translation Glossary, follow the next steps:
- Next to Translation Glossaries, click New Glossary.
-
In the New Language-pair Glossary dialog, select the Source Language and Target Language, then click Create Glossary.
-
Click Add Term to add terms manually, or Upload CSV to add terms in bulk.
-
Enter the Source term and its corresponding Translation. Click Add new to add more term pairs, then click Save.
If you have created glossaries for more than one language pair, use the dropdown above the glossary to switch between them, or create another one.
Custom Translation Instructions
Custom Translation Instructions let you provide a single free-text prompt that is applied globally, across all languages, to every caption translation for your account. Use it to specify terms that should never be translated, or to guide tone and formality.
To set up Custom Translation Instructions, follow the next steps:
- In the Custom Translation Instructions field, enter your instructions (up to 4,000 characters).
-
Click Save.
Ingestion Configurations API
Manage UI-only ingestion preferences for captions and translations. These settings prefill fields in Video Cloud UI only; API clients can still send any values they need.
Endpoint
GET, PUT https://ingest.api.brightcove.com/v1/accounts/{account_id}/ingestion-configurations
Auth scopes: Same scopes used by the Dictionary feature's GET/PUT endpoints.
GET response object
| Key | Type | Description | Example |
|---|---|---|---|
languageGroups |
object<string, string[]> | Map of group name → list of caption translation language codes. Shown in UI dropdowns. | {"Europe":["fr-FR","de-DE","es-ES"]} |
publishByDefault |
object | Initial publish state for auto-generated tracks. Allowed keys: autoCaptions, captionTranslations (true=published, false=draft). |
{"autoCaptions":true,"captionTranslations":false} |
autoCaptionsLanguage |
string | Language code (BCP-47, e.g., en-US), or auto (detect), or off (disabled). |
"en-US" |
autoCaptionsLabel |
string | Label shown for the auto-captions language. | "English (Auto)" |
useDictionary |
boolean | Use the auto-captions dictionary to improve accuracy. | true |
captionsTranslations |
object<string, string> | Map of language code → label for caption translations. | {"en-US":"English","es-ES":"Spanish"} |
lockCaptionTranslations |
boolean | If true, UI cannot change default caption translation languages. | false |
audioTranslations |
string[] | List of supported audio translation languages (UI prefill only). | ["en-US","es-ES"] |
lockAudioTranslations |
boolean | If true, UI cannot change default audio translation languages. | false |
disableVoiceCloning |
boolean | If true, use synthetic voice instead of voice cloning by default for new dubbing runs. Can be overridden per request. | false |
PUT updates (partial)
Send only fields to change; unspecified fields remain untouched.
PUT /v1/accounts/{account_id}/ingestion-configurations
{
"languageGroups": { "Europe": ["fr-FR","de-DE","es-ES"] }
}
Ingest Endpoint Update
/v1/accounts/{account_id}/videos/{video_id}/ingest-requests — within transcriptions, you can specify
translation_languages (array of objects with srclang (BCP-47, required), and optional label, status (draft|published), dubbing, disable_voice_cloning (boolean), ai_transparency_label (string, for translated captions when supported), and ai_transparency_label_dubbing (string, for generated dubbed audio when supported)).
If dubbing is true, audio is generated as well. If disable_voice_cloning is true, a synthetic voice is used instead of voice cloning for dubbing.
{
"transcriptions": [{
"srclang": "en-US",
"label": "English",
"status": "published",
"translation_languages": [
{ "srclang": "es-ES", "label": "Spanish", "status": "draft", "dubbing": true, "disable_voice_cloning": true, "ai_transparency_label": "AI-generated captions", "ai_transparency_label_dubbing": "AI-generated audio" },
{ "srclang": "fr-FR", "label": "French", "status": "draft" }
]
}]
}
AI Translation Endpoints
Create a translation job
POST /v1/accounts/{account_id}/videos/{video_id}/ai/translation
Body includes target_languages: array of objects with srclang (BCP-47, required), optional label, optional status (draft|published), optional dubbing (boolean), optional disable_voice_cloning (boolean) to force a synthetic voice instead of voice cloning, optional ai_transparency_label (string, for translated captions when supported), and optional ai_transparency_label_dubbing (string, for dubbed audio when supported).
{
"target_languages": [
{ "srclang": "es-ES", "label": "Spanish", "status": "draft", "dubbing": true, "disable_voice_cloning": true, "ai_transparency_label": "AI-generated captions", "ai_transparency_label_dubbing": "AI-generated audio" },
{ "srclang": "de-DE", "label": "German", "status": "draft" }
]
}
List translation jobs
GET /v1/accounts/{account_id}/videos/{video_id}/ai/translation/jobs
Returns an object with a jobs array. input is the original request serialized as an escaped JSON string; error is omitted unless present.
{
"jobs": [
{
"job_id": "job_123",
"status": "processing",
"creation_date": "2025-08-20T14:03:22Z",
"input": "{\"target_languages\":[{\"srclang\":\"es-ES\",\"dubbing\":true}]}"
}
]
}
Supported languages
Supported languages for translation:
| Language | Code |
|---|---|
| Afrikaans (South Africa) | af-ZA |
| Akan | ak |
| Arabic (Standard) | ar |
| Arabic (UAE) | ar-AE |
| Arabic (Egypt) | ar-EG |
| Arabic (Qatar) | ar-QA |
| Arabic (Saudi Arabia) | ar-SA |
| Assamese (India) | as-IN |
| Aymara | ay |
| Azerbaijani (Azerbaijan) | az-AZ |
| Bashkir | ba |
| Belarusian (Belarus) | be-BY |
| Bulgarian (Bulgaria) | bg-BG |
| Bhojpuri | bho |
| Bambara | bm |
| Bengali (Bangladesh) | bn-BD |
| Tibetan | bo |
| Bodo | brx |
| Bosnian (Bosnia & Herzegovina) | bs-BA |
| Catalan (Spain) | ca-ES |
| Cebuano | ceb |
| Central Kurdish | ckb |
| Corsican | co |
| Czech (Czechia) | cs-CZ |
| Welsh (UK) | cy-GB |
| Danish (Denmark) | da-DK |
| German (Switzerland) | de-CH |
| German (Germany) | de-DE |
| Dogri | doi |
| Lower Sorbian | dsb |
| Divehi | dv |
| Ewe | ee |
| Greek (Greece) | el-GR |
| English (UK) | en-GB |
| English (US) | en-US |
| Esperanto | eo |
| Spanish (Latin America) | es-419 |
| Spanish (Spain) | es-ES |
| Spanish (US) | es-US |
| Estonian (Estonia) | et-EE |
| Basque | eu |
| Persian (Iran) | fa-IR |
| Finnish (Finland) | fi-FI |
| Fijian | fj |
| Faroese | fo |
| French (Canada) | fr-CA |
| French (France) | fr-FR |
| Western Frisian | fy |
| Irish (Ireland) | ga-IE |
| Scottish Gaelic (UK) | gd-GB |
| Galician (Spain) | gl-ES |
| Guarani | gn |
| Konkani | gom |
| Gujarati (India) | gu-IN |
| Hausa (Niger) | ha-NE |
| Hawaiian | haw |
| Hebrew (Israel) | he-IL |
| Hindi (India) | hi-IN |
| Hmong | hmn |
| Croatian (Croatia) | hr-HR |
| Upper Sorbian | hsb |
| Haitian Creole | ht |
| Hungarian (Hungary) | hu-HU |
| Armenian (Armenia) | hy-AM |
| Indonesian (Indonesia) | id-ID |
| Western Canadian Inuktitut | ikt |
| Iloko | ilo |
| Icelandic (Iceland) | is-IS |
| Italian (Italy) | it-IT |
| Inuktitut | iu |
| Inuktitut (Latin) | iu-Latn |
| Japanese (Japan) | ja-JP |
| Javanese (Indonesia) | jv-ID |
| Georgian (Georgia) | ka-GE |
| Kazakh (Kazakhstan) | kk-KZ |
| Kurdish (Northern) | kmr |
| Kannada (India) | kn-IN |
| Language | Code |
|---|---|
| Korean (Korea) | ko-KR |
| Krio | kri |
| Kashmiri | ks |
| Kyrgyz (Kyrgyzstan) | ky-KG |
| Latin | la |
| Luxembourgish (Luxembourg) | lb-LU |
| Lingala (DR Congo) | ln-CD |
| Lithuanian (Lithuania) | lt-LT |
| Mizo | lus |
| Latvian (Latvia) | lv-LV |
| Literary Chinese | lzh |
| Maithili | mai |
| Malagasy | mg |
| Māori | mi |
| Macedonian (North Macedonia) | mk-MK |
| Malayalam (India) | ml-IN |
| Mongolian | mn |
| Mongolian (Traditional) | mn-Mong |
| Manipuri (Meitei Mayek) | mni-Mtei |
| Marathi (India) | mr-IN |
| Malay (Malaysia) | ms-MY |
| Maltese | mt |
| Burmese | my |
| Nepali (Nepal) | ne-NP |
| Dutch (Netherlands) | nl-NL |
| Norwegian (Norway) | no-NO |
| Chichewa (Malawi) | ny-MW |
| Oromo | om |
| Odia | or |
| Querétaro Otomi | otq |
| Punjabi (India) | pa-IN |
| Polish (Poland) | pl-PL |
| Pashto (Afghanistan) | ps-AF |
| Portuguese (Brazil) | pt-BR |
| Portuguese (Portugal) | pt-PT |
| Quechua | qu |
| Romanian (Romania) | ro-RO |
| Russian (Russia) | ru-RU |
| Rundi | run |
| Kinyarwanda | rw |
| Sanskrit | sa |
| Sindhi (Pakistan) | sd-PK |
| Sinhala | si |
| Slovak (Slovakia) | sk-SK |
| Slovenian (Slovenia) | sl-SI |
| Samoan | sm |
| Somali (Somalia) | so-SO |
| Albanian | sq |
| Serbian (Serbia) | sr-RS |
| Southern Sotho | st |
| Sundanese | su |
| Swedish (Sweden) | sv-SE |
| Swahili | sw |
| Tamil (India) | ta-IN |
| Telugu (India) | te-IN |
| Tajik | tg |
| Thai (Thailand) | th-TH |
| Tigrinya | ti |
| Turkmen | tk |
| Tagalog (Philippines) | tl-PH |
| Klingon | tlh |
| Tswana | tn |
| Tongan | to |
| Turkish (Turkey) | tr-TR |
| Tsonga | ts |
| Tatar | tt |
| Tahitian | ty |
| Uyghur | ug |
| Ukrainian (Ukraine) | uk-UA |
| Urdu (India) | ur-IN |
| Uzbek | uz |
| Vietnamese (Vietnam) | vi-VN |
| Yiddish | yi |
| Yucatec Maya | yua |
| Chinese (Simplified) | zh-CN |
| Chinese (Traditional) | zh-TW |
| Chinese (Cantonese) | zh-yue |
Supported languages for dubbing:
| Language | Code |
|---|---|
| Afrikaans | af |
| Arabic | ar |
| Assamese | as |
| Azerbaijani | az |
| Belarusian | be |
| Bulgarian | bg |
| Bengali | bn |
| Bosnian | bs |
| Catalan | ca |
| Czech | cs |
| Welsh | cy |
| Danish | da |
| German | de |
| Greek | el |
| English | en |
| Spanish | es |
| Estonian | et |
| Persian | fa |
| Finnish | fi |
| French | fr |
| Irish | ga |
| Scottish Gaelic | gd |
| Galician | gl |
| Gujarati | gu |
| Hausa | ha |
| Hebrew | he |
| Hindi | hi |
| Croatian | hr |
| Hungarian | hu |
| Armenian | hy |
| Indonesian | id |
| Icelandic | is |
| Italian | it |
| Japanese | ja |
| Javanese | jv |
| Georgian | ka |
| Kazakh | kk |
| Language | Code |
|---|---|
| Kannada | kn |
| Korean | ko |
| Kyrgyz | ky |
| Luxembourgish | lb |
| Lingala | ln |
| Lithuanian | lt |
| Latvian | lv |
| Maori | mi |
| Macedonian | mk |
| Malayalam | ml |
| Marathi | mr |
| Malay | ms |
| Nepali | ne |
| Dutch | nl |
| Norwegian | no |
| Nyanja | ny |
| Punjabi | pa |
| Polish | pl |
| Pashto | ps |
| Portuguese | pt |
| Romanian | ro |
| Russian | ru |
| Sindhi | sd |
| Slovak | sk |
| Slovenian | sl |
| Somali | so |
| Serbian | sr |
| Swedish | sv |
| Swahili | sw |
| Tamil | ta |
| Telugu | te |
| Thai | th |
| Tagalog | tl |
| Turkish | tr |
| Ukrainian | uk |
| Urdu | ur |
| Vietnamese | vi |
| Chinese | zh |
FAQs
- Processing Time: Can take several minutes. When ready, captions and audio tracks will appear in the video details page.
- Credit Consumption: Based on minutes of video processed. Contact your account team for more details.