Subtitle Merger

Combine two or more .srt or .vtt subtitle files into one — merged by time, renumbered, with an optional per-file shift. Runs entirely in your browser; nothing is uploaded.

Merged subtitles

What this tool does

Got subtitles split across several files — a movie in two parts, or an English and a translated track you want shown together? This tool merges two or more SubRip (.srt) or WebVTT (.vtt) subtitle files into one. Every cue from every file is collected, sorted by its start time, renumbered from 1, and written back out as a single clean subtitle file. Nothing is uploaded — it runs entirely in your browser, works offline, and needs no sign-up.

How to use it

  1. Paste your subtitle files into the box, one after another, with a line containing only === between each file (this is how the tool knows where one file ends and the next begins).
  2. Set the Per-file shift if you're joining sequential parts:
    • leave it at 0 to overlay tracks that already share a timeline (e.g. two languages), or
    • enter a positive number of milliseconds to push each file after the first further down the timeline (file 2 by the shift, file 3 by twice the shift, and so on) — handy for back-to-back parts like CD1/CD2.
  3. Choose the Output formatauto keeps the first file's format, or force srt or vtt.
  4. Copy the merged subtitles from the output.

How the merge works

Examples

Two files, overlaid (shift 0), produce a single track ordered by time:

1
00:00:01,000 --> 00:00:02,000
Hello.

===

1
00:00:01,000 --> 00:00:02,000
Bonjour.

1
00:00:01,000 --> 00:00:02,000
Hello.

2
00:00:01,000 --> 00:00:02,000
Bonjour.

With a per-file shift of 3600000 ms (one hour), the second file's cues move an hour later — perfect for appending part 2 after a one-hour part 1.

FAQ

How do I separate the files?

Put a line that contains only === (three or more equals signs) between each file. Everything between separators is treated as one subtitle file.

Can I merge an SRT and a VTT together?

Yes. Each file's format is detected independently, and the combined result is written in whichever output format you pick (or the first file's format on auto).

My two parts both start at 00:00 — how do I join them end to end?

Use the per-file shift: enter the length of the first part in milliseconds. File 2 is moved by that amount, file 3 by twice it, and so on.

Will it keep multi-line dialogue and styling?

Multi-line cue text is kept as written. WebVTT cue settings (positioning/alignment after the timestamp) are dropped when they have no SubRip equivalent.

Is my file uploaded anywhere?

No. The merge happens locally in your browser, so your subtitles never leave your device, and it keeps working offline once the page has loaded.

Developer & Automation Access

Run it from the terminal

Same engine as this page, headless — via the gizza CLI:

gizza tool subtitle-merge "1
00:00:01,000 --> 00:00:02,000
First file, first line.

===

1
00:00:01,000 --> 00:00:02,000
Second file, first line."

New to the CLI? Get gizza →

Open it by URL

Pre-fill and auto-run this tool with query parameters — the names match the API/CLI:

https://gizza.ai/tools/subtitle-merge/?subtitles=1%0A00%3A00%3A01%2C000%20--%3E%2000%3A00%3A02%2C000%0AFirst%20file%2C%20first%20line.%0A%0A%3D%3D%3D%0A%0A1%0A00%3A00%3A01%2C000%20--%3E%2000%3A00%3A02%2C000%0ASecond%20file%2C%20first%20line.&offset_ms=0&format=auto

Machine-readable descriptor: tool.json — title + parameters JSON Schema for agents.