Subtitle Translator — SRT & VTT into Any Language avatar

Subtitle Translator — SRT & VTT into Any Language

Pricing

from $50.00 / 1,000 subtitle languages

Go to Apify Store
Subtitle Translator — SRT & VTT into Any Language

Subtitle Translator — SRT & VTT into Any Language

Translate SRT and VTT subtitles into many languages in one run. Paste your subtitle file, or a video URL to transcribe first. Pick your target languages. You get one SRT and one VTT per language. Every original cue timing stays exact. $0.05 per language, flat rate.

Pricing

from $50.00 / 1,000 subtitle languages

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

4 days ago

Last modified

Share

Subtitle Translator: turn one SRT or VTT file into as many languages as you need

Paste an SRT or VTT file, list the languages you want, and get back a finished SRT, VTT and plain text file for each one. Every cue keeps its original start and end time to the millisecond, so the files drop straight back onto the same video.

You bring your own OpenAI key. The translation is billed to your key by OpenAI, separately from what you pay here.

InputSRT or VTT text you paste, or a public video or audio URL to transcribe first
OutputOne row per target language, with SRT, VTT and .txt files in the run's storage
CeilingNo cap on languages. The video route runs out at roughly 13 minutes of audio
Account neededYour own OpenAI API key
Price$0.05 per language, flat on every plan

🔤 What Subtitle Translator does

It reads your subtitle file, splits it into cues, and sends the lines for one language to the model in a single call. The translated lines go back onto the original timings and come out as three files: a .srt, a .vtt and a plain .txt with the whole script as running text.

Ask for five languages and you get five rows, five sets of files, and five separate model calls. Nothing is shared between them, so one language coming out badly does not affect the others.

If you have no subtitle file, give it a public video or audio URL instead. It pulls the file, lifts the audio, and transcribes it with timestamps before translating. That route needs the same key.

📥 What you give it

{
"subtitles": "1\n00:00:00,000 --> 00:00:02,400\nWelcome back to the channel.\n",
"targetLanguages": ["es", "fr", "de"],
"sourceLanguage": "auto",
"outputFormat": "both",
"openaiApiKey": "sk-..."
}
FieldDefaultWhat it is
subtitlesbox starts with a two-cue sampleYour SRT or VTT text, pasted in. SRT index lines and the WEBVTT header are both handled.
videoUrlnoneUsed only when subtitles is empty. A public video or audio URL to transcribe first.
targetLanguages["es"] when the field is absent, box starts at es, fr, deISO codes. One row and one set of files per code.
sourceLanguageautoThe language going in. auto lets the transcription detect it.
outputFormatbothboth, srt or vtt. The .txt is always written either way.
openaiApiKeynoneYour own key. Marked secret, so it is not stored with the run input.
translationModelgpt-4o-miniAny chat model your key can reach.
baseUrlhttps://api.openai.com/v1Point it at any OpenAI-compatible endpoint.

If both subtitles and videoUrl are filled in, the pasted subtitles win and the video is never fetched. Clear the box if you meant to transcribe.

📤 What you get back

One row per language. Shown with the long storage URLs cut short:

{
"ok": true,
"sourceLanguage": "auto",
"language": "es",
"languageName": "Spanish",
"cues": 2,
"srtKey": "subtitles-es-1758412903118.srt",
"srtUrl": "https://api.apify.com/v2/key-value-stores/.../records/subtitles-es-...",
"vttKey": "subtitles-es-1758412903118.vtt",
"vttUrl": "https://api.apify.com/v2/key-value-stores/.../records/subtitles-es-...",
"txtKey": "transcript-es-1758412903118.txt",
"txtUrl": "https://api.apify.com/v2/key-value-stores/.../records/transcript-es-...",
"text": "Bienvenido de nuevo al canal.",
"preview": ["Bienvenido de nuevo al canal."]
}
FieldWhat it is
srtUrl, vttUrl, txtUrlDirect download links to the finished files in this run's key-value store. vttUrl is absent when outputFormat is srt, and the other way round.
textThe whole translation as one paragraph, with the timings stripped. Handy for a description or a blog post.
cuesHow many subtitle cues the file ended up with. It always matches the source count.
languageNameThe English name of the language. For a code the actor does not have a name for, this repeats the code itself.
previewThe first two translated lines, so you can eyeball the result without opening a file.

🧾 Reading the output

Every row in the dataset is a finished language. Sample and notice rows are kept out of it deliberately: they go to a record called SAMPLE_AND_NOTICES in the run's key-value store, so they never sit in your results and no result is billed for them.

You get that sample instead of a real translation in two cases:

What happenedWhat you do
Neither subtitles nor videoUrl was filled inPaste a subtitle file, or give a video URL.
No openaiApiKey was suppliedAdd your key and run again.

There are no error rows. If something goes wrong partway through, the run fails and the log says why. Languages already finished before that point stay in the dataset.

▶️ How to run it

  1. Open Subtitle Translator and click Try for free.
  2. Paste your file into Subtitles (SRT or VTT), replacing the sample text that is already there.
  3. Type the codes you want into Target languages, one per line.
  4. Put your key into OpenAI API key (BYO), then click Start.
  5. Open the run's Key-value store tab to download the files, or read the URLs off the dataset.

💰 How much does it cost?

$0.05 per language. Flat on every Apify plan, no volume tiers. Three languages in one run is three rows.

That is what you pay here. Your OpenAI key is charged separately by OpenAI for the model calls, at whatever rate your account is on. Sample and notice rows are not results and are not billed.

💡 What people use it for

  • Shipping one video with subtitle tracks in six languages, without re-cutting anything.
  • Turning an existing English caption file into the Spanish and Portuguese versions for the same upload.
  • Getting the flat .txt out of a caption file to reuse as a description or an article draft.
  • Transcribing a short interview from a URL and getting the translated tracks in the same run.

🚧 What it does not do

  • It does not pay for the model. Translation and transcription run on your own key, and you see that cost on your OpenAI bill.
  • Long files can come back short. All the cues for one language go in a single model call, so a very long subtitle file can hit the model's reply limit. When the reply comes back with fewer lines than went in, the missing ones are filled with the untranslated original rather than left blank. Split a feature-length file and run it in parts.
  • The video route is for short clips. Audio is uploaded whole for transcription, which runs out at roughly 13 minutes.
  • Styling is dropped. Italics, positioning and colour tags are stripped during parsing. You get plain cues back.
  • Timings are copied, not re-fitted. A translation that is wordier than the source stays on the original cue and can read fast on screen.
  • A failure partway stops the run. Languages already written stay in the dataset and are billed; the ones after it are not produced.
  • No language cap. Twenty codes is twenty rows and twenty model calls, so check the list before you start.

🧭 Which subtitle tool do you need?

If you wantUse
Subtitles you already have, in more languagesThis one
A video or audio file turned into a transcript and caption filesVideo & Audio Transcriber
A whole video dubbed with a new voice trackAI Video Dubber
Captions burned into the pictureAuto Caption Burner
The source video and its caption file downloadedYouTube Downloader Pro

❓ Questions people ask

Do the timings change? No. Start and end times are carried across exactly as they were parsed, down to the millisecond.

Which languages work? Any language the model handles. Codes like es, fr, de, hi, ar, ja and zh also get a readable name on the row; anything else still translates, it just shows the raw code in languageName.

Can I use a different model or provider? Yes. Set translationModel to any chat model your key can reach, and baseUrl to any OpenAI-compatible endpoint.

Can I run it without a key? You can press Start and see the shape of the output, but the rows will be labelled samples in the key-value store rather than a real translation.

Why did some lines come back in the original language? The model returned fewer lines than were sent, and the gaps were filled with the source text so the file still lines up. That is the sign to split the file into shorter chunks.

Can I schedule it? Yes, like any actor on Apify. It is more commonly run once per video.

🆘 If something breaks

Open the Issues tab on the actor page. Send the run ID and, if you can, the first few cues of the file you pasted. The run log names the language it was on when it stopped.