Subtitle Converter — SRT ↔ VTT ↔ Text

Drop or paste a subtitle file and convert between SRT, WebVTT, plain text, and CSV — parsed and rebuilt entirely in your browser. Your file never leaves your machine. Plus: create an SRT from a bare transcript, fix sync drift, and preview any subtitle file.

SRT and VTT store the same thing — numbered, timed text cues — in slightly different syntax. SRT uses commas in timestamps (00:01:02,500) and requires cue numbers; VTT uses periods (00:01:02.500), starts with a WEBVTT header, and supports styling and positioning. Converting between them is a pure text transformation — no re-encoding, no upload needed.
Drop an .srt, .vtt, or .txt file here (or click to choose) — or paste below.
Read locally by your browser. Nothing is uploaded.
Convert to:
Embed this tool

Free to embed on any site. The credit link must stay.

Every conversion happens in your browser — disconnect from the internet after loading and it still works. UTF-8 BOMs and Windows (CRLF) line endings are handled automatically.

Out of scope: turning audio or video into subtitles requires speech recognition, which this tool doesn't do. It converts, creates, and retimes existing subtitle files and text.
[ Ad slot — replace with AdSense / Ezoic code ]

Text → SRT creator

Paste a bare transcript and get a timed SRT — no typing timestamps by hand. Timing is assigned automatically from reading speed (each cue lasts as long as its text takes to read) or spread evenly across a total duration. Fine-tune afterward with the time-shift module below.

15–17 is comfortable for most viewers.
Long lines are split at sentence/word boundaries.

Time shift / resync

Applies to whatever is loaded in the converter input above. Shift moves every cue by the same amount — for subtitles that are uniformly early or late. Stretch multiplies every timestamp — for drift that grows over time (usually a frame-rate mismatch).

1 = no change. 25 fps file on 23.976 fps video → 1.043.

Viewer — open and preview a subtitle file

Whatever is loaded above is listed here as readable cues — a quick way to open an .srt or .vtt without a video player.

No cues loaded yet.

Translate workflow — extract, translate elsewhere, re-merge

This tool does not translate. What it does: export the text of every cue as numbered lines, so you can run them through any translator you like — then paste the translated lines back and they're re-merged onto the original timings, giving you a translated subtitle file with untouched sync.

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.

[ Ad slot — replace with AdSense / Ezoic code ]

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.

[ Ad slot — replace with AdSense / Ezoic code ]

Related tools

⚒ Built by Done In Browseruse full version