Subtitle sync and converter
Subtitles landing before or after the audio? Move them by a few seconds, or stretch them with two reference points when the gap grows as the film goes on. Convert SRT to VTT and back, with nothing ever uploaded.
or click to pick one — the file stays on your device, nothing is uploaded anywhere
Use this when the subtitles are off by the same amount from the first line to the last. Both a dot and a comma work: 1.5 · -2,3 · 0.25.
🔒 Everything happens inside your browser: the subtitle file is never uploaded to any server.
When to shift and when to stretch
If the first line is two seconds late and the last line is also two seconds late, the offset is constant and a plain shift fixes everything. If instead the opening lines are almost right and the ending is wildly out, the drift grows with time: shifting will never work, you have to stretch the timing as well.
How the two-point stretch works
The tool builds the line t′ = a·t + b that puts the two times you give it — one near the start, one near the end — exactly where they belong: a is the speed factor, b the constant offset. Pick reference points as far apart as you can: if they sit close together, misreading one by half a second is magnified across the whole film. The factor and the drift in seconds per hour are shown in the summary so you can sanity-check them.
The classic case: 25 fps versus 23.976 fps
European TV transfers run at 25 frames per second, film transfers at 24000/1001 = 23.976. Subtitles made for the 25 fps version, dropped onto the 23.976 film, must be multiplied by 25 ÷ 23.976 = 1.042708: one hour becomes 1h 02m 33.75s, so you gain 2 min 34 s every hour. The other way round the factor is 0.959041. Those are the two ready-made presets, and you can add a fixed shift on top if your copy has a longer or shorter opening.
SRT versus VTT: what actually differs
SubRip (.srt) numbers every cue and puts a comma before the milliseconds. WebVTT (.vtt), the format HTML5 video uses, starts with a WEBVTT line, uses a dot, and allows NOTE and STYLE blocks plus per-cue positioning settings. Converting to .srt strips those blocks and settings — SRT has no equivalent — and the tool reports how many it removed; converting to .vtt keeps them. SRT output is always renumbered from 1.
Broken accents, negative times and other traps
Plenty of .srt files floating around are saved as Windows-1252 rather than UTF-8, and saving one from Notepad as «Unicode» produces UTF-16. The tool checks the first two bytes of the file for a UTF-16 byte order mark, then tries strict UTF-8 and, if that fails, re-reads everything as Windows-1252; it always saves back as UTF-8 with no BOM. If a backward shift pushes a cue before zero the tool starts it at 00:00:00, and if the cue ended before the start of the video it drops it altogether — either way it tells you how many cues it touched. Files never leave your browser: nothing is uploaded.