Subtitle Repair · Timeline Overlap Fixer

Fix overlapping SRT subtitles — automatically

Two cues competing for the same screen? SRTKit detects timeline collisions in your .srt file and rewrites them into clean, non-overlapping segments. No sign-up, no forced watermark on exports, no manual retyping.

No account required No forced watermark on exports [TODO:实测→定稿:processed in your browser · auto-deleted within X hours]

Why do SRT subtitles overlap in the first place?

Most overlapping subtitles aren't a player bug — they're a file problem that survived export. The three patterns we see most often:

Pattern 1

Cue starts before the previous cue ends

Auto-generated captions often emit a new line the instant the speaker changes, ignoring the previous cue's --> end. Common with raw speech-to-text exports.

Pattern 2

Cue time range fully contains another

A long scene caption sits on top of a short reaction line. Players like VLC and browsers will either hide one or stack them, both look broken on screen.

Pattern 3

Identical timestamps across many cues

Re-syncing tools sometimes stamp a batch of cues with the same in/out pair — every cue is "overlapping" with every other cue.

Pattern 4

Negative duration after time-shift

After you shift timing, a cue can end before it starts. Some players swallow it silently — yours isn't broken, the file is.

SRTKit treats overlap as a structural problem, not a cosmetic one. Every overlapping pair is rewritten with a deterministic policy so the output is the same every time.

How does the auto-fix actually work?

Upload an .srt file. We parse the timeline, build an interval graph, then resolve every collision in one pass.

1 · Detect

Each cue's start and end is converted to milliseconds. We flag any pair where A.start < B.end AND B.start < A.end — that's the canonical overlap test.

2 · Sort

Cues are sorted by start time, then by end time. Sorting first means our resolver never has to backtrack through the file.

3 · Resolve

For each collision we apply a policy chain: trim the trailing cue's start to the leader's end (default), or split a long cue into two when a short one fits inside it. You pick the policy; we apply it consistently.

4 · Re-emit

Clean cues are written back out as a standards-compliant SRT. No re-encoded video, no bundled media, no forced watermark on exports.

Millisecond-accurate boundaries
Resolves nested overlap
Preserves cue text & IDs
Outputs spec-compliant SRT

Before / after — what a fixed timeline looks like

Before · broken
1 00:00:01,000 --> 00:00:04,500 Hello, and welcome back. 2 00:00:03,200 --> 00:00:05,000 Today we're talking about... 3 00:00:06,000 --> 00:00:09,500 Let's get started.
After · clean
1 00:00:01,000 --> 00:00:03,200 Hello, and welcome back. 2 00:00:03,200 --> 00:00:05,000 Today we're talking about... 3 00:00:06,000 --> 00:00:09,500 Let's get started.

Cue 1 was clipped at 4.5s while cue 2 started at 3.2s — a 1.3s window where both lines drew on top of each other. SRTKit trims cue 1 to end exactly when cue 2 begins.

Which overlap style do you want to handle?

Different captions need different fixes. Pick the one closest to your file:

Repair SRT timeline overlap

The general case — any two cues whose time ranges intersect. We trim, split, or shift based on the policy you choose.

Fix timeline overlap →

Merge duplicate subtitle cues

Same start, same end, slightly different text. We collapse them into one cue, keeping the longest text by default.

Merge duplicates →

Resolve nested subtitle ranges

Long cue contains a short cue. We split the outer cue into two halves and slot the short one between them so all three play in order.

Un-nest ranges →

Fix negative cue duration

Cue ends before it starts after a bad time-shift. We swap start/end, then run the overlap resolver over the file again.

Repair duration →

Shift and re-sync subtitles

Already fixed overlaps but everything is still a half-second late? Pair the overlap fix with the offset tool, then re-export.

Open shift tool →

Convert fixed SRT to VTT / ASS

Once the timeline is clean, convert to WebVTT for HTML5 video