Home β€Ί Tools β€Ί Merge Subtitle Files

Merge Subtitle Files

Combine two SRT or VTT files into one track, with the second file appended after the first.

Drop a subtitle file here, or
Gap between files seconds

The second file is appended after the first one ends, so CD1 + CD2 stay in order.

Your file never leaves your device

This tool is plain JavaScript. There is no upload step and no server-side processing, so confidential captions, unreleased content and client material stay on your machine.

What this does

Feature films and long recordings are often split across several subtitle files, and a player will only load one track. Merging them means appending the second file's cues after the first one ends and renumbering the result β€” which is what this page does locally, in one step.

How to use it

  1. Paste or drop the first subtitle file into the top box.
  2. Paste the second file into the box below it.
  3. Optionally set a gap in seconds, then download the merged file.

Good to know

  • The second file is appended after the last cue of the first file, not after its final timestamp β€” overlapping cues inside a file do not shorten the result.
  • Both files should be in the same format. The output follows the first file's format.
  • A gap of one or two seconds reads more naturally than cutting straight from one part to the next.
  • To merge more than two files, merge the first two, then merge the result with the third.

Why merging is not just concatenation

The naive approach β€” pasting one file after another β€” produces a track where the second half restarts at zero. Every cue from the second file then appears at the beginning of the video, overlapping the first half.

A correct merge re-times the second file. Its cues are shifted by however long the first file runs, so the combined track plays straight through. That is what the gap setting adjusts: zero means the second file starts the instant the first one ends.

Cue numbers are then reassigned in order. SubRip numbers are largely cosmetic β€” most players ignore them β€” but a continuous sequence makes the file easier to diff and edit afterwards.

If you need the two files to overlap rather than follow each other β€” a translation track alongside an original, for example β€” merging is the wrong operation. Players handle those as separate tracks, not one combined file.

Worked example

Input β€” file A, then file B
A: 1
00:00:01,000 --> 00:00:04,000
Part one.

B: 1
00:00:01,000 --> 00:00:04,000
Part two.
Output β€” merged
1
00:00:01,000 --> 00:00:04,000
Part one.

2
00:00:04,000 --> 00:00:07,000
Part two.

File B's cue moves from 00:00:01 to 00:00:04 β€” the point where file A ends. Set a gap to push it later still.

FAQ

Why does my merged file play both halves at the start?
Because the files were concatenated without re-timing. The second file's timestamps still begin at zero. This tool shifts them by the first file's duration.
Can I merge more than two files?
Not in one step. Merge the first two, copy the output, then merge that with the third β€” repeat as needed.
What gap should I use?
Zero is correct when the parts are continuous. Use one or two seconds if the original files were split at a scene change and you want a beat before the next part starts.
Does the text get changed?
No. Only timestamps and cue numbers are rewritten; the wording of every cue is preserved exactly.

Troubleshooting

  1. The second file still starts at the beginningConfirm the second file is in the lower box. Text pasted into the main input is treated as file A.
  2. Cues from the two files overlapIncrease the gap. If file A's last cue ends later than you expect, the append point moves with it.
  3. The output is emptyAt least one of the two boxes has no recognisable cues. Both files must use the --> separator between timestamps.
  4. Numbering restarts in the middleThat happens when the second file was parsed as a separate track. Re-paste both files, ensuring there is no stray text between them.

Related tools

Last updated 2026-09-21. All conversions happen locally in your browser.