Shift and convert SRT / VTT subtitles
Subtitles landing half a second early? Shift the whole file at once. Need a .vtt for the web from a .srt? One button. The file never leaves your machine: your browser reads it, nothing is uploaded.
A negative shift moves subtitles earlier, a positive one later. Times never go below zero.
What each button does
Shift adds (or removes) the same number of milliseconds to every cue: that's the fix when the whole file is offset in one block, typically after a re-export or when the transcript was made on a slightly different cut. → SRT and → VTT rewrite the file in the other format: SRT numbers the blocks and uses a comma before milliseconds, WebVTT starts with a WEBVTT line and uses a dot. Strip tags removes the <i>, <font> and other styling leftovers that break some players.
The overlaps counter flags cues that start before the previous one ends. One or two is nothing; a dozen and your file will flicker text on screen.
The parser is deliberately forgiving
Windows or Unix line endings, missing block numbers, comma or dot before milliseconds, two-part WebVTT timestamps (00:01.000), NOTE lines and cue positioning settings: all accepted and normalised on export. A block it can't understand is skipped rather than failing the whole file.
Frequently asked questions
Is my file uploaded anywhere?
No. The file is read by your browser (FileReader) and everything is processed on your machine. Cut your connection and the tool still works. That's the whole point: a client project's .srt has no business sitting on an unknown server.
What's the difference between SRT and VTT?
SRT is the historic format for players and editing software: numbered blocks, a comma before milliseconds. WebVTT is the web <track> format: a WEBVTT header, a dot before milliseconds, and positioning options. Premiere and YouTube accept both.
How much should I shift by?
Pick a precise word in your video, measure the gap with its subtitle, shift by that gap. A quarter of a second (250 ms) is often enough. If the drift grows through the video, it isn't an offset but a frame rate problem: the file was made against a 25 fps version and played at 23.976, for instance.
Should I strip the styling tags?
Only if your player shows them literally or rejects the file. Premiere imports <i> without complaining, some TVs and web players don't.
Accents are broken after import.
Your file isn't UTF-8. Reopen it in a text editor, save as UTF-8, paste it back here. Exports from this page are always UTF-8.
Does it handle files with thousands of cues?
Yes, processing is instant even on a long documentary. It's text: 5,000 blocks are only a few hundred kilobytes.