Subtitle to Script Converter — SRT, VTT, ASS to Clean Transcript
Convert SRT, VTT (including YouTube auto-captions), ASS/SSA, SBV and LRC subtitles into a clean transcript. Removes timestamps and sound cues, finds speakers, groups paragraphs. Runs in your browser.
What it does
Drop in a subtitle file and get back readable text: no line numbers, no timecodes, no <i> tags, no [Music]. It reads SRT, WebVTT (including YouTube auto-caption files), ASS/SSA, SBV and LRC, and can write the result as a plain transcript, Markdown, screenplay-style dialogue, HTML, or a cue table in CSV or JSON. Everything is worked out on your device.
How it works
The tool detects the format from the file’s contents, not just its extension, and tolerates the small inconsistencies real subtitle files have: dot or comma milliseconds, missing hours, missing cue numbers, byte-order marks and Windows line endings. It also detects the text encoding (UTF-8, UTF-16 or Windows-1252) and lets you override it if letters look garbled.
Cleaning happens in stages. Markup and ASS override tags are removed and HTML entities are decoded. Sound cues in brackets and stage directions in parentheses are removed, but ordinary parentheses in speech are kept. YouTube auto-captions repeat each line across several cues; the tool collapses those rolling duplicates automatically when it recognises the pattern, and leaves genuine repeated dialogue alone.
Speakers come from NAME: labels, >> turn markers, leading-dash dialogue, WebVTT <v Name> tags and the ASS name field. To avoid mistaking a line like “Note:” for a person, a label must be all-caps or repeat before it counts as a speaker. Fragments are then joined into whole sentences, and paragraphs are started at speaker changes and long pauses, or after a set number of sentences.
How to use it
- Add one or more subtitle files, or paste subtitle text. Files stay in your browser after a refresh until you clear them.
- Check the status line: it shows the detected format, encoding and number of cues.
- Choose the clean-up options: sound cues, ♪ lyric lines, auto-caption duplicates, and joining fragments into sentences.
- Choose how paragraphs are grouped (by pause, by sentence count, per cue or one block) and whether to add timestamps: none, at each paragraph, every N seconds or at every cue.
- If speakers were found, rename or merge them in the speaker panel. The names update the output straight away and are remembered for your next file.
- Add find-and-replace rules for recurring mistakes, pick an output style, then copy or download. With several files loaded, Download all gives you a .zip.
Supported formats
| Input | Notes |
|---|---|
| SRT | Comma or dot milliseconds, optional cue numbers and position tags |
| WebVTT (.vtt) | Cue IDs, notes and styles skipped, voice tags read as speakers, YouTube auto-captions supported |
| ASS / SSA | Text between override tags kept, drawing commands skipped, name field used as speaker |
| SBV | YouTube’s older caption format |
| LRC | Lyric timing, including several timestamps on one line |
| Plain text | Pasted transcripts can be cleaned and reformatted too |
Output styles: plain transcript, Markdown, screenplay-style dialogue, HTML, and a cue table as CSV or JSON. The cue table keeps millisecond start and end times.
Privacy
Your subtitles are read and converted entirely in your browser and are never uploaded.
- Local: reading, decoding, cleaning, speaker detection, formatting, statistics and every output style.
- Uses the internet: only the optional Download all as .zip button, which fetches a small open-source ZIP library the first time you use it. Only the library is downloaded; none of your text is sent.
- Saved files: your files and settings are kept in your browser’s own storage so a refresh doesn’t lose your work. Press Clear saved files to remove them.
Frequently asked questions
How do I get a transcript from a YouTube video?
Download the captions as a .vtt or .srt file, then drop it here. YouTube auto-captions repeat each line across several cues, and the tool collapses those repeats automatically so you get each sentence once.
Can it keep timestamps?
Yes. Add them at each paragraph, every N seconds, or at every cue, in your choice of [mm:ss], (mm:ss), plain mm:ss or a precise [hh:mm:ss.mmm] style. Hours are added automatically for anything over an hour.
How does it decide who is speaking?
It looks for NAME: labels, >> turn markers, leading-dash dialogue, WebVTT voice tags and ASS name fields. All-caps labels are trusted straight away; capitalised names must appear at least twice, so words like “Note:” are left alone. Anything it finds can be renamed or merged in the speaker panel. Files with no speaker markers simply come out as paragraphs.
Why do accented letters look wrong?
The file probably isn’t UTF-8. Change Text encoding to the right one (for example Windows-1252 for Western European, or Windows-1251 for Cyrillic) and the output updates immediately.
Can I use the result for translation?
Yes for a plain reading copy. If you need to translate the subtitles and put the translation back onto the original timestamps, use the Subtitle Translation Helper, which merges translated lines back into an .srt.
What if I need the cues in a spreadsheet?
Choose the CSV or JSON cue-table output, or use Send to to hand the cue table straight to the Data format converter to turn it into other structured formats.
How do I fix the same typo everywhere?
Add a find-and-replace rule in the sidebar. Rules apply to the transcript text only, so speaker names and timestamps are never touched. For heavier clean-up such as stray punctuation or double spaces, send the text to the Text Cleanup Toolkit or check the length with the word counter.