srtshift

Your subtitles are a second and a half late.

srtshift nudges every cue in a subtitle file by the offset you give it, so the lines land when the words are spoken. One command, no re-encoding, no editor.

142
00:18:04,120 --> 00:18:06,500
00:18:02,620 --> 00:18:05,000
— They're already inside the building.
shifted −1.500s · 983 cues updated
$ srtshift -1.5s heist.srt

What it does

Shift by an offset

Move every cue earlier or later. -1.5s, +800ms, -00:00:02,250 — whatever reads clearest.

Fix a frame-rate mismatch

A 25 fps track on 23.976 fps video drifts further apart as it plays. Rescale it with --fps-from / --fps-to.

Retime one range

Only the back half is off after an ad break? Limit the shift to a span with --range and leave the rest untouched.

Keeps the file intact

Styling, positioning and ASS tags are preserved. Only the timestamps change.

In place or to a copy

Overwrite with -i, or write a new file with -o out.srt and keep the original.

Guesses the encoding

Windows-1251, UTF-8, UTF-16 — detected on read and written back as UTF-8 unless you say otherwise.

Formats

.srt.ass.ssa.vtt.sub (MicroDVD)

Install

A single static binary, no runtime. Prebuilt for Linux, macOS and Windows.

# Linux / macOS
curl -sSL https://srtshift.org/get.sh | sh

# or with Go
go install srtshift.org/cmd/srtshift@latest

Then try it on a file you already have:

srtshift -2s -o fixed.srt episode.srt

Full options and examples live in the documentation.