Subtitle Converter: SRT, VTT, SBV and TXT
Result
Converted file
Saved as subtitles.vtt, UTF-8
The file is read and converted in your browser and the download is built from memory; nothing is uploaded.
Saved as subtitles.vtt, UTF-8
The file is read and converted in your browser and the download is built from memory; nothing is uploaded.
This subtitle converter changes a caption file from one format to another: SRT to VTT, VTT to SRT, SRT to TXT, SBV to SRT, SRT to SBV, and every other pair between SubRip, WebVTT, SubViewer and plain text. Paste the file or open it, pick the output, press Convert and download the result. On the way it can move every cue earlier or later by a number of seconds, stretch the timing when the subtitles were made for a version of the video that runs at a different frame rate, strip italic, bold, colour and voice tags, and end each overlapping cue before the next one starts. It also reports what the file contains: how many cues, how long, how many words, the longest cue, and the cues that break the usual limits of 7 seconds on screen, 42 characters per line and 20 characters per second. Everything happens on this page; the file is never sent anywhere.
.vtt, SRT for almost everything else, SBV for YouTube's own caption editor, or plain text when you want the transcript without the numbers and timestamps (one cue per line, one paragraph, or each line with a short [1:23] marker).The four formats carry the same cues and differ in the details a parser cares about. Those details are what the converter rewrites.
| Format | Timestamps | Structure | Formatting | Where it is used |
|---|---|---|---|---|
SRT (SubRip, .srt) | 00:01:02,500 --> 00:01:04,000, a comma before the milliseconds, hours always written | Numbered cues separated by blank lines, no header | No formatting in the format itself; <i>, <b>, <u> and <font color> are honoured by most players | The format nearly every player, editor and video site accepts for upload, YouTube included |
WebVTT (.vtt) | 00:01:02.500 --> 00:01:04.000, a dot before the milliseconds, hours optional (01:02.500 is valid) | Starts with the line WEBVTT; optional cue identifiers, position and alignment settings after the timestamps, NOTE, STYLE and REGION blocks | <i>, <b>, <u>, class tags <c.name>, voice tags <v Speaker>; & and < in the text must be escaped | The only format the HTML <track> element plays, so every web video player; also accepted by YouTube |
SBV (SubViewer, .sbv) | 0:01:02.500,0:01:04.000, start and end on one line separated by a comma, hours without a leading zero | Cues separated by blank lines, no header, no numbers | None | The format YouTube's subtitle editor downloads; accepted on upload |
Plain text (.txt) | None, or an optional [1:23] marker per line from this page | One line per cue, or one paragraph | None | Transcripts, blog posts, show notes, translation drafts |
Going from SRT or VTT to SBV or plain text loses the formatting, because the target has nowhere to put it; the page says so in the result. Going from VTT to SRT loses cue identifiers, position settings and the NOTE and STYLE blocks, and turns voice and class tags into their text. Going from SRT to VTT loses only <font> tags, which WebVTT does not have. SBV to anything loses nothing. Hours are always written in the SRT and VTT output, which both formats accept, and the SBV output uses the one-digit hour YouTube itself writes.
Subtitles go out of sync in two ways and the fix is different for each. If every cue is early or late by the same amount, the file was timed against a video with a different start (a longer studio logo, a trimmed intro) and a constant shift fixes it: compare one cue with the audio, type the difference in seconds, and convert. Cues that would start before 0:00 are clamped to 0:00 and cues that would end before it are dropped; the result says how many.
If the first cues are right and the error grows through the file, the subtitles were timed to a version of the video that runs at a different speed. The common case is a film shot at 24 fps and released on PAL television at 25 fps, which runs 4% faster, against a 23.976 fps digital copy: a subtitle file made for the 25 fps release lands later and later on the 23.976 copy. Enter 25 as the old rate and 23.976 as the new one and every timestamp is multiplied by 25 ÷ 23.976 = 1.0427, so a cue at 1:00:00 moves to 1:02:34. The ratio is all that matters, so the same two boxes correct any pair of rates, or any constant speed change if you type the two speeds as if they were frame rates. Stretch is applied first and the shift after it; check a cue near the start and one near the end after converting, and if a constant offset remains, add a shift.
YouTube Studio takes a caption file under Subtitles: pick the language, Add, Upload file, and choose With timing for a timed file. SRT, SBV and VTT are all accepted, and YouTube's own editor downloads captions in those same three formats, so a file from one video can be converted here and used on another or on a different platform. If an upload is refused, converting to SRT is the usual fix: it is the simplest of the three, with no header, no settings and no tags YouTube has to understand. The embed code generator can then switch the captions on by default for viewers of the embedded player.
After converting, the page lists the cues that break the limits broadcast and streaming style guides commonly set. Netflix's English timed-text style guide, which many caption teams follow, caps a subtitle at 7 seconds on screen, 42 characters per line, two lines, and a reading speed of 20 characters per second for adult programmes; YouTube does not enforce them on upload, but viewers notice when a caption cannot be read in the time it is shown. The report counts the cues on screen longer than 7 seconds, the cues with a line over 42 characters, the cues with three or more lines, the cues that ask for more than 20 characters per second (characters without spaces divided by the cue's duration), and the cues that overlap the next one. Overlaps are the one problem the page can fix on its own; the rest need an edit to the text or the timing, and the cue numbers in the report say where to look.
With Strip formatting tags unticked, the converter keeps what the target format can carry. Italic, bold and underline tags survive between SRT and VTT in both directions. A WebVTT voice tag such as <v Maria>Hello</v> becomes Hello in SRT, because SRT has no speaker markup; a class tag <c.yellow> becomes its text; an SRT <font color="#ffff00"> is dropped in VTT, which styles with CSS classes instead. ASS-style position codes such as {\an8}, which some SRT files carry to put a caption at the top of the picture, pass through SRT to SRT and are removed for every other target. SBV and plain text never carry tags. With the box ticked, every tag is removed whatever the target, which is what most upload forms and translation tools want.
It does not create captions from a video or an audio track; it converts a file that already has them (the script timer is the page for the other direction, estimating how long a script will run before it is recorded). It does not translate. It does not read ASS, SSA, TTML, DFXP, SCC or other styled or broadcast formats; export those to SRT from the editor that made them first. It does not re-sync subtitles by listening to the audio; the shift and stretch are figures you supply after checking two cues. And it expects UTF-8 text: a file saved in an older Windows code page shows accented characters as � in the box, which means it should be re-saved as UTF-8 in a text editor before converting.
Paste the SRT file or open it, leave the output on VTT, and press Convert, then Download. Two things change: a WEBVTT line is added at the top, and the comma before the milliseconds becomes a dot (00:00:01,000 becomes 00:00:01.000). The converter also drops the cue numbers, which WebVTT does not need, keeps italic, bold and underline tags, removes font tags, and escapes & and < characters as the WebVTT format requires.
SRT (SubRip) is a numbered list of cues with timestamps written 00:00:01,000 --> 00:00:04,000, a comma before the milliseconds and no header. WebVTT starts with the line WEBVTT, writes the milliseconds after a dot, may leave the hours out, and adds things SRT has no place for: cue identifiers, position and alignment settings after the timestamps, NOTE and STYLE blocks, and voice and class tags inside the text. SRT is the format most players, editors and video sites accept for upload; WebVTT is the only format a web page can play through the HTML <track> element.
YouTube accepts SRT, SBV and VTT files, among other caption formats, under Subtitles in YouTube Studio (Add language, then Upload file, With timing). Its own subtitle editor downloads captions as .vtt, .srt or .sbv. If a file is refused, converting it to SRT with this page and uploading that is the usual fix, because SRT is the simplest of the three and carries no settings YouTube might reject.
SBV is the SubViewer caption format YouTube uses in its own subtitle editor. Each cue is a line with the start and end time separated by a comma, such as 0:00:01.000,0:00:04.000, followed by the text and a blank line; there is no header, no cue number and no formatting. Because it is plain and simple, SBV converts to SRT or VTT without losing anything, and the other way round loses only formatting tags.
Check one cue near the start and one near the end. If both are off by the same amount, every cue is early or late by a constant and a shift fixes it: type the offset in seconds (2.5 moves everything later, -2.5 earlier) and convert. If the error grows through the file, the subtitles were timed to a version of the video that runs at a different speed, usually a 25 fps version against a 23.976 fps one; enter those two frame rates and the page multiplies every timestamp by their ratio (25 to 23.976 stretches by 1.0427). Stretch first, then shift if a constant offset remains.
Pick plain text as the output. The numbers, timestamps and tags are removed and each cue becomes one line; choose One paragraph to run the cues together as one block of text, or With timestamps to keep a short [1:23] marker in front of each line for a transcript with time references.
No. The page reads the file with the browser's own file reader, converts it in JavaScript on your computer and builds the download from memory. Nothing is sent to a server, which also means there is no size queue and no account; the limit is your browser's memory, and subtitle files are tiny.