LRC 檔案怎麼製作 — 3 種方法與格式說明

LRC 檔案是一種純文字檔,每一行歌詞都以時間戳開頭。把它存成與音訊檔相同的檔名,放在同一個資料夾,相容的播放器就會在歌曲播到該行時把它標示出來。
製作方法有三種:在文字編輯器裡手動輸入時間戳、在瀏覽器工具裡跟著歌曲按鍵打點,或是讓軟體把歌詞自動對齊到音訊。該用哪一種,取決於你手上有什麼。如果已經有歌詞,目標又只是逐行時間,用打點工具把歌曲從頭播一遍就夠了。如果需要逐字時間,或是沒有歌詞文字,自動對齊是比較實際的做法:在我們的測試中,它的字詞起始時間誤差中位數為 36 到 69 毫秒。不論用哪一種方法,播放器要找得到檔案才會顯示歌詞,最後兩節會說明這一點。
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
檔案裡有四種行:
- 時間標籤。 標準寫法是
[mm:ss.xx]:分、秒與百分之一秒。標籤標示這一行從什麼時候開始。LRC 沒有結束時間,一行會留在畫面上,直到下一行開始。 - ID 標籤。 放在檔案開頭的選填中繼資料,寫成
[type:value]。常見的有ti(歌名)、ar(演出者)、al(專輯)、by(LRC 檔案的製作者)與offset。播放器通常把它們當作中繼資料讀取,或直接略過,所以不會顯示成歌詞行。 - 重複的歌詞行。 唱了不只一次的歌詞行(例如副歌)可以帶多個時間標籤,如上面範例的最後一行。
- 空行。 只有時間標籤、沒有文字的行會清空顯示內容,適合用在間奏。
實際的解析器比定義寬鬆。FFmpeg 的 LRC 讀取程式接受任意位數的小數,所以三位數的毫秒通常也能用。寫出 LRC 的工具仍然預設使用兩位小數,這是比較保險的選擇。
LRC 沒有正式規格,也沒有規定編碼。對非英文歌詞來說,UTF-8 是實際可行的選擇,Sony 的 Walkman 說明指南則明確要求使用 UTF-8。
哪裡可以下載現成的 LRC 檔案
已經發行的歌曲,往往可以直接下載做好的 LRC 檔案,不必自己製作。LRCLIB 是免費、由使用者共同貢獻的同步歌詞資料庫,它的桌面用戶端 LRCGET 會掃描音樂資料夾,並在每首歌旁邊存一個對應的 .lrc。
能不能對上,取決於是不是同一個錄音版本。LRCLIB 的 API 文件說明,用戶端以歌名、演出者與長度查詢歌曲時,只有長度與資料庫紀錄相差在 ±2 秒以內才會回傳歌詞。Apple 在歌詞交付準則裡也對唱片公司提出同樣的提醒:「同一首歌的不同版本,時間同步也會不同。」
自己寫的或用 AI 產生的歌、翻唱、現場版、混音版,或是前奏與專輯版不同的剪輯版,就得自己製作檔案。
製作 LRC 檔案的三種方法
| 方法 | 需要準備什麼 | 花費的工夫 | 逐字時間 |
|---|---|---|---|
| 文字編輯器 | 歌詞,以及能顯示百分之一秒的播放器 | 每一行都要暫停再輸入 | 做得到,但很慢 |
| 瀏覽器裡的打點工具 | 歌詞文字 | 即時把歌曲播一遍,再加上修正 | 視工具而定 |
| 自動對齊 | 音訊檔;歌詞可有可無 | 上傳,然後檢查 | 有 |
方法 1:在文字編輯器裡輸入時間戳
把歌詞貼進任何純文字編輯器,一行一句。用能顯示秒以下小數的播放器播放歌曲,在每一行開始的地方暫停,把時間打在該行前面。存檔時副檔名用 .lrc,編碼選 UTF-8。
這個方法不需要額外工具,但也是三種方法裡最慢的,因為每一行都要停下來。
方法 2:在瀏覽器工具裡跟著歌曲打點
打點工具會播放歌曲,並在你每次按鍵時寫下一個時間戳。Akari's LRC Maker 是開放原始碼的工具,在瀏覽器裡執行:把音訊檔拖到頁面上,用方向鍵選取一行,按空白鍵標上時間。lrcgenerator.com 的做法相同,用的是「Next Line / Next Word」按鈕,並提供逐字模式。
開始之前仍然需要先備好歌詞文字,時間準不準則取決於你的反應速度。逐行同步只要把歌曲播一遍。用打點做逐字同步,則要在原速播放下每個字按一次鍵。
方法 3:把歌詞自動對齊到音訊
自動工具會聆聽錄音並計算時間戳。Lacuna LRC 產生器有兩種模式:
- 貼上你的歌詞(純文字轉 LRC)。 如果已經有純文字歌詞,這就是把它轉成 LRC 的方法:工具會完整保留你的文字與斷句,只計算時間。只要手上有歌詞,就用這個模式。
- 歌詞欄留空。 工具會先轉寫人聲,再對齊轉寫出來的文字。
兩種模式都會先把人聲從伴奏中分離出來再對齊,並為每個字詞標上各自的起始時間。可上傳 MP3、WAV、FLAC、M4A 或 OGG,最大 10 MB、最長 10 分鐘。支援十種語言:英語、中文、日語、韓語、西班牙語、葡萄牙語、法語、德語、義大利語和俄語。

在編輯器裡,你可以把一行提前或延後 0.1 秒、對齊到播放頭、把單一字詞微調 50 毫秒、拆分或合併歌詞行,以及改掉聽錯的字。匯出選項有 LRC、逐字 LRC、SRT、VTT 與純文字。
這個工具需要登入,目前每首歌需要 50 點數。檢視、播放與編輯在所有方案都能使用,下載或複製成品檔案則屬於付費方案。最新資訊以頁面顯示為準。
自動對齊有多準
選擇對齊流程時,我們用 8 種語言的 10 首歌做了測試,把它產生的時間戳與每首歌附帶的參考時間比對。其中九首可以評估時間準確度;有一首快節奏英文饒舌的參考時間只涵蓋歌曲的一部分。
有逐字參考時間的四首歌分別是英語、葡萄牙語、法語和德語。轉寫的數字計算的是書面歌詞中被漏掉或聽錯的部分,以字詞為單位,中文、日語和韓語則以字元為單位。十首歌中有四首的轉寫沒有這類錯誤。多出來的字詞不列入計算:錄音裡有重複的副歌和即興加入的詞句,書面歌詞中並沒有這些內容。
這些數字有其限制。每首測試歌曲都是 AI 產生的,參考時間本身也是機器產生的,每種語言只有一到兩首歌。我們還沒有用商業發行、真人演唱的錄音做過同樣的測試。
誤差最大的是一首帶有長音的慢板日語抒情歌:行起始時間誤差中位數為 210 毫秒,這是以行而非以字詞為單位量測的。一個字拉長跨越好幾個音的地方,正是對齊容易偏移的地方,這些行需要在編輯器裡檢查。200 毫秒的誤差在逐行顯示時不容易察覺,在逐字高亮時則很明顯。
標準 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 有卡拉 OK 模式,Rockbox 會解析逐字標籤,而 foobar2000 的 OpenLyrics 逐字顯示仍是一項尚未實作的功能請求。如果不確定你的播放器會怎麼處理逐字標籤,就把標準檔案也一併匯出。
用在哪裡,決定該匯出哪種格式:
| 你的需求 | 匯出格式 |
|---|---|
| 在音樂播放器或媒體伺服器上逐行顯示歌詞 | 標準 LRC |
| 在支援的播放器上逐字高亮 | 增強版(逐字)LRC |
| 影片剪輯軟體或 YouTube 的字幕 | SRT |
| 網頁影片或音訊播放器的字幕 | 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 | 是 | 三者也都會讀取內嵌歌詞 |
| Retro Music | 規則不同 | 要求把 song - artist.lrc 放在它自己的歌詞資料夾 |
| Sony Walkman、FiiO、Rockbox | 是 | Sony 要求 UTF-8,且檔案不超過 512 KB;Rockbox 要求 UTF-8 檔案命名為 .lrc8,或讓它的 Encoding 設定與檔案一致 |
| VLC 3.x | 否 | .lrc 不在它會載入的字幕類型之內 |
| Apple Music | 否 | 官方文件記載的唯一方式,是在 Custom Lyrics 裡輸入或貼上文字 |
| Spotify | 否 | 同步歌詞透過 Musixmatch 提供 |
串流服務不接受聽眾提供的 LRC。Apple 從發行商那裡收到的時間同步歌詞是 TTML 檔案,這是一種以 XML 為基礎的計時文字格式;Spotify 的同步歌詞則由 Musixmatch 提供,經過驗證的音樂人可以在那裡同步自己的歌曲。
怎麼把 LRC 檔案加進 MP3(內嵌歌詞)
把 LRC 檔案加進 MP3 有兩種做法。簡單的一種是前面說的獨立檔案:同一個資料夾、相同檔名。另一種是把歌詞嵌入 MP3 的標籤,這樣可以避免檔案改名後歌詞對不上,但各家的支援情況並不一致。
MP3 檔案把中繼資料存在 ID3 標籤裡,ID3 定義了兩個歌詞欄位,稱為 frame:USLT 存放不帶時間的純文字,SYLT 存放帶時間戳的文字。FLAC 檔案慣例上以 LYRICS 標籤存放 LRC 文字。Mp3tag 會把它的 UNSYNCEDLYRICS 欄位寫入 USLT,並不支援 SYLT;它的作者表示這是刻意的設計。
因此,把 LRC 文字貼進歌詞標籤,只有在會把標籤文字當作 LRC 解析的播放器裡才有效。Poweramp 對任何歌詞標籤都會這樣處理,Symfonium 會讀取 LYRICS 標籤,foobar2000 則要透過 OpenLyrics 這類歌詞元件。Plex 完全不讀取內嵌歌詞。如果要寫入真正的 SYLT frame,kid3 可以直接匯入 LRC 檔案。如果目標是在不同裝置上都能用,在音訊旁邊放一個獨立的 .lrc 檔案是比較保險的做法。
歌詞不顯示、時間偏移或變成亂碼時怎麼修正
歌詞沒有出現。 逐字元檢查檔名,包括副檔名:文字編輯器可能把檔案存成 song.lrc.txt 而不顯示出來。接著對照上面的表格,確認播放器是否需要外掛或不同的資料夾。
每一行都提早或延遲相同的時間。 這個檔案很可能是依照另一個錄音版本打的時間。offset 標籤就是為此而設。在 Wikipedia 的定義以及 FFmpeg 與 OpenLyrics 的解析器中,正值會讓歌詞提早顯示。並非每個播放器都有文件說明會遵循這個規則,所以在編輯器裡直接平移時間戳本身是比較可靠的做法。
帶重音符號或非拉丁字母的字元變成亂碼。 把檔案重新存成 UTF-8。Rockbox 是表格中提到的例外。
角括號標籤被當成文字顯示。 播放器不支援增強版 LRC。請改用標準格式匯出。
只有某一段偏移,其他部分正常。 這在自動對齊長音或字詞密集的段落之後很常見。用耳朵修正那幾行即可,不必整首歌重跑。
如果你有歌詞文字,可以把它和音訊一起貼進 Lacuna LRC 產生器,匯出前先對照歌曲檢查結果。如果要用在影片而不是播放器上,同一份時間軸也能帶進歌詞影片製作工具。