Shift subtitle timings earlier or later by a set amount, or rescale them for a different frame rate, in SRT or WebVTT format.
A constant shift fixes subtitles that are early or late by the same amount throughout. A frame-rate rescale fixes drift that grows over time, for example captions timed for 25 fps played against 23.976 fps video.
Two different faults both look like subtitles being out of sync. A constant offset means every cue is early or late by the same amount; a fixed shift in seconds corrects it. Drift means the gap grows as the video plays, which usually happens when captions were timed for one frame rate and the video runs at another; rescaling multiplies every timestamp by the ratio between the two rates. This tool detects whether the input is SRT or WebVTT, applies the shift and the optional rescale to every timestamp line, and returns the file in the same format with its text, cue numbers and header unchanged. Timings that would go negative after a backwards shift are clamped to zero.
Should a shift or a rescale be used? Use a shift when the gap between speech and captions is the same at the start and the end of the video. Use a frame-rate rescale when the captions start in sync and drift further out, or start out and drift in, which points to a frame-rate mismatch.
Which frame rates are supported for rescaling? 23.976, 24, 25, 29.97 and 30 frames per second, in any combination. Pick the rate the captions were timed for as the from value and the rate of the video as the to value.
Does the file format change? No. SRT goes in and SRT comes out, and WebVTT keeps its header and dot timestamps. Only the numbers on the timestamp lines change.