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
| Feature | LRC | TTML |
|---|---|---|
| File format | Plain text | XML |
| Line timing | Yes | Yes |
| Word timing | Only in enhanced LRC | Yes, native |
| Multiple singers | No | Yes, via ttm:agent |
| Background vocals | No | Yes, via ttm:role x-bg |
| Used by | Desktop players, legacy apps | Apple 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.