Skip to main content
Free browser tool, nothing uploaded

Convert SRT to VTT — and VTT back to SRT

Open a caption file, pick the format you need, and take it back out. The file is read by this page and never leaves your browser: no upload, no account, no queue.

Both directions · timing shift · validity check

Nothing here is uploaded. The file is parsed and rewritten inside this tab, and no request leaves your browser.

Convert to

Positive moves captions later, negative moves them earlier. Rounded to the millisecond and clamped at the start of the video.

Waiting for a file

Reference

SRT and WebVTT, side by side

Both formats hold the same thing: a list of cues, each with a start, an end and a line or two of text. Most of what separates them is punctuation and packaging. The differences that bite are the decimal separator, the header line, and the positioning WebVTT carries and SRT cannot.

Field-by-field comparison of the SubRip (SRT) and WebVTT caption formats.
AspectSRT (SubRip)WebVTT
File extension.srt.vtt
MIME typeapplication/x-subrip, never formally registered — some upload forms treat an SRT file as plain text.text/vtt, registered. A server must send this type or the browser will not load the track.
First lineThe first cue's number. There is no header, so an SRT file cannot be identified from its opening bytes.WEBVTT, mandatory. Anything after it on the same line is a title and is ignored.
Timestamp00:01:02,500 — a comma before the milliseconds.00:01:02.500 — a dot before the milliseconds.
Hours fieldAlways written, even for a five-second mark: 00:00:05,000.Optional. 00:05.000 is a valid five-second mark.
Cue labelA sequential number above the timing. Positional, so it is renumbered whenever cues are added or removed.An optional name — any text without an arrow. Used by scripts and stylesheets, never shown to viewers.
PositioningNone. Where a caption lands on screen is the player's decision.Cue settings written after the end timestamp: align, line, position, size and vertical.
StylingNot specified. Players tolerate a few tags such as italic and bold by convention, and disagree about the rest.Bold, italic, underline, class and voice tags, plus the ::cue selector in CSS.
CommentsNo comment syntax exists.NOTE blocks, which players skip.
Text encodingUndeclared. This is where garbled accents come from: the player guesses, and sometimes guesses wrong.UTF-8, required by the specification.
Played byDesktop players, and most upload forms that accept a separate caption file.Browsers, through the HTML5 track element — the usual reason to convert.

Converting rewrites the wrapper, not the timing: the same instant is 00:01:02,500 in SRT and 00:01:02.500 in WebVTT. Loss travels one way only — cue names and cue settings exist in WebVTT and have nowhere to go in SRT, so they are dropped and the cue text is left exactly as written.

The maths

How the timestamps are read

A timestamp is a millisecond count

Both formats store an absolute offset from the first frame rather than a frame number, so nothing here depends on the frame rate. Hours, minutes and seconds are converted and added; the fraction is always thousandths, which is why .5 means half a second and not five milliseconds.

00:01:02,500 = 62,500 ms

A shift is one constant added to both ends

Every start and every end moves by the same amount, so durations never change. Offsets round to the millisecond, the finest either format expresses. A negative offset stops at zero — nothing starts before the video does — and a cue dragged entirely past zero collapses to a zero-length cue rather than disappearing quietly.

62,500 ms − 1.5 s = 61,000 ms

A shift cannot fix drift

One offset fixes captions that are late or early by the same amount throughout, which usually means they were timed against a cut with a different head: a slate, a logo sting, a trimmed countdown. It is the wrong fix when the gap grows as the film runs. That is a rate error, almost always a frame-rate conversion, and it needs a re-time.

23.976 → 24 fps ≈ 3.6 s adrift after an hour

The useful part

What the validity check looks for

Conversion is the easy half. Most caption files that misbehave are in the right format with defects the exporter never mentioned. Everything below is checked on the converted output, after any shift, so what you read is what you download.

Overlapping cues
A cue starts before the one above it has ended. Players disagree: some clip the earlier cue, some stack both lines, some drop one. It is the most common defect in a hand-edited file, and the one most often mistaken for a bug in the player.
Zero-length cues
Start and end are the same instant, so most players show nothing. These turn up after a careless shift, or an edit that dragged one boundary onto the other.
Cues that end before they start
Invalid in both formats. Some players stop reading at the fault, so a single reversed cue can silence every caption after it. Fix these first.
Cues out of order
A cue starts earlier than the cue above it. WebVTT expects cues in start order and SRT assumes it, so a player that trusts the order may show nothing past the fault.
Blocks that could not be read
Reported with a line number rather than skipped in silence: a malformed timing line, or a cue with timing but no text. Both are dropped, so the cue count tells you whether anything went missing.

Which way

Which direction you actually need

Nine times in ten the answer is dictated by whatever will play the video, not by preference.

SRT to VTT, for a browser

The HTML5 track element reads WebVTT and nothing else. If captions are missing on a web page but work in every desktop player, an SRT file behind the track is the first thing to check — then whether the server sends it as text/vtt.

VTT to SRT, for everything else

Desktop players and most upload forms that take a separate caption file expect SRT, and a few refuse WebVTT outright. The conversion gives up cue names and positioning, which those destinations would have ignored.

Neither, if the captions are burned in

Captions rendered into the picture are part of the video and need no separate file. Right for feeds that autoplay muted, wrong wherever a viewer needs to switch the captions off.

Why it matters here

The file never leaves this page

Caption files are quietly sensitive. A transcript carries every word of an interview, an unreleased episode, a script still under embargo — and the usual way to convert one is to hand it to a stranger's server. This page does the work in the browser instead, which is the only version of that promise you can check yourself.

  • The parser and the writer run in this tab. There is no route behind the button and no request is made.
  • Opening a file reads it through the picker your browser already granted; no copy is made anywhere else.
  • The download is assembled in memory in the same tab. Close the page and nothing is left behind.

Once the page has loaded you can disconnect from the network and the converter keeps working — the simplest way to test any tool's privacy claim, including this one.

PAST THE FILE FORMAT

The editor is where the captions go on the picture

This page fixes a format. Once the cues are right, the timeline editor is where they get burned onto the video and styled to match it.

  • Drop a finished SRT or VTT onto a timeline and the cues arrive already timed — nothing to retype.
  • Style the captions to the cut: position, safe area, weight and colour, checked against the platform you are posting to.
  • Export the whole thing as one file, with the captions baked in or kept as a sidecar, whichever the platform wants.

Converting subtitles here is free and needs no account. The editor is part of the product you sign in to.

See how the editor works

Questions

Before you convert

Is the subtitle converter free?

Yes, with no account, no sign-in and no watermark. It is a page that runs a parser in your browser, so converting a file costs us nothing and there is nothing to charge for.

Is my caption file uploaded anywhere?

No. The file is read, converted and written back out inside this tab, and no request is made at any point. To prove it, load the page, disconnect from the network and convert a file — it still works.

Should I convert to SRT or to WebVTT?

Convert to WebVTT if a browser will play the video through an HTML5 track element, because that element reads WebVTT only. Convert to SRT for desktop players and upload forms that ask for a separate caption file. If the destination does not say, SRT is the safer guess.

Does converting lose my styling or positioning?

Cue text passes through exactly as written, inline tags included. What cannot survive a move to SRT are the two things SRT has no place for: cue names and the settings that control alignment and position. Going the other way nothing is lost, and SRT numbering is regenerated from one.

Can I fix captions that run a second or two out?

Yes. Type an offset in seconds and every cue moves by that amount, positive or negative, rounded to the millisecond. A negative offset stops at zero rather than running past the start of the video.

My captions drift further out as the video plays. Will a shift fix that?

No, and it is worth knowing why. If the gap is the same at the start and at the end, one offset fixes it. If the gap grows, the caption clock runs at a different rate from the video — typically a 23.976 against 24 frames-per-second conversion, roughly 3.6 seconds by the end of an hour. That needs a re-time, and this tool does not pretend to do it.

Captions were the last step.Make the video too.

PrismPoster is one studio for images, video, music and a timeline editor that writes captions straight onto the cut. A new account comes with 50 starter credits.