AI Video Dubber - Translate & Re-Voice a Video
Pricing
from $114.00 / 1,000 dubbed minutes
AI Video Dubber - Translate & Re-Voice a Video
Dub a video you host into one of 23 languages. It transcribes the speech, translates it and lays an AI voice over the picture, timed to the original lines, with a translated SRT. Runs on your own OpenAI key. $120.00 per 1,000 minutes of video ($0.12 a minute, rounded up).
Pricing
from $114.00 / 1,000 dubbed minutes
Rating
5.0
(1)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
9
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Dub a video into another language with an AI voice timed to the original lines: give it a direct link to a video you host, pick one of 23 languages, and you get back a dubbed MP4 and a translated SRT.
Two things to be clear about. It runs on your own OpenAI key, so the transcription, the translation and the voice all land on your OpenAI bill on top of the charge here. And the original audio is gone: this is a replacement voice track, not a mix, and there is no voice cloning and no lip sync.
| Input | A direct link to a video file you host |
| Output | One dubbed MP4, a translated SRT, and one row describing them |
| Ceiling | One video and one language per run. Sources past roughly 13 minutes of audio are likely to fail |
| Account needed | Your own OpenAI API key |
| Price | $120.00 per 1,000 minutes of source video, so $0.12 a minute, rounded up, on the Free plan, a little less on paid plans. The free plan's $5 a month covers about 40 minutes. OpenAI bills your key separately |
🔍 What AI Video Dubber does
It downloads your file, pulls the audio out and sends it for transcription with timestamps, so every line of speech comes back with a start and an end.
Those lines are translated in one pass, which keeps them consistent with each other rather than translating each in isolation. Then each translated line is spoken separately and dropped back at the timestamp its original sat on, so the dub follows the picture instead of drifting.
Where a translated line runs longer than the gap it has to fit into, it is sped up to make room, up to three times. Past that it will not compress any further, and the next line starts while it is still speaking.
23 languages: Spanish, French, German, Italian, Portuguese, Hindi, Arabic, Russian, Japanese, Korean, Chinese, Dutch, Polish, Turkish, Indonesian, Vietnamese, Thai, Swedish, Ukrainian, Romanian, Greek, Hebrew and Filipino.
📋 What data you get from each dubbed video
| What you get | Field |
|---|---|
| The dubbed MP4, saved in the run's key-value store, and a direct link to it | output.mp4Key, output.mp4Url |
| The translated subtitles as an SRT file, in the same store | output.srtKey |
| The language that was spoken, as detected or as you set it | sourceLanguage |
| The language and the voice of the dub | targetLanguage, voice |
| How many lines of speech were found and voiced | segments |
| The length of the source video in seconds, which the charge is worked out from | durationSeconds |
| How long the run took | processingSeconds |
| The link you gave it | videoUrl |
▶️ How to dub a video into another language
- Put your video somewhere with a direct download link. This does not fetch from video sites.
- Open AI Video Dubber and click Try for free.
- Paste your key into OpenAI API key (BYO) and your link into Video URL.
- Pick Target language and Voice, and decide on Burn translated subtitles.
- Click Start, then take the MP4 and the SRT from the run's Storage tab.
Start it without a key and you get the free sample row instead, which shows the shape.
💰 How much does it cost to dub a video?
$0.12 per minute of source video on the Free plan, $0.118 on Starter, $0.116 on Scale and $0.114 on Business. Minutes are rounded up, so a 20-second clip counts as one and a 3-minute-10-second one as four. On the free plan, the $5 Apify gives you each month covers about 40 minutes.
A run that fails delivers no video and is not charged for one, and the sample row is free. Set a maximum cost on the run that cannot pay for the whole video, and it stops before dubbing anything and tells you what the video would have cost.
OpenAI bills your own key separately for the transcription, the translation and every line of
speech, and tts-1-hd costs you more there than tts-1.
📥 What you give it
{"videoUrl": "https://yourdomain.com/clips/interview.mp4","targetLanguage": "es","voice": "onyx","burnSubtitles": true}
| Field | Default | What it is |
|---|---|---|
videoUrl | none | A public direct link to an .mp4, .mov or .webm. You host the file. The form prefills an example.com address, which is a placeholder, not a default: leave it there with a key set and the run fails on a missing file. |
targetLanguage | es | The language to dub into, as a code from the list above. |
sourceLanguage | auto | The spoken language of the original. Leave it on auto unless detection gets it wrong. |
voice | onyx | alloy, echo, fable, onyx, nova or shimmer. onyx is the deep male one, nova and shimmer are female. |
burnSubtitles | true | Overlays the translated subtitles on the picture. That means re-encoding the video, so it is slower. Turn it off and the picture is copied untouched. |
openaiApiKey | none | Your own OpenAI key, used for all three steps. Marked secret. |
ttsModel | tts-1 | tts-1 is quick, tts-1-hd sounds better and costs you more on your own bill. |
translationModel | gpt-4o-mini | The chat model that does the translating. Any model name that works on your host. |
baseUrl | none | Advanced. Any OpenAI-compatible host. Empty means https://api.openai.com/v1. |
📤 What you get back
One row, and two files in the run's key-value store: dubbed-es-1786411663909.mp4 and
subtitles-es-1786411663909.srt, with the language code in the name.
No run on record has delivered a dub with a customer's key, so rather than type out a plausible
row, here is the real sample row a keyless run wrote on 2 October 2026. A delivered row has the same
fields with real numbers, the three output values filled in, and no _sample, _notice or
reason.
{"ok": true,"_sample": true,"_notice": "SAMPLE OUTPUT - provide a public \"videoUrl\" and \"openaiApiKey\" for a real dubbed video.","reason": "missing_api_key","videoUrl": "https://example.com/video.mp4","sourceLanguage": "auto","targetLanguage": "es","voice": "onyx","segments": 2,"durationSeconds": 12,"output": {"mp4Key": null,"srtKey": null,"mp4Url": null},"processingSeconds": 0}
| Field | How to read it |
|---|---|
segments, durationSeconds | On a delivered dub, the lines voiced and the source length. On the sample row they are fixed placeholders, not measurements. |
durationSeconds | The source video's length, rounded. The charge is worked out from this, rounded up to whole minutes. |
output.mp4Url | A direct link to the dubbed file. mp4Key and srtKey are the file names in the store. |
sourceLanguage | What the speech was detected as, or what you set. |
🧾 Reading the output
Three kinds of row can appear, and two of them look alike in the table, which is the thing to watch.
| Row | How to spot it | Billed |
|---|---|---|
| A finished dub | ok: true and a file name in output.mp4Key | yes |
| The sample row | _sample: true, a reason, and empty output values | no |
| A stop at your cost limit | ok: false, _diagnostic: true, reason: "max_cost_reached" | no |
The sample row carries ok: true, so the Overview table will not tell it apart from a real
result. Check _sample or output.mp4Key before you trust a row.
| Reason | What it means |
|---|---|
missing_video_url | Sample row: no Video URL was given. |
missing_api_key | Sample row: no OpenAI key was given. |
max_cost_reached | The maximum cost set for the run could not pay for the whole video, so nothing was dubbed. message says what it would have cost. |
If anything else in the chain fails, the run stops and is marked failed. There is no partial row and no charge for a dub that was never made. The log names the step: the download, the transcription, the translation or the voice.
When the translation comes back with fewer lines than there were segments, the gaps are filled with the original text, so those lines get spoken in the source language by the dubbing voice. Listen through before you publish.
In the Overview table, output shows as a nested object rather than a link, so open the row or go
to the run's Storage tab to get the file.
💡 What people use it for
- Putting an existing channel's back catalogue into a second language without re-recording anything.
- Course and training video localisation, where the SRT matters as much as the audio.
- Ads and product clips that need a Spanish or Arabic cut for one campaign.
- Getting a rough dub in front of a client to decide whether a proper voice session is worth booking.
Your own YouTube video in a second language, in two runs:
- Run YouTube Downloader Pro on the video
and copy
mediaUrlfrom its row. - Paste that link into Video URL here, pick the Target language and start it.
🚧 What it does not do
- No voice cloning and no lip sync. One of six stock voices reads the whole thing, and mouths will not match.
- The original audio is replaced, not mixed underneath. Music and effects that were on the original track go with it.
- Keep sources short. The whole soundtrack goes up for transcription in one piece, so anything past roughly 13 minutes of audio is likely to fail at that step.
- One language and one video per run. Dubbing into three languages is three runs.
- It does not fetch from video sites. A direct file link to something you host, nothing else.
- A line that will not fit can overlap the next one. Speed-fitting stops at three times, and after that two voices can be heard together for a moment.
- No speech, no dub. A video with no audio track, or with nothing spoken in it, stops the run.
- It is not an official tool of any platform or company named on this page. Dami's Studio is independent and is not affiliated with or endorsed by any of them.
🧭 Which AI video actor do you need?
| If you want | Use |
|---|---|
| A video re-voiced in another language | This one |
| Subtitles translated without touching the audio | Subtitle Translator |
| A plain transcript of what was said | Video & Audio Transcriber |
| Word by word captions burned on your own video | Auto Caption Burner |
| A voiceover from text, with no video involved | AI Text to Speech Voiceover |
| Your own YouTube video as a file link you can dub | YouTube Downloader Pro |
❓ Questions people ask
Do I need my own OpenAI key to dub a video?
Yes. Without it you get the sample row rather than a dub.
Can I keep the original audio underneath the dub?
No. The dub replaces the audio track.
Will the dub sound like the original speaker?
No. It is one of six stock voices, picked by you.
How long does dubbing a video take?
It depends on how many lines of speech there are, since each is voiced one at a time, and burning subtitles adds a full re-encode on top.
Can I call it from code or connect it to an AI assistant?
Yes. The API tab has ready-made code for
Python, JavaScript and the command line. For Claude, ChatGPT or another MCP client, connect
https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/ai-video-dubber. Either way the run
happens on your Apify account at the same price, and OpenAI bills your key as usual.
🆘 If something breaks
Open the Issues tab on the actor page. Include the run ID and your source link, and say which step the log stopped at, since that usually points straight at the cause.


