← Home
FREE TOOL

By Valmera Editorial · Published · Updated

Shift Subtitle Timing

Retime an SRT or VTT file in your browser. Apply a constant offset, or a linear stretch that corrects framerate drift. Nothing is uploaded.

Two common sync patterns have different fixes. If the subtitles are wrong by the same amount all the way through, you need an offset — one number added to every timestamp. If they start close and get steadily worse, you need a stretch — every timestamp multiplied by a factor. Check several cues before choosing: irregular errors may need individual cue edits instead of one correction across the file.

1 · Your subtitle file

Nothing is uploaded. The file is read and rewritten by JavaScript on this page.

2 · The correction

Negative moves the subtitles earlier; use it when they appear after the words are spoken. Positive moves them later. Seconds (-2.4), milliseconds (750ms) and timecodes (00:00:02,500) are all accepted.

Enter how far to move the subtitles. A negative number moves them earlier.

Diagnose It First: Check the Start and the End

Check an identifiable line near the start and another near the end. Record the subtitle timestamp and the moment each line is spoken. These measurements give an initial correction; verify a cue in the middle too, because two matching endpoints do not prove that every scene follows the same timing rule.

Near the startNear the endPattern to investigateCorrection to try
2s out2s out, same directionA constant offset, possibly from an added or removed opening.One offset.
In syncMinutes out, growingA consistent rate difference, if intermediate cues follow the same pattern.Stretch only.
2s outMuch further outA starting offset plus a consistent rate difference.Stretch and offset together.
In syncIn sync, but wrong in the middleDifferent edits or errors in individual cue times.Inspect the affected cues; one linear rule cannot correct this pattern.

The direction matters as much as the size. If a line appears before it is spoken, its timestamps are too small and the offset is positive. If a line appears after it is spoken, the offset is negative. Apply the correction, then check the same moments and an intermediate cue again.

Why Subtitles Drift

Playback speed and frame rate are different

A frame-rate label alone does not tell you to stretch subtitles. A video can be converted to a different frame rate by duplicating or dropping frames; changing playback timestamps is a separate operation. FFmpeg documents these separately in its fps filter and timestamp filter.

Use a frame-rate ratio only when the same sequence actually plays at a different speed between the two versions. Otherwise measure the cue times and use the two-cue solver. WebVTT defines cue timestamps relative to the media playback position, so the timing you hear and see is the relevant check. See the WebVTT timing specification.

A different cut of the same title

Theatrical, extended, broadcast and streaming versions of the same film have different runtimes for reasons that are not linear: a restored scene here, a trimmed one there. A subtitle file from one cut may be perfectly in sync for forty minutes and then jump. This is the case retiming cannot rescue, and it is worth ruling out before you start.

A different head

The most benign cause. Your copy starts with a distributor card the subtitler's copy did not have, or yours has had a cold open trimmed. The offset is constant and usually small — a few seconds — and one number fixes the whole file.

A fourth cause shows up in edited footage rather than downloaded films: subtitles written against one version of an edit, then applied after cuts moved everything. That produces errors that step at each cut rather than drifting smoothly, and no offset or stretch describes it either. If you are editing your own video, generate the captions after the cuts are final — see text-based video editing for why the order matters.

Example Corrections for a Known Speed Change

These examples assume the same frames play at different rates, with no other edits. For a subtitle timestamp of 3600 seconds, the correction is (scale − 1) × 3600 seconds. The amount alone does not identify the cause of a sync problem.

Subs made for → your video isScaleCorrection at original 01:00:00
25 fps → 23.976 fps1.042709about 2 min 34 s later
23.976 fps → 25 fps0.959040about 2 min 27 s earlier
25 fps → 24 fps1.0416672 min 30 s later
24 fps → 23.976 fps1.001001about 3.6 s later

Verify the proposed correction against the actual recording. If the middle still drifts or a scene jumps out of sync, inspect the edit and individual cue times instead of choosing another frame-rate preset.

How to Compute the Stretch Factor by Hand

Every correction here is the same straight line: new = old × scale + offset. A straight line is fixed by two points, so take two measurements — one near the start, one near the end — of a cue's time in the file (call it t) and the time that line is actually spoken in your video (call it T). Put both in seconds.

Suppose the first line of dialogue sits at 00:00:12.000 in the file but is spoken at 00:00:10.500, and a line near the end sits at 01:40:00.000 but is spoken at 01:44:12.800. In seconds that is t₁ = 12, T₁ = 10.5, t₂ = 6000, T₂ = 6252.8.

scale  = (T₂ − T₁) ÷ (t₂ − t₁)
      = (6252.8 − 10.5) ÷ (6000 − 12)
      = 6242.3 ÷ 5988 = 1.042468

offset = T₁ − scale × t₁
      = 10.5 − 1.042468 × 12
      = 10.5 − 12.5096 = −2.010 s

So this file needs stretching by about 4.2% and pulling two seconds earlier: a PAL-rate subtitle set applied to a film-rate copy that also has a couple of seconds of extra head. Check any cue by hand — a cue at 00:30:00.000 (1800 s) becomes 1800 × 1.042468 − 2.010 = 1874.432 s, which is about 00:31:14.4. The tool carries the unrounded scale and offset rather than the six-figure versions printed here, so its output can differ from a hand check by a millisecond or two.

Prefer the exact ratio when the measurement lands near one

The measured 1.042468 is close to 25 ÷ 23.976 = 1.042709, but the difference of 0.000241 is not nothing: over 6000 seconds it is 1.44 seconds of residual drift. Which number should you use? Work out the error in the measurement. If each of your two readings is good to about a quarter of a second, the uncertainty in the scale is roughly √2 × 0.25 ÷ 5988 ≈ 0.00006 — and 0.000241 is four times that. So either one of the readings is worse than you thought, or the drift is not a clean PAL case.

In practice, when a measured ratio falls within about a thousandth of a known framerate pair, use the exact pair and let the offset absorb the rest. The nominal ratio is exact by definition; your two stopwatch readings are not. That is why the tool above shows you the scale it derived — so you can compare it against the presets and decide.

How to Resync a Subtitle File

  1. 1
    Measure the error at the start and at the end
    Play the video and find a line you can identify in the first minute. Note the time it is actually spoken and the time written in the subtitle file. Do the same for a line near the end. Two measurements, four numbers.
  2. 2
    Decide whether it is an offset or a stretch
    If the errors are the same size and direction, try a constant offset. If the error grows at a consistent rate, try a linear stretch and verify a cue in the middle too. An irregular pattern can indicate different edits or cue-level errors that a single offset and scale cannot repair.
  3. 3
    Load the SRT or VTT into the tool
    Drop the file onto the panel above or paste its contents in. Nothing is uploaded — the file is read and rewritten in your browser. The tool reports how many cues it found and which format it detected.
  4. 4
    Apply the correction
    For a constant error, enter the offset in seconds — negative moves subtitles earlier, positive moves them later. For drift, pick the framerate pair or enter a ratio, and add an offset if the file also has a different head. Or use the two-cue solver: give the correct times of an early and a late cue and it computes both numbers for you.
  5. 5
    Check the before-and-after, then download
    The preview shows the first three cues and the last one — the last cue is where a stretch proves itself. If any timestamps were clamped to zero, the tool says so. Copy the result or download it as a new file, then play the video and re-check the same two moments you measured.

A constant offset takes under a minute. A stretch takes as long as it takes to find two lines you can identify at opposite ends of the video — which is the real work.

What This Tool Will Not Do

This utility retimes an existing subtitle file. It does not modify or re-encode video, burn captions into the picture, or transcribe audio. Those are separate jobs that require a video or caption editor.

It applies one linear rule to the whole file. If timing errors vary irregularly between scenes, compare the subtitles with the exact video edit and correct individual cues in a subtitle editor, or obtain a better-matched file. A clamp warning means some adjusted timestamps reached zero; review those opening cues.

Moving timestamps does not correct words or line breaks. Edit that text separately and check it against the audio before using the retimed file.

Burned-In Captions in Valmera Studio

A separate subtitle file can be paired with the wrong video version or given an incorrect playback offset. Burning captions into the picture avoids that separate-file handoff. It does not guarantee that the words or their original timing are correct.

Valmera is an agentic AI video editor. You upload your footage, an agent transcribes it to word-level timestamps from that exact file, and the captions are burned into the picture during the render. Review caption spelling, placement and timing in the preview, especially around cuts. Ask for corrections before exporting the final MP4 in Studio.

Valmera Studio has no SRT or VTT import or export. Use this free utility to retime an existing subtitle file. Use Studio when the deliverable is an edited video with captions visible in the picture. See the auto subtitle generator, karaoke captions, or the captions documentation for what the styling actually covers.

One more thing worth knowing if you edit as well as watch: changing playback speed is the same arithmetic as framerate drift. When you speed a range up or slow it down in Valmera, the captions, music and effects are re-timed against the new program rather than left behind — which is the same reason a stretch works here.

Stop Fixing Subtitle Files

Upload footage, describe the edit, get captions timed against the exact file they are burned onto. Account creation and uploads are free; a subscription is required to edit.

Create an account →
See pricing →

Frequently Asked Questions

Load the SRT or VTT into the tool above and enter an offset in seconds. A negative number moves every cue earlier, a positive number moves every cue later. The tool rewrites every timestamp in the file and gives you the result to copy or download. If the subtitles are wrong by a different amount at the end of the video than at the start, an offset alone will not fix it — you need the stretch, which is the second mode.
If the subtitles appear before the words are spoken, their timestamps are too small, so you need a positive offset to push them later. Measure it: pause on a line you can identify, note the time it is actually spoken, and subtract the time written in the file. If the line is spoken at 00:01:14.400 and the file says 00:01:12.000, the file is 2.4 seconds early and the offset is +2.4. Subtitles lagging behind the audio need the same measurement with the opposite sign.
If the error grows at a consistent rate, a timing-scale mismatch may be the cause. Different playback rates between source copies are one example. Measure cues near the start, middle and end before choosing a correction: a linear stretch can address consistent drift, while missing scenes or irregular timing errors need cue-by-cue work or a subtitle file for the correct edit.
The rule is scale = the framerate the subtitles were made for, divided by the framerate of your video. Subtitles authored against a 25 fps PAL copy, applied to a 23.976 fps copy, need 25 ÷ 23.976 = 1.042709. The reverse — 23.976 fps subtitles on a 25 fps copy — needs 23.976 ÷ 25 = 0.959040. For the NTSC pulldown, 24 ÷ 23.976 = 1.001001, and its reverse is 0.999000. All six are preset buttons in the tool.
No. This utility reads the selected subtitle file locally in your browser and rewrites its timestamps there. It does not send the subtitle text to Valmera or require an account. Copy or download the result before closing the page. The utility changes an existing SRT or VTT file; it does not analyze, render or modify your video.
Yes. It detects the format and preserves each timestamp's separator, cue identifiers, settings, styling, comments and line endings. WebVTT word timestamps inside cue text move with the cue boundaries. If clamping or millisecond rounding would put a word timestamp outside its cue or break its ordering, the marker is removed, the text is preserved and the tool reports the removal for review.
They are clamped to 00:00:00,000 and the tool tells you how many were clamped. A negative timestamp is not valid in either format, and players either reject the file or mis-handle the cue. If cues are being clamped it means your negative offset is larger than the space available at the head of the file — the opening lines have nowhere left to move — which usually means the offset is wrong, or those first cues belong to content your copy of the video does not have.
No, and this is worth recognising early rather than after an hour of adjusting. Retiming applies one linear rule across the whole file. If the errors are scene-dependent with no consistent pattern, the file was written against a different cut of the video — a different regional release, a version with a scene restored, or a broadcast copy with material removed. There is no scale and offset that maps one cut onto the other. Find a subtitle file made for your exact release instead.
The free timing shifter reads and downloads existing SRT or VTT files. Valmera Studio is a separate workflow: it generates captions from uploaded footage and burns them into the video, with no SRT/VTT import or export. Burned-in captions avoid a separate playback file but can still contain transcription or timing errors. Review them before the final Studio export.

An Agent That Edits the Video, Not the Sidecar

Describe the edit in plain English. Cuts, captions, music and colour — then export at source quality from your original file.

Create an account →
See pricing →

Related Articles

Auto Subtitle Generator
Generate subtitles from your own audio, timed against the file they are burned onto.
Add Captions to Video
Word-timed captions: named presets, bundled fonts, per-word emphasis.
Docs: Captions
Presets, fonts, animations, and the editable transcript that re-renders them.
All AI Video Editing Tools
Every editing job Valmera can do, one page each.