Everything, Everywhere
Verified Specification | Standardized Formulas | Instant Precision
Secure & Private (Zero Data Retention) Free Access • No Sign-Up

Subtitle Time Shifter & Resync (.SRT & .VTT)

Easily fix out-of-sync movie and video subtitles. Shift timestamps by exact milliseconds, correct frame rate drift (23.976 fps to 25.000 fps), or apply two-point linear calibration with zero file uploads.

Use positive values for subtitles appearing too early, negative for subtitles appearing too late.

Subtitle Mathematics & Clock Drift Derivations

Subtitle synchronization problems occur in two fundamental ways: constant linear offset (fixed delay caused by introductory studio credits) and progressive frame rate clock drift (speed difference between PAL 25.0 fps, Film 23.976 fps, and NTSC 29.97 fps).

Timestamp Math Derivation
Tms = (HH × 3,600,000) + (MM × 60,000) + (SS × 1,000) + MS
Tnew = max(0, Tms + Δshift)
SRT Separator: , (comma)
VTT Separator: . (period)
Frame Rate Clock Drift Formula
Ratio = FPSsource / FPStarget
Tsynced = Tms × Ratio
PAL Speedup: 23.976 / 25.000 = 0.959040
PAL Slowdown: 25.000 / 23.976 = 1.042709
2-Point Linear Regression
m = (Tv2 - Tv1) / (Ts2 - Ts1)
b = Tv1 - m × Ts1
Tsynced = max(0, m × Tsub + b)
Recalibrates variable clock discrepancies
Feature Attribute SubRip (.SRT) WebVTT (.VTT)
Initial Header Requirement None (Starts with sequence integer) Mandatory WEBVTT header string
Millisecond Separator Comma (,) Period / Dot (.)
Hour Digits Optionality Strict 2-digit required (00:01:20,000) Optional when < 1 hour (01:20.000)
Styling & Positioning Support Basic HTML-like tags (<i>, <b>) Full CSS cue pseudo-classes

5 Critical Subtitle Resync Traps

1. Millisecond Separator Corruption (Comma vs Period Syntax Crash)

The SubRip specification strictly requires a comma between seconds and milliseconds (00:01:20,500). WebVTT strictly requires a period (00:01:20.500). Naive search-and-replace scripts that replace commas with periods or vice-versa will render the subtitle file completely unreadable in hardware players, TVs, or VLC. Our shifter dynamically detects and preserves the exact format-compliant separator.

2. Negative Timestamp Clamping Overflow

When shifting subtitles earlier by a negative millisecond offset (e.g. -3000ms), cue lines that begin within the first 3 seconds of the movie will compute to negative timestamps (e.g. -00:00:01,500). Negative timestamps violate the parser grammar, causing video players to drop all subsequent subtitles or crash. Our algorithm clamps all computed values to 00:00:00,000.

3. Constant Offset vs Frame Rate Speed Drift

If your subtitles are aligned at the 5-minute mark but are 3 seconds late at the 60-minute mark, your issue is not a constant linear delay—it is a frame rate mismatch (23.976 fps film rip played against a 25.000 fps PAL broadcast). Applying a static shift will never fix progressive frame drift; the subtitle timestamps must be stretched or compressed by the exact mathematical frame ratio.

4. UTF-8 Byte Order Mark (BOM) & Encoding Corruption

Windows text editors frequently save text files as "UTF-8 with BOM" (inserting invisible bytes EF BB BF at index 0). In WebVTT, this displaces the initial WEBVTT header, causing HTML5 <track> elements to reject the file with a MIME type mismatch error. Our in-browser reader processes clean Unicode UTF-8 strings.

5. Multi-Line Cue Overlapping Collisions

Indiscriminately shifting cues without checking bounding limits can cause rapid-fire dialog cues to overlap with preceding subtitles, causing media players to flicker or display dual stacked subtitles simultaneously on screen.

Frequently Asked Questions: Subtitle Time Shifter

Pause the video when someone starts speaking and note the player timestamp. Then look at the subtitle file to see what timestamp that line has. Subtract the subtitle timestamp from the video timestamp. For example, if speech starts at 00:01:15,000 but the subtitle shows at 00:01:13,500, enter +1500 ms.
Never. The FileReader API reads your subtitle file directly into your browser memory, shifts the timestamps using local JavaScript regex expressions, and downloads the result as a new file. Zero network transmission occurs.
Yes, both SubRip (.srt) and WebVTT (.vtt) file formats are fully supported, automatically detecting and preserving each format's distinct decimal separators.
Our shifter safely clamps all resulting timestamps to 00:00:00,000 so that your file never contains invalid negative timecodes that could crash media players.
Yes, simply enter 1500 for 1.5 seconds, 500 for half a second, or 250 for a quarter of a second. The millisecond input allows micro-second timing precision.
Sponsored Utility
While You're Here
Sponsored Recommendations
Advertisement