Skip to main content
SubtitleMatrix

LRC to SRT

Format conversionLyrics (LRC)
Or paste subtitle text

Options

Used when the source has no end times (plain text, LRC). The timeline in the output is generated here rather than converted, so this number is what you get.

What this conversion changes

1 thing is dropped or needs a decision

  • Timing

    cue end times — the source does not record them, so the output's will be generated rather than converted

This list comes from the capability matrix for these two formats, not from the particular file you loaded. A specific file may lose more if it uses features the format allows but the matrix does not model.

LRC is a lyrics format: a timestamp in square brackets, then a line of words. It says when a line starts and never says when it ends, because a lyrics player simply keeps the line on screen until the next one. This page turns those lines into subtitle cues by using the next line's start as this line's end, which is the same rule a player follows when it advances the highlight.

Two details of the format are handled rather than papered over. Several lines can share one timestamp — the original and a translation, for instance — and they belong together, so they become one cue with several lines instead of two cues competing for the same moment. And the last line has no successor to borrow an end from, so it is given the duration you set above, which is reported so you know that one end time was generated.

The metadata in the header is read: a title and an artist are kept as far as the target format can hold them, and the offset tag is preserved rather than applied, so the output matches what the file literally says. Everything runs in your browser.

Examples

A typical LRC file, converted to SRT

Input

[ti:Sample Song]
[ar:Some Artist]
[length:00:41.00]
[offset:+250]
[00:12.00]First line of the song.
[00:15.30]Second line.
[00:15.30]Second line, translated.
[00:18.00]
[00:21.50]Final line.

Output

1
00:00:12,000 --> 00:00:15,300
First line of the song.

2
00:00:15,300 --> 00:00:18,000
Second line.
Second line, translated.

3
00:00:18,000 --> 00:00:21,500


4
00:00:21,500 --> 00:00:23,500
Final line.

Dropped in this output: timing. Everything else matches line for line.

The same conversion on an awkward input

Input

[ar:Some Artist]
[0:05.5]Leading zero omitted, one decimal.
[00:07]Second with no centiseconds.
[00:03.00]Out of order.
[00:07.00][00:09.00]Repeated chorus line.
[00:12.00]

Output

1
00:00:03,000 --> 00:00:05,500
Out of order.

2
00:00:05,500 --> 00:00:07,000
Leading zero omitted, one decimal.

3
00:00:07,000 --> 00:00:09,000
Second with no centiseconds.
Repeated chorus line.

4
00:00:09,000 --> 00:00:12,000
Repeated chorus line.

5
00:00:12,000 --> 00:00:14,000

This is the kind of damage real files have — mixed line endings, stray whitespace, fields left empty. Compare it with the tidy example above to see what the parser forgives.

Frequently asked questions

How does a lyric file get an end time?

From the next line. A line's end is the moment the following line begins, which is what a lyrics player does when it moves the highlight on. That makes every end time in the output exact, except for the very last line.

What happens to the last line?

It has no next line to take an end from, so it is given the duration from the field below the file box — two seconds unless you change it. The report says that this end time was generated, because nothing in your file stated it.

Why do two of my timestamps end up in one cue?

Because those lines share a start time. An LRC file uses that to put a translation or a second voice under the same lyric, so they become one cue with several lines rather than two cues starting at the same instant, which no player can display sensibly.

Is the offset tag applied?

It is read and kept, not applied, so the timings in the output are the ones written in the file. If your player was showing the lyrics earlier or later because of that offset, apply the same shift here and the result will match what you were seeing.

What about the title and artist in the header?

They are read as metadata. A subtitle format has fields for a title, so it is kept where it fits and reported as dropped where it does not — and the artist is a lyrics idea with no equivalent in a subtitle file.

Related tools