AI Subtitle & Document Translator — SRT, VTT, DOCX
Pricing
from $10.80 / 1,000 subtitles translated (fast engine)s
AI Subtitle & Document Translator — SRT, VTT, DOCX
Translate SRT and VTT subtitles into 110 languages with every timestamp preserved byte-for-byte, plus plain text and DOCX/PPTX documents that keep their original layout. Two engines: a fast affordable one and a professional high-accuracy one. Bulk input, per-character billing.
Pricing
from $10.80 / 1,000 subtitles translated (fast engine)s
Rating
0.0
(0)
Developer
SIÁN OÜ
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Share
Translate subtitle files, plain text and office documents into 110 languages — without ever touching a timestamp.
Most translation tools treat an .srt file as a wall of text. They re-generate the timing track on the way out, and you find out three episodes later that cue 47 drifted by 200 milliseconds. This actor never regenerates a timestamp it was handed. Timings, cue numbers, blank lines, byte-order marks and Windows line endings are copied through as raw bytes, and every file is re-parsed and compared against its source before it is delivered. A file whose timings did not survive is discarded rather than shipped — and you are not charged for it.
What it does
| Mode | Input | Output |
|---|---|---|
| Subtitles | .srt and .vtt files, by URL or upload | Translated subtitle files, timings byte-identical |
| Text | One string, or hundreds | Translated strings, repeats charged once |
| Documents | .docx and .pptx, by URL or upload | Translated documents with layout, styles, tables and images intact |
Every source item is translated into every language you pick, and every combination is one row in the dataset with its own download link.
Why the subtitle mode is different
Timings are never recalculated. They are opaque strings that pass straight through. 100-hour timestamps, , and . separators, and cue positioning coordinates all survive untouched.
A cue is never silently dropped. Language models skip, merge and reorder list items. This actor matches every returned translation to an explicit cue id — never to its position in an array — retries anything missing, and as a last resort keeps the cue's original text and reports it in partialCues. Your file always has the same number of cues it started with.
WebVTT structure is respected. The WEBVTT header, NOTE comments, STYLE blocks (which are CSS — translating them corrupts the file) and REGION definitions pass through untranslated and unbilled. Cue identifiers and cue settings such as line:0 position:20% align:start are re-emitted exactly.
Formatting survives. Italics, bold and colour tags stay wrapped around the same words they wrapped in the source. Positioning overrides like {\an8}, voice spans like <v Roger Bingham> and class spans like <c.loud> are lifted out before translation and restored afterwards.
Neighbouring cues are used as free context. Two cues either side of each batch are sent to the engine as context — not translated, not billed. That is what fixes the pronoun and gender agreement that breaks when a sentence spans two cues.
Lines are re-wrapped, not left ragged. German runs about 30% longer than English. lineWrap: preserve keeps the source's line count and only adds a line when one would exceed your character limit (42 by default — the Netflix and BBC readability standard).
Overlapping cues are reported, never "fixed". If the source has out-of-order or overlapping timings, you get an overlappingCues count and the file exactly as authored.
Two engines
| Fast | Professional | |
|---|---|---|
| Best for | back-catalogues, drafts, high volume | published output, client work, documents |
| Cost per 1,000 characters | $0.008 text · $0.012 subtitles | $0.12 text · $0.15 subtitles |
| Formality control | applied through instructions, every language | applied natively on the 15 languages that distinguish it |
| Documents | — | .docx and .pptx |
| Free Apify plans | ✅ | — |
Pick Fast when you are working through a hundred hours of archive. Pick Professional when the output goes in front of a customer.
Billing you can check yourself
Charging is per 1,000 source characters, per target language — and the characters are banked across the whole run rather than rounded up per item.
That distinction is the whole point. Translating 500 interface labels of 40 characters each is 20,000 characters of work. Rounding each item up to a whole 1,000 would bill 500 events. This actor bills 20, plus at most one rounding event per language for the leftover. Every row carries billedCharacters and billedEvents, and the HTML run report breaks the total down per event and per language.
Repeats are charged once. A recurring station ident, a repeated UI string, a chorus line — translated once, delivered everywhere it appeared, billed once.
Nothing but cue text is counted. Timestamps, cue numbers, the WEBVTT header, NOTE/STYLE/REGION blocks and the free context window are never billed.
maxSpendUsd is a real pre-flight brake. The run is priced before the first charge and aborts with an explanation if the estimate exceeds your cap. You are not charged for a run that stops there.
Documents cost differently — and the row says so
Office documents are billed by the upstream engine with a 50,000-character minimum per file, per language, whatever the real length. A two-page contract and a fifty-page contract both cost the same $2.49. Anything above 50,000 characters is charged as overage.
Every document row reports minimumApplied, the authoritative billedCharacters and the overageEvents charged, so the number on your invoice is one you can reconstruct.
Input
| Field | Notes |
|---|---|
mode | text · subtitles · document |
engine | ai (fast) · deepl (professional, paying plans) |
targetLanguages | 110 codes. Each one is a separate translation and a separate charge |
sourceLanguage | auto by default |
text / texts | text mode |
subtitleUrls / subtitleFiles | .srt and .vtt, links or uploads |
documentUrls / documentFiles | .docx and .pptx, up to 30 MB |
outputFormat | same · srt · vtt — conversion changes the decimal separator, never a digit |
lineWrap | preserve · single · none |
maxCharsPerLine | default 42 |
formality | default · more · less |
preserveTags | on by default |
maxSpendUsd | pre-flight cost ceiling |
Example
{"mode": "subtitles","engine": "ai","targetLanguages": ["DE", "ES", "PT-BR", "JA"],"sourceLanguage": "EN","subtitleUrls": ["https://example.com/episode-04.srt"],"lineWrap": "preserve","maxCharsPerLine": 42,"maxSpendUsd": 5.00}
Output
One row per source item per target language:
translatedTextfor text mode, orsubtitleUrl/documentUrlfor a downloadable filesubtitleTextinline while the file stays under 100 KBcueCount,translatedCueCount,partialCues,overlappingCuestimingsPreservedandtagsPreserved— the integrity result for that exact filesourceCharacters,billedCharacters,billedEvents
Plus report.html in the key-value store: the run summary with the full billing breakdown, written even if the run fails.
Free plan limits
Free Apify accounts get the fast engine, one target language, 5 items and 20,000 source characters per run. The professional engine and document mode require a paying plan.
Works well with
Subtitle mode takes exactly what these actors produce:
- Transcribe Podcast to Text — generates SRT and VTT from audio
- TikTok AI Transcript Extractor
- Instagram AI Transcript Extractor
- Best YouTube Video Downloader
Transcribe once, then translate the timed output into every market you sell into.