AI Video Dubber - Translate & Re-Voice Any Video
Pricing
Pay per event
AI Video Dubber - Translate & Re-Voice Any Video
Turn one video into a global catalog. $0.12 per dubbed minute, flat rate, no subscription. It transcribes the speech, translates it into any of 23 languages, generates a natural AI voice-over timed to the original and muxes it back into a finished video.
Pricing
Pay per event
Rating
5.0
(1)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
4
Total users
0
Monthly active users
4 days ago
Last modified
Categories
Share
AI Video Dubber & Translator
Takes a video in one language and gives you back the same video speaking another. It transcribes the original speech, translates the text, generates a fresh AI voiceover timed to the original pacing, and muxes that audio back onto the video. Built for creators, localization teams, and anyone who needs a quick second-language cut without booking voice talent.
There is no voice cloning here. The output uses a standard synthetic voice, so you don't need anyone's consent to ship it.
$0.12 per dubbed minute, plus $0.0000125 each time a run starts. Flat rate — no volume tiers, no plan gates — and you are charged only for minutes actually dubbed.
How it works
Four stages, in order:
- Transcribe — the source audio is pulled out and sent to Whisper, which returns time-coded segments. Set
sourceLanguagetoautoand it detects the spoken language for you. - Translate — each segment is translated by a chat model (
gpt-4o-miniby default, overridable viatranslationModel), segment by segment so the timings survive. - Speak — OpenAI TTS renders the translated text in the voice you picked.
- Assemble — the generated clips are fitted back to the original segment timings, then muxed onto the source video with ffmpeg. If
burnSubtitlesis on, the translated lines are rendered into the frame as styled ASS subtitles rather than added as a soft track.
Input
| Field | Required | Notes |
|---|---|---|
videoUrl | yes | Public direct URL to the source video (.mp4, .mov, .webm). You host it; nothing is scraped. |
openaiApiKey | yes | Your own OpenAI key. Used for transcription, translation and TTS. Marked secret in the schema. |
targetLanguage | no | 23 options: Spanish, French, German, Italian, Portuguese, Hindi, Arabic, Russian, Japanese, Korean, Chinese, Dutch, Polish, Turkish, Indonesian, Vietnamese, Thai, Swedish, Ukrainian, Romanian, Greek, Hebrew, Filipino. Defaults to es. |
sourceLanguage | no | ISO code, or auto to detect. Default auto. |
voice | no | alloy, echo, fable, onyx (deep male, default), nova (female), shimmer (female). |
burnSubtitles | no | Overlay the translated subtitles onto the video. On by default. |
ttsModel | no | tts-1 (fast, default) or tts-1-hd (higher quality). |
translationModel | no | Chat model used for translation. Default gpt-4o-mini. |
baseUrl | no | Any OpenAI-compatible base URL, if you route through a proxy or a compatible provider. |
Output
One dataset row per run, plus the media in the run's key-value store.
| Field | What it is |
|---|---|
ok | Whether the dub completed. |
videoUrl | The source you passed in. |
sourceLanguage | The language actually detected (or the one you forced). |
targetLanguage, voice | What was produced, echoed back. |
segments | How many timed speech segments were transcribed, translated and re-voiced. |
durationSeconds | Source duration, rounded to the second. This is what billing is derived from. |
output.mp4Key | Key-value-store key of the finished video, e.g. dubbed-es-1754689200000.mp4. |
output.srtKey | Key of the translated .srt, written on every run whether or not subtitles were burned in. |
output.mp4Url | Direct URL to the finished MP4 when the store exposes one. |
processingSeconds | Wall-clock time the run took. |
Example
{"videoUrl": "https://example.com/clip.mp4","targetLanguage": "es","sourceLanguage": "auto","voice": "onyx","burnSubtitles": true,"ttsModel": "tts-1","openaiApiKey": "sk-..."}
Pricing
| Event | When | Price |
|---|---|---|
| Actor start | Once per run, per GB of run memory | $0.0000125 |
| Dubbed minute | Per minute of dubbed video | $0.12 |
Minutes are rounded up to the next whole minute, with a one-minute minimum — a 90-second clip is charged as two minutes, $0.24. The dub-minute event fires only after the finished MP4 has been written, so a run that fails partway through costs you the start fee and nothing else.
Run it without a videoUrl or without a key and it returns a single row labelled _sample: true showing the output shape. Sample runs are not charged for dubbed minutes.
Your OpenAI usage is billed separately by OpenAI, on your own key. That covers Whisper, the translation model and TTS.
Notes and limits
- The voiceover is fitted to the original segment timings. If the target language is much wordier than the source — English into German is the usual offender — pacing on long segments can feel rushed.
- Burned subtitles are rendered into the pixels and cannot be toggled off in a player. Turn
burnSubtitlesoff and use the.srtfrom the key-value store if you want a soft track. - One video per run. Queue several runs to batch a catalog.
- The source must be a direct, publicly reachable file URL. Page URLs, playlists and login-gated links will not download.
