SRT Subtitles Generator — video & audio to SRT/VTT captions avatar

SRT Subtitles Generator — video & audio to SRT/VTT captions

Pricing

Pay per event

Go to Apify Store
SRT Subtitles Generator — video & audio to SRT/VTT captions

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

Dos

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

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

FieldDefaultWhat it does
max_chars_per_line42broadcast width; use 32 for narrow mobile players
max_lines_per_cue21 is common for social video
max_cue_seconds6longer cues are split on a word boundary
min_cue_seconds1stretches flash-cues, never into the next one
offset_seconds0shift 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

EventPriceCharged when
subtitles-generated$0.005a file produced at least one cue
transcription-minute$0.008per 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

FieldDefaultNotes
modelbasetiny / base / small — accuracy vs speed
languageautoISO code (en, ar, es, …) skips detection
tasktranscribetranslate = English subtitles from any language
vad_filtertrueskip silence — faster, fewer hallucinated captions
max_minutes_per_file120hard 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 language explicitly 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: 24 the same speech simply splits more often.

Limits, stated plainly

  • CPU transcription: roughly 5–15 seconds of processing per audio minute with base, more with small. The default 60-minute run timeout accommodates a full 2-hour file with base; raise it for small on 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

ActorUse it for
SRT Subtitles Generator (this one)media → finished .srt / .vtt caption files
Whisper Transcribermedia or podcast feeds → transcript text
PDF Text Extractorfast clean text from digital PDFs
PDF OCR Extractorscanned PDFs, Arabic + English OCR

Issues and requests

Open an issue on the actor's Issues tab — I read all of them.