部落格研究
MP3 會影響扒譜準確率嗎?WAV 與 MP3 實測比較
我們把同一批錄音分別以無損音訊、MP3 和 AAC 送進三個轉譜引擎,並設了一組人耳聽不出差別的對照。結果哪些變了、哪些沒變,以及該上傳哪種檔案。
先說結論
320 kbit/s 的 MP3 不會。2026年10月5日,我們用三個引擎分別轉了同一批錄音的無損版本,以及經過 MP3 和 AAC 編碼再解碼的版本:Spotify 的 Basic Pitch 處理 12 段吉他錄音,一個鋼琴獨奏模型處理 50 段鋼琴演奏,Mirelo 處理一首樂團歌曲。320 kbit/s 的 MP3 讓每個引擎的起音 F1(範圍 0 到 1)最多只變動 0.002,相當於幾千個音符裡只變了寥寥幾個,而且每個檔案的長度精確到取樣點、分毫不差。192 kbit/s 的 MP3 和 256 kbit/s 的 AAC 讓分數最多變動 0.008,升高和降低的次數差不多;AAC 檔案解碼後最多長了 733 個取樣點。
MP3 為什麼會改變音符?
MP3 和 AAC 會丟掉人耳不太容易察覺的細節,主要是緊鄰較大聲響的微弱聲音,以及高頻部分。Basic Pitch 這類模型讀取的是音訊的時頻圖,誰也不能保證它們會像聽眾一樣忽略這些細節。一個落在模型門檻附近的音符,可能因為頻譜的細微變化而出現或消失。
過去的研究顯示影響很小。Urbano 等人發現,位元率從約 160 kbit/s 起,MFCC 特徵在有損編碼下就保持穩定;而反映音級的色度(chroma)特徵幾乎完全不受編解碼器和位元率影響(ISMIR 2014)。他們測的是特徵,不是轉譜得到的音符,所以我們測了音符。
我們也有實際的考量。錄音及其播放音訊的無損副本占了樂譜儲存空間的 77%,我們想改存較小的副本,但前提是準確率絲毫不受影響。
我們怎麼測的
每段錄音都用 FFmpeg 8.1.1 分別編碼(LAME 用 320 或 192 kbit/s 的固定位元率,FFmpeg 內建的 AAC 編碼器用 256 kbit/s),再用讀取上傳檔案的同一套程式碼解碼。對照組把無損音訊改動 0.01 dB——誰也聽不出來——用來顯示完全不經過編解碼器時,各項指標本身會浮動多少。三個引擎的結果都是確定的:相同的輸入一定得到相同的音符。
| 引擎 | 錄音 | 參考標註 |
|---|---|---|
| Basic Pitch(ScoreStarling 處理單一樂器時的用法) | 12 段 GuitarSet 錄音(六位演奏者各一段獨奏、一段伴奏),Slakh2100 中一首樂團歌曲的前 60 秒,以及一首我們自己創作並合成的 58 秒樂團作品 | 資料集附帶的標註 |
| Kong 等人的鋼琴獨奏模型 | 25 首鋼琴曲(24 首公共領域樂譜,外加 1 首我們自己寫的),每首以不同的彈性速度演奏兩遍,並以 SoundFont 鋼琴音色加延音踏板合成音訊:共 50 段演奏 | 實際演奏的音符 |
| Mirelo 的 Audio-to-MIDI(a2m-1.1) | 同一首 Slakh 樂團歌曲的 60 秒片段,只測了無損和 MP3 320 | 這首歌的 MIDI |
起音 F1(onset F1)的判定方法是:轉出的音符與參考標註中某個音符的音高相差不超過 50 音分、起點相差不超過 50 毫秒,就算轉對;漏掉的音和多出來的音扣分相同。1.0 為滿分。《AI 扒譜到底有多準?我們實測了一下》一文對這個指標有完整說明。
單一樂器的結果變了嗎?
幾乎沒變。在 12 段吉他錄音上,Basic Pitch 的起音 F1 在每種格式下都保持在 0.761 到 0.764 之間,而立體聲檔案縮小到了 WAV 的 14% 到 23%。
| 指標 | 無損 | 對照 | MP3 320 | AAC 256 | MP3 192 |
|---|---|---|---|---|---|
| 起音 F1,吉他 | 0.7626 | 0.7627 | 0.7611 | 0.7644 | 0.7616 |
| 起止 F1,吉他 | 0.5224 | 0.5222 | 0.5212 | 0.5228 | 0.5210 |
| 起音 F1,Slakh 歌曲 | 0.5204 | 0.5210 | 0.5204 | 0.5240 | 0.5227 |
| 起音 F1,我們的樂團作品 | 0.7136 | 0.7136 | 0.7123 | 0.7089 | 0.7054 |
| 找到的音符(共 3,893 個) | 2,741 | 2,742 | 2,739 | 2,744 | 2,737 |
| 其中有變化的音符 | — | 1 | 10 | 17 | 14 |
| 調與標註一致 | 12 段中 10 段 | 12 段中 10 段 | 12 段中 10 段 | 12 段中 10 段 | 12 段中 10 段 |
| 速度不變 | — | 14 段中 14 段 | 14 段中 14 段 | 14 段中 14 段 | 14 段中 14 段 |
| 長度變化(取樣點) | — | 0 | 0 | +16 到 +733 | 0 |
| 訊雜比,dB(中位數) | — | 58.4 | 53.2 | 39.4 | 30.3 |
| 檔案大小,單聲道 / 立體聲 | 100% | 100% | 45% / 23% | 23% / 17% | 27% / 14% |
無損版本的分數是 0.763,而不是我們 10月3日那篇文章中的 0.744:從 10月4日起,ScoreStarling 把單一樂器寫成一條旋律線,這改變了其中五段獨奏的結果。兩次測試用的都是 Basic Pitch 0.4.0。
鋼琴獨奏呢?
鋼琴模型在每種格式下聽出的音符都一樣。以實際演奏的音符為參照,它的起音 F1 在無損版本上為 0.9427,對照組為 0.9426,MP3 320 為 0.9428,MP3 192 為 0.9433;每種格式下都找到了約 92.2% 的譜面音符。
根據這些音符判斷拍子和小節線的那一步就沒那麼穩定了,但原因不在編解碼器。經過人耳聽不出的對照改動後,50 段演奏裡有 5 段的小節線位置變了;經過 MP3 320 後有 7 段,其中 4 段和對照組是同樣的演奏。這一步對任何改動都很敏感,所以我們把它視為測量本身的雜訊,而不是 MP3 的代價。鋼琴沒有測試 AAC。
整個樂團呢?
我們用 Mirelo 做了一次付費比較,測的是那首 60 秒的樂團歌曲:無損檔案和 MP3 都回傳了 842 個音符和鼓點,其中 829 個(98.5%)的起點與無損版本相差不到 50 毫秒。
| 指標 | 無損 | MP3 320 |
|---|---|---|
| 起音 F1,有音高的音符(全曲 703 個) | 0.6707 | 0.6687 |
| 鼓的起音 F1(423 個鼓點) | 0.6983 | 0.7023 |
| 貝斯 / 吉他 / 鋼琴的起音 F1 | 0.455 / 0.681 / 0.827 | 0.471 / 0.678 / 0.832 |
| 速度,BPM | 133.0 | 133.0 |
為什麼還是有音符變了?
因為輸入只要有任何變化,就會牽動少數剛好卡在模型門檻上的音符。在 Basic Pitch 找到的約 2,740 個音符中,聽不出差別的對照改動了 1 個,MP3 320 改動了 10 個,AAC 改動了 17 個,MP3 192 改動了 14 個,單段錄音裡最多不超過 7 個。五組比較中,MP3 320 有三組略低(低 0.0013 到 0.0020),一組持平,一組略高。AAC 和 MP3 192 在吉他或 Slakh 歌曲上有所上升,在我們合成的樂團作品上有所下降,幅度最多 0.008。如果某種編解碼器真的損害了準確率,應該會在所有測試上都明顯下降,但沒有一種是這樣。
編解碼器確實會改變的,是頭尾的時間。AAC 編碼器會在開頭加入靜音的預置取樣,並把結尾補齊成一個完整的音框;Apple 的文件寫明延遲為 2112 個取樣點。我們的 AAC 檔案解碼後長了 16 到 733 個取樣點。FFmpeg 寫出的 MP3 帶有記錄編碼器延遲的 Xing/LAME 標頭,我們的 MP3 檔案解碼後與原始長度完全一致。當樂譜要和錄音同步播放時,這一點很重要。
該上傳哪種檔案?
- 手上有什麼就傳什麼。先把 WAV 轉成 MP3 得不到任何好處,把 MP3 轉回 WAV 也找不回任何東西。
- 如果一定要壓縮,320 kbit/s 的 MP3 在訊雜比上最接近原始檔案,而且長度完全不變。
- 低位元率沒有測過。我們只測到 192 kbit/s,所以請留意你的錄音 App 儲存的是什麼格式和位元率。
- 錄音品質遠比格式重要:一個清楚的聲部,殘響少,沒有背景音樂。要檢查哪些地方,請見《如何把語音備忘錄轉成樂譜》。
ScoreStarling 已經據此做了調整:從 2026年10月5日起,上傳的 WAV、AIFF 或 FLAC 檔案會儲存為 320 kbit/s 的 MP3,並用這份副本轉譜,立體聲錄音的儲存空間因此降到 WAV 的 23%。MP3、M4A、Ogg 和影片檔案則保留原檔。
這次測試的侷限
- Mirelo 只測了一首樂團歌曲;鋼琴用的是合成音訊,不是真實錄製的鋼琴。
- 沒有測人聲。我們手上的真實錄音屬於私人錄音,而且本來就是 AAC 檔案,沒辦法作為無損參照。
- 每種格式只用了一個編碼器,也沒有測低於 192 kbit/s 的位元率。
- 起音 F1 只說明音符有沒有被聽出來,不說明寫出的樂譜好不好讀。
參考資料
- What Is the Effect of Audio Quality on the Robustness of MFCCs and Chroma Features?——Urbano、Bogdanov、Herrera、Gómez 和 Serra,ISMIR 2014
- GuitarSet 1.1.0——Xi、Bittner、Pauwels、Ye 和 Bello,Zenodo(CC BY 4.0)
- Slakh2100——Manilow、Wichern、Seetharaman 和 Le Roux,Zenodo(CC BY 4.0)
- A Lightweight Instrument-Agnostic Model for Polyphonic Note Transcription and Multipitch Estimation——Bittner 等人,Spotify,2022(Basic Pitch)
- High-resolution Piano Transcription with Pedals by Regressing Onset and Offset Times——Kong、Li、Song、Wan 和 Wang,2020
- mir_eval.transcription——mir_eval 文件
- FFmpeg formats: the mp3 muxer——FFmpeg 文件
- TN2258: AAC Audio, Encoder Delay and Synchronization——Apple
常見問題
扒譜該上傳 WAV 還是 MP3?
都可以。在我們 2026年10月5日的測試中,用三個不同的引擎轉譜,320 kbit/s 的 MP3 與其來源 WAV 的起音 F1 相差都不超過 0.002。錄音裝置或編輯軟體給你什麼檔案,就直接上傳,不用轉檔。192 kbit/s 的 MP3 和 256 kbit/s 的 AAC 相差在 0.008 以內;更低的位元率沒有測試。
MP3 位元率更低,音符會變嗎?
會變幾個,有升有降。在 14 段錄音約 2,740 個比對成功的音符中,192 kbit/s 時有 14 個發生變化,320 kbit/s 時有 10 個,而一次人耳聽不出的音量改動也讓 1 個變了。起音 F1 在 192 kbit/s 時最多變動 0.008,在 320 kbit/s 時最多變動 0.002。低於 192 kbit/s 的位元率沒有測量。
為什麼 AAC 檔案會比 WAV 稍長一點?
AAC 編碼器會在開頭加入一段靜音的預置取樣(priming samples),並把結尾補齊成一個完整的音框(frame);Apple 的文件寫明預置延遲為 2112 個取樣點。如果播放器或解碼器沒有把它們裁掉,音訊就會稍長一些。在我們的測試中,AAC 檔案解碼後長了 16 到 733 個取樣點。FFmpeg 寫出、帶有 Xing/LAME 標頭的 MP3,解碼後長度完全一致。
ScoreStarling 會把我的 WAV 轉成 MP3 嗎?
會。從 2026年10月5日起,上傳的 WAV、AIFF 或 FLAC 檔案會儲存為 320 kbit/s 的 MP3(也就是本文測試的設定),並用這份副本轉譜。上傳的 MP3、M4A、Ogg 和影片則保留原檔。