What is a VTT subtitle file?
A VTT file (WebVTT — Web Video Text Tracks) is the subtitle format built for the web. It's a plain-text file that starts with the line WEBVTT, followed by timed cues using period-separated milliseconds (00:00:04.000 --> 00:00:06.500). It's the only caption format HTML5 <track> elements accept natively, and every modern browser supports it. Beyond basic cues, VTT can carry positioning (line:, position:, align:), per-cue styling, and metadata — none of which SRT supports. Have a VTT and need SRT, or the reverse? Paste it into the converter at the top of this page; the conversion is instant and local.
SRT vs VTT — the actual differences
Both formats list cues with a start time, end time, and text. The differences: SRT timestamps use a comma before milliseconds, VTT uses a period. SRT requires a sequence number above every cue; in VTT the identifier is optional. VTT requires the WEBVTT header; SRT has no header. VTT supports styling, positioning, and comments (NOTE blocks); SRT supports only basic tags like <i> and <b> that most players tolerate. When this tool converts VTT to SRT, cue settings and notes are dropped (SRT has nowhere to put them) and the text and timings survive exactly; converting SRT to VTT is lossless.
Create an SRT from plain text
Most "text to SRT" pages make you type a start and end time for every single cue — for a 10-minute video that's hundreds of timestamps entered by hand. The creator above skips that: it measures each line's length and assigns a duration from a reading speed you control (16 characters per second by default), chains the cues with a consistent gap, and enforces a minimum duration so short lines don't flash by. If you know the clip's exact length, switch to total duration mode and the cues are spread proportionally instead. The output is a valid, editable SRT — refine any timestamp in the text box before downloading, or load it into the converter above for VTT output.
Shift or stretch subtitle timing
If every subtitle appears exactly two seconds late, that's a constant offset — enter -2000 ms in the shift field. If subtitles start in sync but drift further out as the video plays, that's a rate mismatch — typically a file timed for 25 fps playing against 23.976 fps video — and needs a stretch factor, not a shift. Use the preset factor buttons or compute your own: factor = source fps ÷ target fps. Shift and stretch can be applied together; stretch is applied first, then the shift.
Encoding, BOM, and line-ending problems — fixed silently
The most common reason a "valid" SRT gets rejected by a player or upload form is invisible: a UTF-8 byte-order mark at the start of the file, Windows CRLF line endings confusing a strict parser, or timestamps written with a period where SRT demands a comma. This converter strips BOMs on input, accepts CRLF, CR, and LF interchangeably, tolerates period/comma confusion in timestamps, and always writes clean UTF-8 with standard line breaks — so a broken file pasted in comes out normalized without you doing anything.
Embed this converter on your site
Course platforms, captioning guides, and internal wikis can embed this converter free of charge. Open Embed this tool at the bottom of the converter, copy the iframe snippet, and keep the credit link that ships with it. The embedded view is the converter only — no navigation, no analytics, no cookie banner — and files dropped into an embedded copy stay just as local.
Frequently asked questions
What's the difference between SRT and VTT?
They carry the same content — timed text cues — with different syntax. SRT uses commas in timestamps and mandatory cue numbers; VTT uses periods, an obligatory WEBVTT header, and optional styling/positioning that SRT can't express. Browsers natively support only VTT; most desktop players and editing software historically prefer SRT. Conversion between them is lossless in the SRT→VTT direction and drops only styling metadata going the other way.
Does my subtitle file get uploaded anywhere?
No. The file is read by your browser using the local file API, parsed in JavaScript on your machine, and rebuilt in memory. There is no server involved in any conversion — you can load this page, disconnect from the internet, and every module still works.
Do browsers support WebVTT?
Yes — every modern browser (Chrome, Firefox, Safari, Edge) renders VTT captions on HTML5 video via the <track kind="captions" src="file.vtt"> element. It's the only subtitle format with native browser support, which is exactly why web platforms ask for VTT while download-oriented workflows still revolve around SRT.
My SRT looks fine but players reject it — why?
Usually an invisible problem: a byte-order mark at the start of the file, a missing blank line between cues, timestamps using periods instead of commas, or non-UTF-8 encoding mangling accented characters. Paste the file into the converter and convert it to SRT — the output is renumbered, renormalized, BOM-free UTF-8 with correct separators, which resolves the common cases.
Can this create subtitles from a video or audio file?
No — that requires speech recognition, which is a different kind of tool. This page converts, creates, retimes, and previews subtitle text. If you have a transcript from any source, the text-to-SRT creator will time it; if you have audio only, you need a transcription step first.