Skip to the tool
CaptionSuiteCaptionSuite home

SRT

Generate an .srt file from a video

An .srt is the subtitle file nearly everything reads: YouTube, Vimeo, VLC, Premiere, a television. Transcribe the speech here and export one, without the file leaving your machine.

  • No upload
  • No account
  • No watermark
  • Nothing to meter

Read straight off your disk. Works offline once the model is cached.

What an .srt actually contains

SubRip Text is about as simple as a file format gets, which is why it won. A numbered block, a start and end timecode to the millisecond, one or more lines of text, a blank line, repeat. There is no styling, no positioning, and no metadata.

That plainness is the feature. Because there is nothing to interpret, almost nothing refuses to read it, and you can open one in a text editor and fix a typo without any tooling at all. When a platform says it accepts subtitles and names one format, this is usually the one.

What it cannot do matters too. No bold, no colour, no placing a line away from the bottom of the frame to avoid covering something. If you need any of that in a sidecar file you want WebVTT instead, and if you need it guaranteed to look identical everywhere you want the text burned in.

Generating one here

Drop a video or an audio file onto the tool above. Your browser reads it off the disk directly, so there is no upload step and no progress bar pretending to be one.

Press Transcribe. A Whisper model runs on your own GPU through WebGPU, or on the CPU through WebAssembly if the browser has no WebGPU, and the timed lines fill in as it works. Measured at 8.6x faster than realtime on a 31-minute recorded lecture, Chrome, 16GB Windows laptop. The CPU path is considerably slower and has not been measured.

Then edit before you export, because this is the step people skip and regret. The editor flags any line faster than 17 characters a second, any line too brief to register, any line left hanging over silence, and any place the model got stuck repeating a phrase. Export as .srt when the flags are dealt with.

Timecodes, frame rates, and the one real gotcha

SRT timecodes are wall-clock hours, minutes, seconds and milliseconds. They are not frame numbers, which is the difference that causes almost every sync problem people bring to a subtitle file.

Because the timings are absolute, an .srt generated against one cut of a video is wrong for any other cut. Trim four seconds off the head and every cue is four seconds late. That is a constant offset rather than drift, so it is also the easy case to fix: shift every cue by the same amount rather than editing them one at a time.

Progressive drift is the harder case and usually means a frame rate conversion happened somewhere, typically between 25 and 23.976. A fixed shift will not fix that, because the error grows as the video runs.

Where to put the file once you have it

Most platforms have an explicit upload slot for a subtitle file, and using it is better than burning the words in: the viewer can turn captions off, the text is indexed as text, and a correction does not mean re-encoding the video.

  • For a video platform, upload the .srt alongside the video rather than relying on auto-captions, which you do not get to proofread before they go live
  • For a desktop player, give the file the same name as the video in the same folder and it will be found automatically
  • For an editor, import it as a caption track; most will convert it to their own format on the way in
  • For somewhere that takes one file and no sidecar, burn the captions into the picture instead

Questions

Is this really free, with no watermark?
Yes, and the reason is structural rather than generous. The transcription runs on your machine, so a minute of audio costs nothing to serve. There is nothing to meter and no compute bill to recover, which is why there is no paid tier, no signup and nothing stamped on the output.
Is my video uploaded anywhere?
No. There is no server side to this tool and no /api directory in the project. The browser reads the file off your disk and the model runs in a worker on the same page. The one thing that crosses the network is the speech model itself, downloading from Hugging Face to you the first time, after which your browser caches it.
How long a file can it handle?
Up to 2 hours of audio per recording. That is a memory limit rather than a commercial one: the audio is held as 16kHz samples in a browser tab alongside the model, and the tab has a finite budget. It is checked before the work starts, so you are told rather than discovering it part way through.
Can I edit the subtitles before exporting?
That is the intended workflow rather than an extra. The transcript is editable against a waveform, and the lines most likely to be wrong are flagged: too fast to read, too brief, left hanging over silence, or stuck repeating a phrase. Machine transcription needs a pass, and a tool that hands you an export button and no editor is hiding that.