Keep One Timeline When Merging Subtitles
Or paste subtitle text
Or paste the second file's text
Options
Two subtitles rarely agree cue for cue, and this is the choice that decides what happens everywhere they disagree. Anywhere a cue in one file overlaps a cue in the other, the two are treated as the same moment and carried together, with the overlap deciding how long the result stays on screen. The rest is this choice. Keeping both files adds every unmatched cue as a line of its own, so not one word from either input is missing — and the second file's timing is not preserved, because an unmatched cue still has to sit somewhere on the first file's timeline. Keeping the first file's timeline does the opposite: the first file's cues keep exactly the starts and ends they came in with, nothing new is inserted, and any cue in the second file that lines up with nothing is dropped. The report after a run always names how many cues that was.
Once two cues are treated as the same moment, their text has to share the screen. Arranged as two lines is how bilingual subtitles are normally broadcast and how most players expect to see them: the first file's line sits above the second file's, and the cue becomes a two-line cue. That needs the cue to allow a line break, which is why every format that stores a cue as a single line is left out of this page entirely rather than quietly flattened here. Joined into one line puts both languages on a single line separated by whatever you type in the field below, which is what you want when the readers are meant to see the translation first and the original as an aside — a translator's subtitle rather than a bilingual broadcast one.
Which frame rate the timings are counted in. On the format pages this is what MicroDVD needs, because it stores timing as frame numbers. On the frame rate pages it is the rate the file was timed against — the version the subtitles were made for — and the page's second box takes the rate of the video you are going to use them with. 23.976, 24, 25, 29.97, 30, 50, 59.94 and 60 are the common ones. Getting it wrong shifts the whole timeline, and on the frame rate pages it shifts it by a ratio rather than by a fixed amount.
This page takes two subtitle files and gives you one, with one promise kept above all others: every cue in the first file comes out with exactly the start and the end it went in with. No cue shifts by a frame, nothing is inserted between two cues, and the order of the first file's timeline is the order of the output. Put the file whose timing you trust in the first box and the translation in the second.
That promise is worth a page of its own because the timeline is usually the part that was already approved. A file gets spotted, checked against picture, signed off and locked; the translation arrives weeks later from a different person, timed to their own ear. Merging the two by letting both sides move means the locked file is no longer locked — every cue has to be re-checked against picture, which for a broadcast deliverable is the whole cost of the job. Keeping the first file's timeline means the file you already passed is still the file you have, with a second language under each line.
The price is stated before you run it and counted after: a cue in the second file that overlaps nothing in the first has nowhere to sit on a timeline that is not allowed to move, so it is dropped, and the number of dropped cues goes into the report. In practice that is a handful of cues per programme — a translator's note to the client, a bracketed non-speech cue for a scene that was cut, a line timed a second past the shot it belonged to. What you are trading is a small amount of translation content for the guarantee that nothing you had already checked has moved. If that is the wrong trade for the job, the first option on this page switches to keeping both files, and the page that defaults to it is linked above.
The pairing is the same on every page in this family: a cue from one file is paired with a cue from the other when their time ranges overlap, whatever their cue numbers say. Two files with the same number of cues could be matched line by line, but the number of cues is exactly what differs between an original and a translation, since a translator will split one long line into two short ones or merge two questions into one. The second option decides how the two texts share the line: two lines, or one line with whatever separator you type. Every format this site reads is accepted in both boxes — SRT, WebVTT, ASS, SSA, SBV, SAMI, TTML, JSON and CSV — and the two boxes may hold different formats, since each is read as whatever it holds; MicroDVD is read with a single frame rate for both, and LRC and plain text are left out because neither can express the end of a cue. Both boxes take more than one file, and the first file in one box is paired with the first file in the other, so a season goes through in one run. Neither file is uploaded: they are read, merged and written again in this browser tab.
Examples
A Chinese cue the English file does not have
Input
First file:
1
00:00:01,000 --> 00:00:03,000
Good morning.
2
00:00:05,000 --> 00:00:07,000
How are you?
Second file:
1
00:00:01,000 --> 00:00:03,000
早上好。
2
00:00:05,000 --> 00:00:07,000
你好吗?
3
00:00:20,000 --> 00:00:22,000
这句在第一份里没有对应。
Output
1
00:00:01,000 --> 00:00:03,000
Good morning.
早上好。
2
00:00:05,000 --> 00:00:07,000
How are you?
你好吗?
The two paired cues come out with the English file's numbers and the English file's times, which is the whole point of this page. The third Chinese cue, twenty seconds in, lines up with nothing in the English file and is dropped rather than placed at its own time; the report after the run says one cue of content was lost, so nothing about that decision is silent.
A translator who split one line in two
Input
First file:
1
00:00:01,000 --> 00:00:06,000
We should leave before the storm gets worse.
Second file:
1
00:00:01,000 --> 00:00:02,500
我们该走了。
2
00:00:03,000 --> 00:00:05,000
趁暴风雨还没更大。
Output
1
00:00:01,000 --> 00:00:06,000
We should leave before the storm gets worse.
我们该走了。
One English cue, two Chinese ones — the ordinary shape of an original against a translation. Pairing is one cue to one cue, so only the first half is paired, and the English cue keeps its full five seconds on screen rather than the 1.5 the translation was written for. The second half lines up with nothing and is dropped. Both facts are in the report: the timing that was overruled, and the cue that went.
Two files that have nothing to do with each other
Input
First file:
1
00:00:01,000 --> 00:00:03,000
Good morning.
2
00:00:05,000 --> 00:00:07,000
How are you?
Second file:
1
00:01:00,000 --> 00:01:02,000
一分钟处的旁白。
2
00:02:00,000 --> 00:02:02,000
两分钟处的旁白。
Output
1
00:00:01,000 --> 00:00:03,000
Good morning.
2
00:00:05,000 --> 00:00:07,000
How are you?
A cue sheet for the first minute of a clip that lasts eight seconds: both Chinese cues fall outside and both are dropped, so the English file comes out byte for byte. This is not the same as having nothing to do, and the page does not pretend it is — the report says two cues of content were lost. An empty second file is the case that really does nothing, and that one is labelled as no change instead.
Frequently asked questions
What happens to a cue in the second file that lines up with nothing in the first?
It is dropped, and the count is written into the report you get after the run. There is no third option where it keeps its own time, because keeping its own time means the first file's timeline moved to make room for it — which is the one thing this page exists to prevent. Anything under a second or two of drift usually still pairs, since pairing only needs the two ranges to overlap: a Chinese cue running 0.6 s to 3.2 s lines up with an English cue running 1.0 s to 3.0 s and comes out with the English times.
How do I see what was thrown away before I deliver the file?
The report sits under the result and lists what was lost with a count for each kind, so the check is to read it before downloading rather than after. A typical bilingual merge on this page loses nothing at all — that is the case when the difference is only a few milliseconds and no cue is unmatched — and when it loses something, the line telling you so is the one line to read. If the count is larger than you expected, the first option on this page switches to keeping both files, which drops nothing and instead lets paired cues widen to cover both sides.
Why would anyone keep both files rather than the first file's timeline?
Because the second file's own timing is sometimes the better one: a fan translation timed carefully against a scene, or a documentary where the interpreter's cues sit where the speech actually is. Then the promise you want is that no text is lost, and the price is that the output is nobody's exact timeline — paired cues run from the earlier start to the later end, which can widen a cue by a few hundred milliseconds and push it under the one after it. Both are one dropdown away on this page; the difference is which guarantee you would rather have in writing.
Does the output keep my first file's cue numbers?
It does whenever every cue in the output came from the first file — which on this page means there were no unmatched cues in the second file at all. As soon as one cue is dropped, all the cues still come from the first file and the numbering is still its own, because dropping narrows the file rather than adding to it. The page that keeps both files is the one that renumbers: a cue that did not come from the first file has no number from it to keep, so the whole file is renumbered from 1.
The translation runs past the end of my last cue. Is that a problem?
It is the same case as any other unmatched cue, and it is the most common one in practice: an interview that ends on a laugh, a credit line, a phrase the translator placed after the picture cuts. That cue is dropped. If it matters, the fix belongs upstream — extend the last English cue so the two ranges overlap, which keeps the guarantee intact, since a cue that overlaps is paired and the first file's new end is the end that is kept anyway.
Do both files have to be in the same subtitle format?
No. Each box is read as whatever it holds, so a WebVTT file from a webinar against an SRT from a translator works, and the output is written in the first file's format — which is the reason the two boxes are labelled rather than interchangeable. Styling is the thing to watch: if the first file is ASS with styled cues, the merged file is ASS and the second file's text joins it carrying the first file's styling rather than its own, with the number of affected cues listed in the report.