LRC vs SRT vs VTT: Which Timed Lyric Format to Use
LRC is a lyric format for music players, SRT is the universal subtitle format for video editors and players, and VTT is the caption format browsers load for HTML video. All three describe the same timing; they differ in syntax, in how much styling they allow, and in what software reads them.
If you need per-word data rather than per-line cues, use JSON or enhanced LRC with word timestamps.
At a glance
| Format | Built for | Time syntax | Styling |
|---|---|---|---|
| LRC | Music players, karaoke displays | [mm:ss.xx] per line | None |
| SRT | Video editors, desktop players, platforms | hh:mm:ss,mmm ranges | Minimal inline markup |
| VTT | Browsers and web video players | hh:mm:ss.mmm ranges | Cue settings and CSS hooks |
LRC
LRC files are lyric files. A bracketed time sits in front of each line and the player scrolls the words as the song plays. There is no notion of a cue ending, so a line stays current until the next timestamp arrives.
[00:12.480]I remember every word you said
[00:16.020]Standing in the rain againEnhanced LRC with word timing
Word timestamps can be embedded inside a line. Players that understand them highlight word by word; players that do not simply use the line time.
[00:12.480]<00:12.480>I <00:12.630>remember <00:13.120>every <00:13.410>word <00:13.760>you <00:14.020>saidSRT
SRT is the lowest common denominator of subtitling, and that is its strength. Every cue has an index, an explicit start and end, and text. Almost every editor, player, and platform accepts it.
1
00:00:12,480 --> 00:00:15,960
I remember every word you said
2
00:00:16,020 --> 00:00:19,340
Standing in the rain againThe milliseconds are separated by a comma. Getting that wrong is the classic reason a file silently fails to load.
VTT
WebVTT is what the HTML video track element is specified to read, so it is the right choice for captions on your own website. It looks like SRT with a header line, a period before the milliseconds, and optional cue settings.
WEBVTT
00:00:12.480 --> 00:00:15.960
I remember every word you said
00:00:16.020 --> 00:00:19.340
Standing in the rain againJSON, when you are building something
If you are writing your own player, animation, or analysis, skip the text formats. JSON output gives you each word with a start time, an end time, and a confidence value, so you can render it however you like.
{
"duration_seconds": 194.6,
"words": [
{ "word": "I", "start": 12.48, "end": 12.61, "confidence": 0.97, "line_index": 0 },
{ "word": "remember", "start": 12.63, "end": 13.12, "confidence": 0.95, "line_index": 0 }
]
}A decision shortcut
- Words inside a music player or car head unit — LRC.
- Words over video in an editor — SRT.
- Words over video on a web page — VTT.
- Word-by-word highlighting in a player — enhanced LRC.
- Anything custom — JSON.
You do not have to choose only one. A single alignment can be downloaded in every format, so exporting two is normal when a project has both a player and a video.
Related pages
Format questions
- Which format should I pick if I am unsure?
- Pick LRC when the words will show inside a music player, and SRT when they will show over video. Add VTT when the video plays in a browser through an HTML track element.
- Can I convert SRT to VTT by hand?
- Largely yes: add a WEBVTT header line, change the comma before milliseconds to a period, and drop the cue numbers if you like. The reverse conversion works the same way.
- Does LRC support word-level timing?
- Enhanced LRC allows inline word timestamps within a line, and players that do not support it fall back to the line timestamp. SRT and VTT are cue-based and do not express per-word timing.
- Which format keeps styling?
- VTT has the richest built-in cue settings and styling hooks. SRT supports only very limited inline markup, and LRC has none.
- What should I use in my own app?
- JSON. It gives you every word with a start time, an end time, and a confidence value, with no format parsing to write.
Try it free, then see pricing for longer monthly use.