Subtitle time shifter

Open or paste subtitles, then enter a time shift or two matching timing anchors. Validate, preview and download SRT or WebVTT without uploading files.

Shift or convert a local SRT or WebVTT subtitle file. Enable JavaScript to use the editor.

How it works

The parser follows the Library of Congress SRT block description and W3C WebVTT timestamp syntax. It checks cue durations, numbering, order and overlaps. Overlaps are warnings: WebVTT allows simultaneous subtitle cues. SRT output is numbered sequentially; output cues are sorted by start time.

Shift: t′ = t + shift Anchors: a = (target₂ − target₁) ÷ (source₂ − source₁); b = target₁ − a × source₁; t′ = a × t + b Optional frame conversion: final time = t′ × original fps ÷ new fps

Anchor values and shifts use milliseconds. The anchor formula solves a straight line through the two supplied pairs. Frame conversion assumes the same frame indices at a new playback rate; enter rates from your actual media. It runs after the shift or anchor correction. No intermediate values are rounded; exported times round to the nearest millisecond. Negative times and cues collapsed by rounding are rejected.

Input is limited to 1 MB of UTF-8 text and 10,000 lines as a local resource safeguard. Use standard blank-line-separated SRT blocks or WebVTT. WebVTT metadata blocks and settings are retained for VTT output; SRT conversion drops those features and inline timestamp tags. SRT to VTT retains b/i/u tags and escapes other text, including arrows and unsupported tags, as character references. VTT to SRT preserves other markup; review player compatibility. Files are decoded as UTF-8.

Worked examples

Move a cue later

A cue from 00:00:01,000 to 00:00:03,000 shifted by +1,500 ms becomes 00:00:02,500 to 00:00:04,500.

Correct progressive drift

Map original 10,000 ms to 12,000 ms and original 70,000 ms to 78,000 ms. The scale is 1.1 and the offset is 1,000 ms. A cue at 40,000–42,000 ms becomes 45,000–47,200 ms.

Change playback frame rate

With no other correction, original 24 fps and new 25 fps multiply times by 0.96. A cue at 10,000–12,000 ms becomes 9,600–11,520 ms.

Frequently asked questions

Which direction should I shift subtitles?
Use a positive shift when subtitles appear too early. Use a negative shift when they appear too late. A shift of 1,000 ms adds one second.
Why do subtitles drift farther out of sync?
A constant shift cannot fix a changing timing difference. Choose two well-separated original and corrected times to estimate a linear correction. Edits or missing scenes may need separate corrections.
Can I convert SRT to WebVTT?
Yes. Output uses a WEBVTT header and dot-separated milliseconds. VTT to SRT removes VTT-only metadata, settings, cue IDs and inline timestamp tags; check the downloaded result in your player.
Are overlapping cues invalid?
WebVTT subtitles can overlap. The tool reports overlaps for inspection rather than deleting or shortening cues.
Are my subtitle files uploaded?
No. Reading, transformation and downloading happen locally in your browser. The file input accepts UTF-8 text up to 1 MB and 10,000 lines.

Sources

Last reviewed 2026-11-14. The method is written out above so you can check our math.