SRT to Text Converter
Turn an SRT or WebVTT file into readable text, rejoining screen-broken lines into sentences and dropping the duplicate cues auto-captions leave behind.
🔒 This tool runs entirely in your browser. Your files are never uploaded to a server.
Example shown — SRT and WebVTT both work. Nothing is uploaded.
Zero means do not wrap.
Result
Rejoining is a heuristic, not grammar: a cue is treated as continuing when it does not end in sentence-ending punctuation. Auto-generated captions often have no punctuation at all, in which case there is nothing to rejoin on and the paragraph mode is the better choice. Everything happens in the page — the file is read locally and never uploaded.
How to use it
- Paste the subtitle file, or open an .srt or .vtt from disk.
- Leave it on sentence rejoining unless your captions have no punctuation.
- Turn off the cleanups you want to keep — speaker labels are often worth keeping.
- Copy the result or download it as a text file.
Deleting timestamps is the easy half
Subtitle files break lines to fit a screen and a reading speed. They have no relationship to sentence structure, so the obvious conversion produces something nobody wants to read:
the file "so the thing about"
"subtitle files is that they"
"break lines to fit the screen,"
"not to fit the sentence."
one line per cue four fragments, none a sentence
rejoined one sentence, ending where it should
The rule is simple and works well: if a cue does not end in sentence-ending punctuation, it has not finished, so glue it to the next one. Only the cue that ends with a stop closes a paragraph. That single test turns a wall of fragments into prose.
Finding cues by the arrow, not by counting
An SRT cue is conventionally a number, a timing line, then text — so it is tempting to parse by position. That breaks on the first file with a missing index, a stray blank line, or WebVTT's header and NOTE blocks. The reliable marker is the arrow:
00:00:04,120 --> 00:00:07,400 SRT, comma decimal
00:00:04.120 --> 00:00:07.400 WebVTT, dot decimal
a line containing --> starts a cue
everything after it, until a blank line, is the text
Anything gathered immediately before a timing line was a sequence number, so it is discarded rather than treated as dialogue. WebVTT's WEBVTT header and its NOTE, STYLE and REGION blocks are recognised and dropped. That is why one parser handles both formats, and why a file with slightly irregular numbering still converts cleanly.
Line endings are normalised first. A file saved on Windows otherwise leaves a carriage return on the end of every line, which survives into the output and shows up later as mysterious whitespace.
The duplicate-cue problem
Automatic captioning frequently uses a rolling display: each new cue repeats the previous line along with the new one so the text appears to scroll up the screen. It looks right on video and converts into a transcript that says everything twice. Dropping consecutive identical cues fixes it, and the tool counts what it removed — if that number is large, the rolling window was your problem.
What to strip, and what to keep
Formatting tags go by default, since italics and positioning mean nothing in plain text. Sound cues like
[music] and speaker labels are off by default, because whether they are
noise or content depends entirely on what you are doing: for an article you probably want them gone, and for an
interview transcript the speaker labels are the most important thing in the file.
FAQ
Why does stripping timestamps not give readable text?
Because subtitle lines are cut to fit a screen, not to end a sentence. A single clause is routinely split across two or three cues, so deleting the timestamps and joining what is left produces text broken at arbitrary points. Rejoining has to be done on punctuation, which is what the default mode does.
How does the rejoining decide where a sentence ends?
A cue that ends in a full stop, question mark, exclamation mark or ellipsis — optionally followed by a closing quote or bracket — is treated as finishing a sentence. Anything else is assumed to continue into the next cue. It is a heuristic rather than grammar, and it is right far more often than joining every line.
What if my captions have no punctuation?
Then there is nothing to rejoin on, and the sentence mode will produce one very long block. That is typical of auto-generated captions from speech recognition. Switch to the paragraph mode, which is honest about producing continuous prose rather than pretending to find sentence boundaries that are not marked.
Why are there so many repeated lines in my file?
Auto-captioning often uses a rolling window, emitting the previous line again with each new one so the text appears to scroll. Converted naively that doubles or triples the transcript. Dropping consecutive identical cues fixes it, and the tool reports how many it removed so you can tell whether that was the problem.
Does it handle WebVTT as well as SRT?
Yes. The two differ in the decimal separator — SRT uses a comma, WebVTT a dot — plus WebVTT's header, NOTE and STYLE blocks and its positioning tags. All of those are recognised and discarded. Cues are found by the arrow in the timing line rather than by counting lines, which is what makes both formats work with one parser.
Is my file uploaded?
No. The file is read in your browser and the conversion happens in the page. Nothing is sent anywhere, which matters for an unreleased video or an interview transcript.
How we compare
| Feature | Online Tool Store | Other SRT strippers | Find and replace by hand |
|---|---|---|---|
| Rejoins fragments into sentences | ✓ | ✗ | ✗ |
| Drops rolling-window duplicates | ✓ | ✗ | ✗ |
| SRT and WebVTT with one parser | ✓ | Often SRT only | Two sets of patterns |
| Optional speaker and sound-cue removal | ✓ | All or nothing | ✓ |
| File never leaves your device | ✓ | Varies | ✓ |
| Keeps timings for reference | ✗ | Sometimes | ✓ |
| Understands grammar rather than punctuation | ✗ | ✗ | You do |
The difference between this and a regular expression is the rejoining — fragments become sentences, and the rolling duplicates that double a transcript are removed. It drops the timings entirely, so if you need text still tied to positions in the video, keep the original file alongside.