Back to all guides

TTML vs LRC

How the TTML and LRC formats differ, what each can express, and when to use which for synced lyrics.

TTML and LRC are both formats for synchronized lyrics. They look very different and solve slightly different problems. This guide covers how they compare, when to use each, and how to convert between them.

Quick comparison

FeatureLRCTTML
File formatPlain textXML
Line timingYesYes
Word timingOnly in enhanced LRCYes, native
Multiple singersNoYes, via ttm:agent
Background vocalsNoYes, via ttm:role x-bg
Used byDesktop players, legacy appsApple Music, Spotify, Amazon Music

What LRC looks like

LRC puts a timestamp in square brackets at the start of each line. That is almost all there is to it.

[ti:Song title]
[ar:Artist]
[00:12.34]First lyric line
[00:15.67]Second lyric line

Enhanced LRC (eLRC) adds inline per-word timestamps in angle brackets. The line-level timestamp stays, and each word gets a start time:

[00:12.34]<00:12.34>First <00:12.80>lyric <00:13.20>line<00:13.80>

What TTML looks like

TTML is XML. The same two lines above become:

<p begin="00:00:12.340" end="00:00:15.670">
  <span begin="00:00:12.340" end="00:00:12.800">First</span>
  <span begin="00:00:12.800" end="00:00:13.200">lyric</span>
  <span begin="00:00:13.200" end="00:00:13.800">line</span>
</p>

The structure is richer. TTML wraps each line in a <p> element that can carry an agent, nest background vocals, and hold per-word spans with their own timing.

When to use LRC

Stick with LRC when the target is a desktop player, a legacy app, or an internal tool that only needs line-level sync. LRC is easy to hand-edit, easy to diff in git, and easy for non-technical people to scan.

LRC also works well as an intermediate format while you capture timing. Many authors prefer to rough out timing in LRC, then convert to TTML for delivery.

When to use TTML

Pick TTML when the target is Apple Music, Spotify, Amazon Music, or any service that animates lyrics word by word. TTML is also the right choice when the song has multiple singers, background vocals, or call-and-response parts.

If you need to ship a file that travels through a music distributor to a streaming platform, it is almost always going to be TTML.

Converting between them

Going from LRC or eLRC to TTML is common and lossless: line-level timing becomes <p> elements, inline word timestamps become nested <span> elements. Use the LRC to TTML converter for a one-step conversion.

Going from TTML back to LRC loses information: agents, background vocals, and nested structure do not fit into LRC. If you need LRC for legacy compatibility, the conversion is possible but you have to accept the loss.

Ready to try it?

Better Lyrics

A browser extension that adds time-synced, animated lyrics to YouTube Music. Free, open source, and the reason CallEditor exists.

Visit better-lyrics.boidu.dev