LRCファイルの作り方 — 3つの方法とフォーマット

LRCファイルは、歌詞の各行の先頭にタイムスタンプが付いたプレーンテキストファイルです。音声ファイルと同じ名前で同じフォルダに保存すると、対応するプレーヤーが曲の進行に合わせて各行をハイライトします。
作り方は3通りあります。テキストエディタでタイムスタンプを入力する方法、ブラウザツールで曲に合わせてタップする方法、ソフトウェアに歌詞と音声を自動で同期させる方法です。どれを使うかは、手元にあるものによって決まります。歌詞がすでにあり、行単位のタイミングで足りるなら、タップ式の同期ツールで曲を1回通して再生すれば済みます。単語単位のタイミングが必要な場合や、歌詞のテキストがない場合は、自動同期が現実的な方法です。私たちのテストでは、単語の開始時刻の誤差は中央値で36〜69 msでした。どの方法で作っても、プレーヤーがファイルを見つけられなければ歌詞は表示されません。この点は最後の2つのセクションで扱います。
LRCファイルのフォーマット:LRCファイルの中身
最小限のファイルは次のようになります。
[ti:Paper Boats]
[ar:Example Artist]
[00:12.00]Paper boats on a morning tide
[00:15.30]Carry what I could not say
[00:19.84]
[00:41.20][01:32.60]Let it go, let it go
ファイルを構成する行は4種類あります。
- タイムタグ: 標準的な書式は
[mm:ss.xx]で、分、秒、100分の1秒を表します。タグはその行が始まる時刻を示します。LRCには終了時刻がなく、行は次の行が始まるまで表示され続けます。 - IDタグ: ファイルの先頭に置く任意のメタデータで、
[type:value]の形で書きます。よく使われるのはti(タイトル)、ar(アーティスト)、al(アルバム)、by(LRCファイルの作成者)、offsetです。プレーヤーは通常これらをメタデータとして読むか無視するため、歌詞の行としては表示されません。 - 繰り返しの行: サビのように複数回歌われる行には、上の例の最終行のように、タイムタグを複数付けられます。
- 空行: テキストのないタイムタグは表示を消去します。間奏のあいだに使うと便利です。
実際のパーサーは、定義よりも寛容です。FFmpegのLRCリーダーは小数点以下の桁数を問わないため、3桁のミリ秒でもたいていは動作します。ただし、LRCを書き出すツールは現在も2桁を既定としており、こちらが安全な選択です。
LRCには正式な仕様がなく、文字コードも定められていません。英語以外の歌詞では実質的にUTF-8を選ぶことになり、ソニーのウォークマンのヘルプガイドはUTF-8を明示的に要件としています。
既存のLRCファイルを入手する方法
リリース済みの曲であれば、自分で作らなくても完成したLRCファイルをダウンロードできることがよくあります。LRCLIBは、ユーザーの投稿で成り立つ無料の同期歌詞ライブラリです。そのデスクトップクライアントであるLRCGETは、音楽フォルダをスキャンし、各トラックの隣に対応する .lrc を保存します。
一致するかどうかは、録音そのものに左右されます。LRCLIBのAPIドキュメントによると、クライアントがタイトル、アーティスト、再生時間でトラックを検索した場合、再生時間が保存されているレコードの ±2秒 以内でなければ歌詞は返されません。Appleも歌詞の納品ガイドラインで、レーベルに対して同じ注意を促しています。「同じ曲でもバージョンが異なれば、時間の同期も異なります」。
自分で書いた曲や生成した曲、カバー、ライブ音源、リミックス、イントロがアルバム版と異なるエディットについては、ファイルを自分で作る必要があります。
LRCファイルの作り方3通り
| 方法 | 必要なもの | 手間 | 単語単位のタイミング |
|---|---|---|---|
| テキストエディタ | 歌詞と、100分の1秒まで表示できるプレーヤー | 1行ごとに一時停止して入力する | 可能だが時間がかかる |
| ブラウザのタップ式同期ツール | テキストの歌詞 | 曲を等速で1回通して再生し、その後に修正する | ツールによる |
| 自動同期 | 音声ファイル。歌詞は任意 | アップロードして確認する | 対応 |
方法1:テキストエディタでタイムスタンプを書く
任意のプレーンテキストエディタに、歌詞を1行に1フレーズずつ貼り付けます。秒未満まで表示できるプレーヤーで曲を再生し、各行の歌い出しで一時停止して、その時刻を行の先頭に入力します。ファイルは拡張子を .lrc、文字コードをUTF-8にして保存します。
追加のツールは不要ですが、1行ごとに曲を止めるため、3つの方法のなかで最も時間がかかります。
方法2:ブラウザツールで曲に合わせてタップする
タップ式の同期ツールは、曲を再生しながら、キーを押すたびにタイムスタンプを書き込みます。Akari's LRC Makerはオープンソースでブラウザ上で動作します。音声ファイルをページにドロップし、矢印キーで行を選び、スペースキーを押して時刻を打ち込みます。lrcgenerator.comも同じ仕組みで、「Next Line / Next Word」ボタンを使い、単語単位のモードも備えています。
始める前にテキストの歌詞を用意しておく必要があり、タイミングの精度は自分の反応速度で決まります。行単位の同期なら、曲を1回通して再生すれば終わります。タップで単語単位の同期を行う場合は、等速の再生に合わせて1単語ごとにキーを押すことになります。
方法3:歌詞を音声に自動で同期する
自動ツールは録音を解析し、タイムスタンプを計算します。LacunaのLRCジェネレーターには2つのモードがあります。
- 歌詞を貼り付ける(テキストをLRCに変換): プレーンテキストの歌詞がすでにあるなら、これがLRCに変換する方法です。ツールは文章と改行をそのまま保ち、タイミングだけを計算します。歌詞が手元にあるときは、常にこちらを使ってください。
- 歌詞欄を空欄のままにする: ツールがまずボーカルを書き起こし、その書き起こしを同期します。
どちらのモードでも、同期の前にボーカルを伴奏から分離し、すべての単語に個別の開始時刻を割り当てます。アップロードできるのはMP3、WAV、FLAC、M4A、OGGで、最大10 MB、10分までです。対応言語は英語、中国語、日本語、韓国語、スペイン語、ポルトガル語、フランス語、ドイツ語、イタリア語、ロシア語の10言語です。

エディタでは、行を0.1秒早めたり遅らせたりする、再生位置にスナップする、単語1つを50 ms単位で微調整する、行を分割・結合する、聞き間違えた単語を修正する、といった操作ができます。書き出し形式はLRC、単語単位LRC、SRT、VTT、プレーンテキストです。
このツールの利用にはログインが必要で、現在は1曲あたり50クレジットを消費します。表示、再生、編集はどのプランでも利用でき、完成したファイルのダウンロードとコピーは有料プランの機能です。最新の詳細はページに記載されています。
自動同期の精度
同期のパイプラインを選定する際、私たちは10曲・8言語でテストを行い、出力されたタイムスタンプを各曲に付属する参照タイミングと比較しました。タイミングを評価できたのは9曲です。テンポの速い英語のラップ1曲は、参照データが曲の一部しかカバーしていませんでした。
単語単位の参照タイミングがあった4曲は、英語、ポルトガル語、フランス語、ドイツ語の曲です。書き起こしの数値は、書かれた歌詞にある単語のうち、聞き落としたものと聞き間違えたものを単語単位で数えたものです。中国語、日本語、韓国語は文字単位で数えています。10曲中4曲は、こうした誤りなしで書き起こされました。余分な単語は数えていません。録音にはサビの繰り返しやアドリブがあり、書かれた歌詞には含まれていなかったためです。
これらの数値には限界があります。テストに使った曲はすべてAIで生成したもので、参照タイミング自体も機械が作成したものであり、各言語の曲数は1曲か2曲でした。商業リリースされた、人が歌った録音での同じテストは、まだ行っていません。
最も大きな誤差は、ロングトーンの多いスローテンポの日本語バラードで生じました。行の開始時刻の誤差は中央値で210 msで、これは単語単位ではなく行単位で測定した値です。複数の音にまたがって伸ばされる単語は同期がずれやすい箇所で、エディタで確認すべきなのはそうした行です。200 msの誤差は、行単位の表示では気づきにくく、単語単位のハイライトでは気づきやすくなります。
標準LRCと拡張LRC(単語単位)の違い
拡張LRCは、標準LRCの各単語の前に、山括弧で囲んだタイムタグを追加したものです。これにより、プレーヤーは歌詞を単語単位でハイライトできます。
[00:12.00]<00:12.00>Paper <00:12.41>boats <00:12.90>on <00:13.05>a <00:13.20>morning <00:13.78>tide <00:14.60>
この派生形式にも正式な仕様はなく、公開されている例のあいだでも、スペースの入れ方などの細部が一致していません。上の行は、Lacunaが書き出す形式です。
対応するプレーヤーは、標準LRCよりも限られます。kid3のハンドブックは、MP3のタグに埋め込む同期歌詞について「ほとんどのプレーヤーは行または文の粒度にしか対応していない」と述べており、同じことがLRCファイルにも当てはまります。私たちが確認したプレーヤーのうち、Symfoniumにはカラオケモードがあり、Rockboxは単語タグを解析します。一方、foobar2000のOpenLyricsでの単語単位表示は、現在も未対応の機能リクエストのままです。使っているプレーヤーが単語タグをどう扱うか分からない場合は、標準のファイルも併せて書き出してください。
どの形式を使うかは、用途で決まります。
| 用途 | 書き出す形式 |
|---|---|
| 音楽プレーヤーやメディアサーバーで行単位の歌詞を表示する | 標準LRC |
| 対応するプレーヤーで単語単位のハイライトを表示する | 拡張(単語単位)LRC |
| 動画編集ソフトやYouTubeで字幕として使う | SRT |
| Web上の動画・音声プレーヤーで字幕として使う | VTT |
LRCファイルの開き方:音楽プレーヤーで再生する
LRCファイルはプレーンテキストなので、どのテキストエディタでも開いて閲覧や編集ができます。歌詞を音楽に合わせてスクロール表示するには、LRCに対応したプレーヤーで曲を再生します。そうしたプレーヤーのほぼすべてで、.lrc ファイルは音声ファイルと同じフォルダに置き、拡張子以外を同じ名前にする必要があります。Paper Boats.mp3 には Paper Boats.lrc が必要です。
| プレーヤー | 同名の .lrc ファイルを読み込むか | 備考 |
|---|---|---|
| Plex | 読み込む | タグに埋め込まれた歌詞には非対応 |
| Jellyfin | 読み込む | .elrc と .txt も読み込む |
| Navidrome | 読み込む | 埋め込み歌詞も読み込む |
| MusicBee、AIMP | 読み込む | MusicBeeは既定では歌詞を音声ファイル内に保存し、歌詞の保存先を外部ファイルに設定すると同名の .lrc を使う。AIMPは歌詞を表示するスキンが必要 |
| foobar2000 | コンポーネントの追加と設定変更が必要 | OpenLyricsは既定ではfoobar2000の設定フォルダから Artist - Title.lrc を探す。ローカルファイルの場所を「Same directory as the track」に、ファイル名の形式をトラックのファイル名に設定する |
| Kodi | アドオンが必要 | CU LRC Lyrics |
| Poweramp、Musicolet、Symfonium | 読み込む | 3つとも埋め込み歌詞も読み込む |
| Retro Music | 規則が異なる | 専用の歌詞フォルダに song - artist.lrc を置く |
| Sony Walkman、FiiO、Rockbox | 読み込む | ソニーはUTF-8と512 KB以下のファイルを要件とする。RockboxはUTF-8のファイルの拡張子を .lrc8 にするか、Encoding設定を合わせる必要がある |
| VLC 3.x | 読み込まない | .lrc は読み込み対象の字幕形式に含まれない |
| Apple Music | 読み込まない | 文書化されている方法は、Custom Lyricsにテキストを入力または貼り付けることだけ |
| Spotify | 読み込まない | 同期歌詞はMusixmatch経由で提供される |
ストリーミングサービスは、リスナーからLRCを受け付けていません。Appleは、時間同期された歌詞をディストリビューターからTTMLファイルとして受け取ります。TTMLはXMLベースのタイムドテキスト形式です。Spotifyの同期歌詞はMusixmatchから提供されており、認証済みのアーティストはそこで自分の曲を同期できます。
MP3にLRCファイルを埋め込む方法(埋め込み歌詞)
MP3にLRCファイルを付ける方法は2つあります。簡単なのは、上で説明した別ファイルの方法で、同じフォルダに同じ名前で置きます。もう一つは歌詞をMP3のタグに埋め込む方法です。ファイル名を変えたときに歌詞が失われるリスクは避けられますが、プレーヤー側の対応はまちまちです。
MP3ファイルはメタデータをID3タグに保存します。ID3には、フレームと呼ばれる歌詞用のフィールドが2つ定義されており、USLTは同期されていないプレーンテキストを、SYLTはタイムスタンプ付きのテキストを格納します。FLACファイルでは、慣例として LYRICS タグにLRCのテキストを入れます。Mp3tagは UNSYNCEDLYRICS フィールドをUSLTに書き込み、SYLTには対応していません。作者によると、これは意図的な設計です。
そのため、LRCのテキストを歌詞タグに貼り付ける方法が機能するのは、タグのテキストをLRCとして解析するプレーヤーに限られます。Powerampはどの歌詞タグでも解析し、Symfoniumは LYRICS タグを読み込み、foobar2000はOpenLyricsなどの歌詞コンポーネントを通じて対応します。Plexは埋め込み歌詞をまったく読み込みません。本来のSYLTフレームを使う場合は、kid3でLRCファイルを直接インポートできます。複数のデバイスでの互換性を重視するなら、音声ファイルの隣に別の .lrc ファイルを置くほうが安全です。
歌詞が表示されない・ずれる・文字化けするときの対処法
歌詞が表示されない。 拡張子を含め、ファイル名を1文字ずつ確認します。テキストエディタは、表示しないまま song.lrc.txt として保存することがあります。次に、上の表を見て、プレーヤーにプラグインや別のフォルダが必要かどうかを確認します。
すべての行が同じだけ早い、または遅い。 そのファイルは、おそらく別のバージョンの録音に合わせて作られています。offset タグはこのためにあります。Wikipediaの定義と、FFmpegおよびOpenLyricsのパーサーでは、正の値で歌詞が早く表示されます。すべてのプレーヤーがこれに従うと文書化されているわけではないため、エディタでタイムスタンプそのものをずらすほうが確実です。
アクセント付きの文字やラテン文字以外の文字が文字化けする。 ファイルをUTF-8で保存し直します。Rockboxは、表に記載したとおり例外です。
山括弧のタグがそのまま文字として表示される。 そのプレーヤーは拡張LRCに対応していません。標準の書き出しを使ってください。
一部の区間だけがずれ、ほかは問題ない。 ロングトーンや言葉の詰まったパッセージを自動同期したあとによく起こります。曲全体を処理し直すのではなく、該当する行を耳で確認しながら修正します。
テキストの歌詞があるなら、音声と一緒にLacunaのLRCジェネレーターに貼り付け、書き出す前に結果を曲と照らし合わせて確認してください。用途がプレーヤーではなく動画であれば、同じタイミングをそのまま歌詞動画メーカーに引き継げます。