Subtitle Generator: Video & Audio to SRT and VTT Subtitles
Pricing
from $2.10 / 1,000 audio minute subtitleds
Subtitle Generator: Video & Audio to SRT and VTT Subtitles
Generate ready-to-use subtitle files from any video or audio. Paste a file link, a Google Drive or Dropbox share link, or upload a file, and download SRT and VTT subtitles with clean line breaks and accurate timing. 99+ languages, pay per minute.
What is Subtitle Generator?
Subtitle Generator creates ready-to-use SRT and VTT subtitle files from any video or audio. Paste a file link, a Google Drive or Dropbox share link, a public TikTok or Instagram link, or upload a file, and download subtitles with clean line breaks and accurate timing.
Try it now: the example below makes subtitles from a short speech in a few seconds.
What can this subtitle generator do?
- Real subtitles, not a raw transcript. Lines are kept short, subtitles break at sentence ends and pauses, and nothing stays on screen too long.
- Made for your format. Choose the line length: 42 characters for landscape video, about 20 to 25 for Shorts, Reels and TikTok.
- 99+ languages with automatic language detection (Whisper large-v3).
- Fast. One hour of video is typically ready in about a minute.
- Pay per audio minute. No subscription, and nothing charged for files that fail or hold no speech.
Because it runs on Apify, you also get:
- Scheduling: subtitle new videos on a regular basis.
- API access: start runs and read results from your own code.
- Integrations: send results to Make, Zapier, n8n, Google Sheets and more.
- Monitoring: get alerted when a run fails or returns less than expected.
- Exports: download results as JSON, CSV or Excel.
What can you provide?
| Input | Example |
|---|---|
| Direct file link | https://example.com/video.mp4 |
| Google Drive share link | https://drive.google.com/file/d/FILE_ID/view |
| Dropbox share link | https://www.dropbox.com/scl/fi/.../video.mp4?rlkey=... |
| Public post on TikTok, Instagram, Loom, Twitch or SoundCloud | https://www.tiktok.com/@user/video/VIDEO_ID |
| File upload | Use the Or upload a file field |
Any common format works: MP4, MOV, WEBM, MKV, MP3, M4A, WAV and more, up to 1.5 GB per file. Share links must be set to "anyone with the link can view".
How to generate subtitles for a video
- Get a link to your video or audio file: a direct file URL, a Google Drive or Dropbox link shared with "anyone with the link", or a public post link. Or use Or upload a file.
- Paste the link into Video or audio file URLs.
- Optionally adjust the line length: keep 42 for landscape video, use 20 to 25 for vertical video.
- Click Start. When the run finishes, open the Output tab and click the SRT or VTT link to download your subtitle file.
How much does it cost to generate subtitles?
You pay for each minute of audio processed, rounded to the nearest minute, with a minimum of one minute per file. The price depends on your Apify Store discount tier:
| Store discount tier | Price per audio minute |
|---|---|
| Free plan | $0.003 |
| Bronze | $0.0027 |
| Silver | $0.0024 |
| Gold and above | $0.0021 |
At the Bronze price:
| Video | Cost |
|---|---|
| A 1-minute Short or Reel | $0.0027 |
| A 10-minute video | $0.027 |
| A 1-hour video | $0.162 |
Files that fail or hold no speech are not charged. Set Maximum minutes per file or the run's maximum charge to cap spending: the Actor stops before exceeding either, and marks a cut file with "truncated": true.
On the free Apify plan, each run transcribes up to 10 minutes of audio in total: longer audio is cut there and marked "truncated": true. Paid Apify plans have no such limit.
Input example
{"urls": ["https://api.apify.com/v2/key-value-stores/kyR7mGkrVQ6H3xQe8/records/jfk-we-choose-the-moon.mp3?signature=1IsTRMMS6FEWC0SVKQvL6"],"maxCharsPerLine": 42,"maxLines": 2}
Subtitle settings
| Setting | Default | Use it for |
|---|---|---|
| Maximum characters per line | 42 | Lower it (20 to 25) for vertical video |
| Maximum lines per subtitle | 2 | Set to 1 for single-line captions |
| Maximum seconds per subtitle | 6 | Lower it for fast-paced edits |
Output example
A real result for the input above, with the text shortened and the storage ID replaced. One dataset item per file, with download links to the two subtitle files:
{"inputUrl": "https://api.apify.com/v2/key-value-stores/kyR7mGkrVQ6H3xQe8/records/jfk-we-choose-the-moon.mp3?signature=1IsTRMMS6FEWC0SVKQvL6","status": "ok","fileName": "jfk-we-choose-the-moon.mp3","language": "English","durationSeconds": 20,"transcribedMinutes": 1,"truncated": false,"subtitleCount": 6,"srtUrl": "https://api.apify.com/v2/key-value-stores/STORE_ID/records/001-jfk-we-choose-the-moon.srt?signature=73WNqMZ0BakSVSzLlRX4","vttUrl": "https://api.apify.com/v2/key-value-stores/STORE_ID/records/001-jfk-we-choose-the-moon.vtt?signature=15QSiIJRW2qlNUBKTFXAb","text": "We choose to go to the moon in this decade and do the other things. Not because they are..."}
The SRT file generated for this example starts like this:
100:00:00,120 --> 00:00:04,080We choose to go to the moon in this decadeand do the other things.200:00:04,580 --> 00:00:07,600Not because they are easy, but becausethey are hard.300:00:07,760 --> 00:00:12,9203, 2, 1, 0. All engines running.
The files are also listed in the run's Storage → Key-value store tab. Turn on Also include the SRT text in the results to get the SRT content directly in each item, which is convenient from the API.
Use cases
- YouTube and long videos: add accurate captions without typing them.
- Shorts, Reels and TikTok: make short, readable lines for vertical video.
- Courses and webinars: give viewers captions and a text version.
- Accessibility: make your videos usable without sound.
Tips for better subtitles
- Match the line length to the screen: 42 characters for landscape, 20 to 25 for vertical video.
- Use one line per subtitle on fast-paced vertical video.
- Set the language for short or noisy audio.
- Review names and jargon before publishing: they are the most common mistakes.
FAQ
How do I generate SRT subtitles for a video?
Paste a link to the video file or upload it, then start the run. Each result contains a download link to an SRT file and a VTT file.
What is the difference between SRT and VTT?
Both hold the same subtitles and timings. SRT is the format most video editors and players import (Premiere Pro, DaVinci Resolve, CapCut, VLC, YouTube). VTT is the format used by web video players and HTML5 video.
How do I make subtitles for Shorts, Reels or TikTok?
Set Maximum characters per line to about 20 to 25 and Maximum lines per subtitle to 1 or 2. Subtitles then stay short enough to read on a vertical screen.
How accurate are the timings?
Subtitles are timed from the moment each word is spoken, and break at sentence ends and pauses. Text accuracy is that of Whisper large-v3: very good on clear speech, with possible mistakes on names, jargon and noisy audio.
How long does it take and how much does it cost?
A one-hour video typically takes about a minute and costs about $0.16 at the Bronze price. Nothing is charged for files that fail.
Can it translate subtitles into another language?
Not yet. Subtitles are written in the language spoken in the file.
Can I make subtitles from a TikTok or Instagram link?
Yes. Public posts on TikTok, Instagram, Loom, Twitch and SoundCloud work directly.
Can I make subtitles from a YouTube, Vimeo or Facebook link?
No. Those sites do not give their videos to this Actor without a login. Export or download your video first, then upload it or share it through Google Drive or Dropbox.
What happens to my file?
The file is downloaded during the run, its audio is sent to our speech-to-text provider (Groq) to be transcribed, and it is deleted when the run ends. Subtitle files are stored only in your own Apify account.
Limits
- All users share one transcription service with an hourly limit. When it is reached, the Actor waits up to 5 minutes, then returns what it has finished, marked
"truncated": trueand charged only for that part, with anotesaying when to try again. - Links must point to a file, or to one public post on TikTok, Instagram, Loom, Twitch or SoundCloud. YouTube, Vimeo and Facebook links are not supported.
- Subtitles are written in the language spoken in the file. Translation is not included.
- No speaker labels.
- Videos up to about 2 hours. Cut longer videos into parts first.
- The subtitle files are text files to load into your editor or player. Subtitles are not burned into the video.
Other Actors you may find useful
| Actor | What it does |
|---|---|
| Audio & Video to Text | Transcribe your own files and public video links |
| Spotify Podcast Transcript | Transcripts of Spotify, Apple Podcasts and Deezer episodes |
| TikTok Transcript | What is said in TikTok videos, with creator and public counts |
| Instagram Reels Transcript | What is said in Instagram Reels, with creator and public counts |
| PDF & Image to Text | Text from PDFs, scans, photos and screenshots |
Run it from the API
With cURL:
curl -X POST "https://api.apify.com/v2/acts/spokentext~subtitle-generator/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{ "urls": ["https://api.apify.com/v2/key-value-stores/kyR7mGkrVQ6H3xQe8/records/jfk-we-choose-the-moon.mp3?signature=1IsTRMMS6FEWC0SVKQvL6"], "maxCharsPerLine": 42, "includeSrt": true }'
With Python:
from apify_client import ApifyClientclient = ApifyClient("YOUR_TOKEN")run = client.actor("spokentext/subtitle-generator").call(run_input={"urls": ["https://api.apify.com/v2/key-value-stores/kyR7mGkrVQ6H3xQe8/records/jfk-we-choose-the-moon.mp3?signature=1IsTRMMS6FEWC0SVKQvL6"]})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["srtUrl"], item["vttUrl"])
This Actor is an independent tool. It is not affiliated with or endorsed by Google, Dropbox, TikTok, Instagram, Meta, Loom, Twitch or SoundCloud; their names only describe the links it accepts.
Feedback
Something failed or gave a wrong result? Open an issue in the Issues tab of this page, with the error message from your results: every report is read and fixed. If the Actor saved you time, a rating helps others find it.