Join Bilingual Subtitles on One Line
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.
Only used when the two lines are joined into one. Type whatever separates the languages — a spaced slash, a spaced dash, a pipe, or nothing at all. Nothing at all is a real choice and not an empty field: with no separator the two texts run straight into each other, which is what you want for a pair like Chinese and Japanese, where the convention is to set the two readings back to back with no punctuation between them. Whatever you type here is inserted exactly as written, including the spaces, so type them if you want them.
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 both languages on the same line of every cue. Put the original in the first box and the translation in the second, and each cue that has a counterpart becomes a single line — the first file's text, your separator, then the second file's. The separator is a text box rather than a list of choices, because it belongs to your house style and not to this tool: a spaced slash is the common one, a spaced vertical bar is what a lot of broadcasters use when the two languages are also styled differently, and an empty separator is the right answer for Chinese against Japanese, where the two scripts already do the work of separating them.
One line is not the same product as two. Two lines is what bilingual subtitles normally are on television and what a set-top box expects; one line is what you want when the screen is small, the font has to stay legible, or the two languages are rendered with different styling inside the same cue. It also changes what the file costs you downstream: a line holding two languages is roughly twice as long, so a check on characters per line will report a file this page produced as over the limit with nothing actually wrong — that is a property of the layout, and the fix is either a smaller font in the player or the two-line arrangement, which is one dropdown away.
The one thing to know before you use it: joining appends the second file's first line to the first file's last line. If both files are single-line cues per subtitle — the usual shape of a bilingual pair — the result is exactly one line, which is what the page promises. If the cues in your file are already two lines each, the result is three: the translation starts where the original's sentence ends and its own second line follows on a line of its own. That is the rule working as written rather than a bug, but it is not what 'one line' sounds like, so check one cue after the first run, or use the two-line layout when the source has two-line cues.
The pairing is by time 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, because the number of cues is exactly what differs between an original and a translation. A cue that overlaps nothing is carried over as a cue of its own — on a one-line page, a sound cue with nothing to join stays exactly one line. Both boxes accept any of the ten formats this site reads — SRT, WebVTT, ASS, SSA, SBV, SAMI, TTML, JSON and CSV — and may hold different ones, since each box is read as whatever it holds; MicroDVD is read with a single frame rate for both boxes, and LRC and plain text are left out because a cue needs an end time to be paired at all. Both boxes take more than one file and pair them up in order, so a season goes through in one run, and neither file is uploaded: both are read, joined and written again in this browser tab.
Examples
Two files that line up, joined on one line
Input
First file:
1
00:00:01,000 --> 00:00:03,000
Good morning.
2
00:00:06,000 --> 00:00:08,000
How are you?
Second file:
1
00:00:01,000 --> 00:00:03,000
早上好。
2
00:00:03,600 --> 00:00:04,200
(敲门声)
3
00:00:06,000 --> 00:00:08,000
你好吗?
Output
1
00:00:01,000 --> 00:00:03,000
Good morning. / 早上好。
2
00:00:03,600 --> 00:00:04,200
(敲门声)
3
00:00:06,000 --> 00:00:08,000
How are you? / 你好吗?
The two cues that share screen time come out as one line each, with the languages in the order you put the files. The knock at the door is the interesting one: it overlaps neither English cue, so it is carried over as a cue of its own — and a cue of its own on a one-line page is a single line, which is what a sound cue should be. Since a cue that did not come from the first file is now in the output, the file is renumbered from 1.
Chinese and Japanese with nothing between them
Input
First file:
1
00:00:01,000 --> 00:00:03,000
おはよう。
2
00:00:05,000 --> 00:00:07,000
いってきます。
Second file:
1
00:00:01,000 --> 00:00:03,000
早上好。
2
00:00:05,000 --> 00:00:07,000
我出门了。
Output
1
00:00:01,000 --> 00:00:03,000
おはよう。早上好。
2
00:00:05,000 --> 00:00:07,000
いってきます。我出门了。
An empty separator, which is a real answer rather than a missing one — that is why the separator is a text box: the tool has to be able to tell 'nothing between them' from 'nobody filled this in'. For Chinese set against Japanese it is the conventional choice, since the two scripts already separate the languages and a slash between them reads as clutter.
A source file that already had two lines per cue
Input
First file:
1
00:00:01,000 --> 00:00:04,000
Narrator:
The town slept.
2
00:00:06,000 --> 00:00:08,000
Morning came.
Second file:
1
00:00:01,000 --> 00:00:04,000
旁白:
城里的人都睡了。
2
00:00:06,000 --> 00:00:08,000
天亮了。
Output
1
00:00:01,000 --> 00:00:04,000
Narrator:
The town slept. / 旁白:
城里的人都睡了。
2
00:00:06,000 --> 00:00:08,000
Morning came. / 天亮了。
Joining appends the second file's first line to the first file's last line, and leaves the rest of both sides in place — so two-line cues against two-line cues give three lines, not one. The speaker label ends up stuck to the end of the English sentence, which is worth seeing once. Either put single-line cues in both boxes, or switch the layout to two lines and let the languages stack; both are on this page.
Frequently asked questions
Why put the two languages on one line instead of two?
Because of where the file is going. Two lines is the broadcast arrangement and the one a player expects by default, but it costs vertical space, and on a phone in portrait or at a small font size that matters more than the convention. One line also fits the case where the two languages are styled differently inside the same cue — italic underneath roman, or a smaller font for one of them — since both texts then live in one run of text and the styling applies to the whole line. The times are identical either way: only the arrangement changes.
Can the separator be empty?
Yes, and the box says so by being a text box rather than a list of fixed choices. An empty separator runs the two texts straight into each other, which is the convention for Chinese against Japanese because the scripts separate the languages on their own. It is also a genuinely different output from a single space, so the tool treats 'nothing typed' and 'a space typed' as two different answers rather than one.
The result came out with three lines for a cue. What happened?
Your cues were already two lines each. Joining appends the second file's first line to the first file's last line and leaves the remaining lines where they are, so two against two gives three — and the speaker label on the second file's first line ends up attached to the end of the first file's sentence. If that is not what you want, use the two-line layout instead, which stacks the second file's lines under the first file's and keeps each language's own line structure intact.
Which language ends up first on the line?
Whichever file is in the first box — the arrangement is under your control rather than alphabetical or automatic. That is deliberate: in a dubbed or subtitled broadcast the convention is the original language first, but a language-learning subtitle usually puts the language being learned first so the eye lands on it, and some markets reverse it entirely. Swap the two files between the boxes and the line order swaps with them.
Does the separator have to be a slash?
No. Whatever you type is written between the two texts character for character, so a spaced slash, a spaced pipe, a dash, a middle dot or nothing at all are all valid — and spaces count, which means the slash with spaces around it and the bare slash are two different files. The one thing to avoid is a separator that also occurs inside your text, since a reader cannot then tell a separator from content; for the same reason a captioning standard that forbids the pipe character in text is a reason to pick a slash.
What happens to a cue in the second file that lines up with nothing?
It is carried over as a cue of its own, on one line, in the right place in the timeline — nothing is dropped, because this page keeps both files by default. A sound cue, a sign translation or a note with no counterpart in the other language therefore stays exactly one line, which is usually what it should be. If you would rather not have it in the output at all, the first option on this page switches to keeping the first file's timeline, and unmatched cues are then dropped and counted in the report.