Subtitles out of sync? Shift all timestamps by a fixed offset — paste SRT, enter seconds, download fixed. Done in five seconds.
Subtitle timing goes out of sync more often than you'd think. The most common culprit is a mismatched cut: you downloaded an SRT for a 24-minute cut of a video, but your file is a 24-minute-05-second version because it starts a bit earlier. Every timestamp is offset by five seconds, and no video player can fix that on the fly. A bulk shift is the correct answer.
Another frequent case: subtitles created from an AI transcription of an audio track that lags the video. Whisper produces accurate timestamps relative to the audio it processes, but if the audio was captured with a small buffer delay, everything is off by a fixed amount. Shift once, done.
Fansubbers and translators use this all the time when adapting a foreign-language SRT to a new video source. The translation is fine — it's the timestamps that need to slide.
Start with a spot check. Open the video, pick a clear line (usually near the beginning), see the timestamp on the SRT, note when it should appear in the video. The difference — often 0.5 to 3 seconds — is your offset.
Positive means delay: use +1.5 if subtitles show up 1.5s before the audio. Negative means advance: use −1.5 if subtitles show up 1.5s after.
If the offset works at the start but drifts by the end, don't keep shifting — you have a framerate mismatch, not a constant delay. A 25 fps SRT applied to a 23.976 fps video will drift steadily. That needs a rate conversion, not a shift. If you notice drift, split the SRT at scene boundaries and shift each block separately.
Everything happens in your browser. The SRT text is parsed with JavaScript, timestamps are recalculated, and the result is written back to a new file for you to download. Nothing is uploaded — you can verify by opening DevTools and watching the Network tab. Nothing shows up.
Keep a copy of the original SRT before you shift. If the offset is wrong you can re-import and try again; if the file is gone you've lost your reference. For CJK subtitles or subtitles with special characters, make sure the file opens in UTF-8 — VS Code, Sublime, or a modern Notepad handles this by default.
Yes — completely free, no sign-up, no upload limits, no ads, no watermark on the output file.
No. All processing happens locally in your browser using JavaScript. Your SRT never leaves your device. You can verify this in your browser's DevTools Network tab.
Yes. The tool accepts decimal offsets down to 0.001s. So 1.75, 0.35, −2.4 all work fine.
The tool is designed for SRT. VTT is very similar and often works with light editing, but for guaranteed correctness convert VTT to SRT first (many tools do this in one click, including our Subtitle Translator).
Not in one pass — the offset applies to every timestamp. For partial shifts, split the SRT into sections (in any text editor), shift each section, then concatenate. Keep the numbering sequential if your player is strict about it.
For framerate conversion (e.g., 24 → 25 fps) each timestamp needs to be scaled, not shifted by a constant. Use a subtitle editor like Aegisub or Subtitle Edit for that. A shift here fixes constant offset only.