Fix Out-Of-Sync Subtitles By Retiming Them Precisely
Subtitles that drift out of sync are one of the most common and most maddening problems in home video. You start a film, the dialogue and the captions line up for a minute, and then they slowly slide apart until the words on screen belong to a scene that already finished. This tool fixes that by retiming your SRT or WebVTT file directly, running entirely in your browser so your file is never uploaded and the result appears instantly. It does not touch the video at all; it simply rewrites the timestamps in the subtitle file so they land where they should. That is the right fix, because the caption text is almost always correct and only the timing is wrong.
The first and most common operation is a simple shift, where every timestamp moves by the same signed amount. If your captions appear two seconds too early, you add a positive offset so each cue happens later; if they appear too late, you use a negative offset to pull them earlier. The math is deliberately transparent: a new time equals the old time plus the delta, and any result below zero is clamped to zero so a cue can never start at a negative time. As a concrete example, adding two thousand milliseconds to a cue that started at 1500 milliseconds produces a new start of 3500 milliseconds, while subtracting two thousand milliseconds from that same 1500-millisecond cue would go negative and is instead clamped to zero. Millisecond overflow is carried correctly into seconds and minutes, so the rewritten timestamps stay valid.
The second operation handles a subtler failure: progressive drift caused by a frame-rate mismatch. This happens when a subtitle file was made for one frame rate and the video actually plays at another, so the two start together but grow further apart the longer the video runs. A fixed shift cannot fix this because the error is not constant; it accumulates. The answer is to scale every timestamp by the ratio of the two frame rates, where the new time equals the old time multiplied by the source frame rate divided by the target frame rate, then rounded to the nearest millisecond. For instance, a cue at sixty thousand milliseconds scaled from a source of 23.976 frames per second to a target of 25 frames per second becomes roughly 57542 milliseconds, pulling the whole file into step gradually rather than all at once.
The third operation is an anchored shift, which moves only the cues at or after a chosen timestamp and leaves everything before it untouched. This is exactly what you need when the first part of a film is fine but a later section is off, perhaps because a scene or an advertisement break was cut from one version of the video. You set the anchor at the point where the problem begins and apply an offset only from there onward. There is also a convenient sync-by-matching helper: you tell the tool the time a specific line currently appears and the time it should appear, and it computes the required delta for you as the target time minus the current time, so you never have to work out the offset by hand.
Throughout all of this the tool is careful to preserve everything that is not the timing. The subtitle format is kept intact, so an SRT file stays SRT and a WebVTT file stays WebVTT; the order of the cues is preserved; and the index numbers are carried through unchanged. Negative times are always clamped to the zero timestamp, and it shows a before-and-after preview of the first and last cue so you can confirm the direction and size of your adjustment at a glance before you commit. The workflow that works best is to fix one known line first, using the matching helper or a small shift, then play the video and watch whether the gap holds steady or keeps growing. A steady gap means you need a shift; a growing gap means you need a scale. Because retiming is deterministic and instant, you can try an adjustment, preview it, and refine it in seconds until the captions sit exactly where the dialogue does.