HomeToolsVideo Tools › Subtitle Timing Shifter

Subtitle Timing Shifter

Live

Shift every cue in a subtitle file earlier or later by a precise number of seconds — perfect for fixing sync drift after re-encoding or trimming.

About Subtitle Timing Shifter

Subtitle sync breaks in one of two ways. The first is a constant offset: every cue fires at the same fixed distance from where it should — 2 seconds late, 0.4 seconds early, uniformly across the entire file. This happens when a video is re-encoded with an encoder that handles the start timestamp differently, when a pre-roll intro is trimmed from the front of the video but the SRT was built against the original, or when a subtitle file produced for one version of a video is applied to a slightly different cut. The second is frame-rate drift: a gradually increasing error where early cues are slightly off and late cues are significantly off, caused by a frame-rate mismatch between the video the SRT was built against and the one it is being used with. The AT USE Subtitle Timing Shifter fixes the first kind: constant offsets. It does not fix drift.

The tool takes a shift value in seconds — positive shifts every cue later, negative shifts every cue earlier — and rewrites every timestamp in the file. Enter -2 to fix subtitles that fire 2 seconds late. Enter 3 to fix a file produced before a 3-second intro was added. The shift accepts three decimal places: -0.317 and 2.500 are both valid. This matters for sub-second sync problems, which are common when auto-captioning services produce an SRT that is a few frames ahead of the actual audio. All formats that carry timestamp data — SRT, WebVTT, ASS/SSA, SBV — are supported. Processing runs entirely in your browser; your subtitle files never leave your device.

Partial-file shifting

The "Start from" field shifts only the cues that appear after a specified time in the video. Use this when a video edit inserted a new segment mid-file: cues before the insertion point are correct, and only the cues after it need to shift forward. Set the offset to match the inserted segment duration and set "Start from" to the time just after the insertion point. Cues before that timestamp are written back unchanged; only cues at or after the threshold are shifted.

What the tool changes — and what it does not

Only the start and end timestamp of each cue is modified. The cue text, sequence numbers (SRT), actor labels (ASS), styling tags, and all format-specific metadata are written back exactly as they were. The relative duration of each cue is preserved — a cue that spans 1.8 seconds still spans 1.8 seconds in the output. The only change is the absolute position of each cue in the video timeline.

Round-trip accuracy

Because the tool stores timestamps at millisecond precision without rounding (SRT timestamps resolve to milliseconds; WebVTT timestamps resolve to milliseconds), a shift-and-reverse operation is lossless. Shift a file by -2.5, then shift the output by 2.5, and the resulting timestamps are identical to the original. This makes it safe to experiment with shift values until the sync is correct without accumulating rounding error from repeated adjustments.

What to do when the offset does not feel constant

If the first subtitle is 1 second late but the last subtitle is 4 seconds late, the problem is frame-rate drift, not a constant offset. A single shift value will not fix this — applying -2.5 makes the middle correct but the start and end wrong. Frame-rate drift requires a subtitle editor that can apply a proportional time stretch (multiplying every timestamp by a correction factor). Aegisub is the standard desktop tool for this; the approach is to calculate the ratio of the source and target frame rates and apply it as a "linear time stretch" operation.

Common use cases

  • Fixing a subtitle file after trimming an intro: A webinar recording has a 45-second waiting-room screen at the start. The final published video cuts that screen, but the SRT was generated from the original recording. Every subtitle fires 45 seconds late. Entering -45 in the shift field corrects all 200+ cues in under a second, without opening a subtitle editor.
  • Correcting a re-encode offset: A video team re-encodes a master file for web delivery and discovers the new MP4 has a 0.833-second encoding offset relative to the SRT's reference. The audio starts 833 ms earlier than the subtitle cues expect. Entering -0.833 corrects every cue simultaneously, with three decimal places of precision — necessary because 0.8 would leave an audible 33 ms gap.
  • Shifting only post-insertion cues after a mid-video edit: An online course editor inserts a 30-second sponsor card at the 10-minute mark between two lesson sections. Subtitles for the first 10 minutes are correct; subtitles for the remaining content need to move forward by 30 seconds. Setting offset to 30 and "Start from" to 00:10:00 shifts only the post-insertion cues, leaving the first section untouched.
  • Correcting a translator-returned file with a uniform delay: A localized subtitle file comes back from a translator with every timestamp 0.5 seconds earlier than the original (a common artifact when the translator's subtitle editor re-imports the file with a half-second delay correction). Entering 0.5 restores the correct timing across the entire translated file without re-timing any cue manually.
  • Fixing auto-generated captions that are a few frames off: An auto-captioning service returns a WebVTT file for a recorded Zoom call where every caption fires about 0.3 seconds after the audio. Entering -0.3 in the shift field brings the entire file into sync. The sub-second precision is necessary here — a full-second shift would overcorrect and leave the captions running early instead.

How to use it

  1. Drop your subtitle file onto the upload zone. Accepts SRT, WebVTT (.vtt), ASS/SSA (.ass/.ssa), and SBV (.sbv) files.
  2. Enter the shift value in seconds. Use a negative number to move cues earlier (fix subtitles that fire too late), or a positive number to move cues later (fix subtitles that fire too early). Decimals accepted up to three places: -0.317, 2.500.
  3. Optionally set a "Start from" time if only part of the file needs to shift — cues before that time are left unchanged.
  4. The preview shows the first five cues with the adjusted timestamps applied. Confirm the new timing looks correct before downloading.
  5. Click "Download" to save the corrected file. The output uses the same format and filename as your input file, with the shift applied.

Frequently asked questions

What is the difference between a constant offset and frame-rate drift?

A constant offset shifts every cue by the same amount — "the subtitles are always 2 seconds late from the beginning to the end." Frame-rate drift is a gradually increasing error: the first subtitle is slightly off, and the last subtitle is significantly off, because the video's frame rate is different from the frame rate the SRT was built against (typically 23.976 fps vs. 25 fps or 29.97 fps). This tool fixes constant offsets exactly. For frame-rate drift, you need a subtitle editor with a linear time-stretch function (Aegisub has this under Timing → Linear time stretch). If you are unsure which you have, check whether the first cue and the last cue are off by the same amount — if they are, it is a constant offset.

What happens to cue text, actor labels, and styling when I shift?

Nothing changes except the start and end timestamps of each cue. Cue text, sequence numbers, ASS actor labels, override tags like {\b1}, positioning instructions, and all other format-specific fields are written back to the output unchanged. The relative duration of each cue (the gap between its start and end time) is also preserved exactly.

Can I enter a shift smaller than 0.001 seconds?

No. The shift field accepts up to three decimal places, which corresponds to millisecond precision. Subtitle formats store timestamps at millisecond precision (SRT) or better (WebVTT stores to the millisecond; ASS to the centisecond). A shift smaller than 1 ms has no effect because the file format cannot represent it. In practice, shifts under 50 ms are rarely perceptible without frame-stepping through the video.

If I shift the wrong direction, can I undo it?

Drop the shifted file back into the tool and enter the inverse value. If you shifted by -2.5, entering 2.5 restores the original timestamps. Because the tool stores millisecond-precision timestamps without rounding, the round-trip is lossless — the resulting timestamps are identical to the original file.

The first few cues are correct but later cues drift further out of sync. What is wrong?

This is frame-rate drift, not a constant offset. The subtitle file was built at a different frame rate than the video it is now being applied to (for example, the SRT was produced for 23.976 fps but the video was re-encoded at 25 fps). Over a 1-hour video, this causes roughly a 4-second drift by the end. A constant offset cannot fix this — you need a subtitle editor that supports proportional time-stretch. Aegisub (free, open source) handles this with a two-point resync against known correct cue times.

Does this work on subtitles with multiple speaker tracks?

Yes. The shift applies uniformly to all cues in the file, regardless of which speaker or actor label a cue belongs to. If you are using ASS format with named actors and the file has multiple tracks embedded, all tracks shift by the same amount. If individual tracks need different shifts (for example, one speaker's audio sync differs from another's), that is a different problem not solvable with a global shift — it would require splitting the file by actor and shifting each track separately before recombining.

Keep going

More video tools

Other tools in the Video category on AT USE.

Live Video Tools

YouTube Thumbnail Downloader

Grab any public YouTube video thumbnail in all official sizes — instantly, no login.

Open tool
Live Video Tools

YouTube Embed Code Generator

Build privacy-friendly, responsive YouTube embed code with start/end times and player options.

Open tool
Live Video Tools

Video Aspect Ratio & Resolution Calculator

Solve width, height, or aspect ratio for any video — with presets for 16:9, 9:16 Shorts, square, and ultrawide.

Open tool
Live Video Tools

YouTube Timestamp Link Generator

Build deep links to specific moments in a YouTube video. Bulk convert chapter lists in one paste.

Open tool
Live Video Tools

YouTube Chapter Marker Generator

Format your timestamp list into a YouTube-compliant chapter description block.

Open tool
Live Video Tools

Vimeo Embed Code Generator

Generate Vimeo embed code with DNT mode, custom color, autoplay, loop, and a responsive wrapper.

Open tool