SRT Subtitles Generator — video & audio to SRT/VTT captions
Pricing
Pay per event
SRT Subtitles Generator — video & audio to SRT/VTT captions
Turn audio or video into ready-to-use .srt and .vtt subtitle files. Whisper runs inside the Actor — no API key. Cues are re-segmented to your characters-per-line, lines-per-cue and max-duration limits, with a sync offset. 99+ languages. Failed or silent files are never billed.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Dos
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Send audio or video URLs and get back finished .srt and .vtt files,
ready to drop into a player, an editor or a CDN. Whisper runs inside the
Actor (faster-whisper, int8, CPU), so there is no API key, no external
service, and no per-provider markup. 99 languages, auto-detected. Optional
translation to English.
The point of this Actor is the cues, not the transcription. Raw Whisper segments are transcription units — they routinely run 15–20 seconds and 200+ characters, which is unreadable as an on-screen caption. This Actor re-segments the transcript into real subtitle cues that obey a characters-per-line limit, a lines-per-cue limit and a maximum cue duration, splitting on word boundaries and using per-word timings so the cut lands where the speaker actually pauses.
What you get
One dataset item per media file, plus the files themselves in the run's key-value store:
{"url": "https://example.com/interview.mp4","status": "ok","srt_url": "https://api.apify.com/v2/key-value-stores/…/001-interview.mp4.srt","vtt_url": "https://api.apify.com/v2/key-value-stores/…/001-interview.mp4.vtt","language": "en","duration_seconds": 612.4,"billed_minutes": 11,"n_cues": 138,"n_words": 1642,"cues": [{ "start": 0.0, "end": 3.24, "text": "Welcome back to the show.","lines": ["Welcome back to the show."] }],"srt": "1\n00:00:00,000 --> 00:00:03,240\nWelcome back to the show.\n","vtt": "WEBVTT\n\n00:00:00.000 --> 00:00:03.240\nWelcome back to the show.\n"}
Subtitle shape
| Field | Default | What it does |
|---|---|---|
max_chars_per_line | 42 | broadcast width; use 32 for narrow mobile players |
max_lines_per_cue | 2 | 1 is common for social video |
max_cue_seconds | 6 | longer cues are split on a word boundary |
min_cue_seconds | 1 | stretches flash-cues, never into the next one |
offset_seconds | 0 | shift every timestamp; negative pulls subtitles earlier |
Every word survives re-segmentation — splitting never drops or truncates text. A single word longer than the line width gets its own overlong line rather than being cut in half.
offset_seconds is the fix for a caption track that drifts against the
video: set -1.5 to pull everything 1.5 seconds earlier. Timestamps never go
negative.
Sources
Direct media files — mp3, m4a, aac, ogg, opus, wav, flac, mp4, webm and anything else FFmpeg can decode. Up to 250 MB per file, 25 files per run.
Not supported, deliberately: downloading from YouTube, TikTok or other social platforms. Send direct media files you have the right to process.
Pricing — pay only for delivered subtitles
| Event | Price | Charged when |
|---|---|---|
subtitles-generated | $0.005 | a file produced at least one cue |
transcription-minute | $0.008 | per started minute of audio transcribed |
A 10-minute video costs $0.085. A one-hour talk costs $0.485.
There is no actor-start fee — a start fee bills you for failed runs, and this family never charges one.
The billing rule is deliberate: files that fail to download, cannot be decoded, or contain no recognizable speech are never billed — not even the per-file fee. If you got no subtitles, you pay nothing. Your cost ceiling per file = $0.005 + $0.008 × Max minutes per file (default 120).
Transcription options
| Field | Default | Notes |
|---|---|---|
model | base | tiny / base / small — accuracy vs speed |
language | auto | ISO code (en, ar, es, …) skips detection |
task | transcribe | translate = English subtitles from any language |
vad_filter | true | skip silence — faster, fewer hallucinated captions |
max_minutes_per_file | 120 | hard cost/length cap; longer files flagged truncated |
tiny and base are baked into the image and start instantly; small
downloads once at the start of the run (~1 minute extra).
Word-level timestamps are always computed — they are what makes cue boundaries land on real word edges, so there is no option to turn them off.
Notes on quality
- For noisy audio, strong accents or lower-resource languages, switch to
small— the most accurate model offered here. - Set
languageexplicitly for very short clips; auto-detection has less signal to work with under ~10 seconds. - Narrower lines mean more cues, not lost words: at
max_chars_per_line: 24the same speech simply splits more often.
Limits, stated plainly
- CPU transcription: roughly 5–15 seconds of processing per audio minute
with
base, more withsmall. The default 60-minute run timeout accommodates a full 2-hour file withbase; raise it forsmallon very long media. - 250 MB per file, 25 URLs per run, 480 minutes max per file.
- Live streams are not supported — the URL must be a finite file.
- Cue text is not re-punctuated or re-cased beyond what Whisper produces.
The family
| Actor | Use it for |
|---|---|
| SRT Subtitles Generator (this one) | media → finished .srt / .vtt caption files |
| Whisper Transcriber | media or podcast feeds → transcript text |
| PDF Text Extractor | fast clean text from digital PDFs |
| PDF OCR Extractor | scanned PDFs, Arabic + English OCR |
Issues and requests
Open an issue on the actor's Issues tab — I read all of them.