你的FLAC是假无损吗?Antra内置FFT频谱分析仪实战指南(附Fake Lossless判定逻辑)
【免费下载链接】AntraA desktop music library builder that turns Spotify, Youtube Music Apple Music, Amazon Music, Tidal, Qobuz, and Deezer links into fully tagged local library in FLAC, ALAC, Dolby Atmos, AAC, or MP3.项目地址: https://gitcode.com/gh_mirrors/an/Antra
🎵Antra是一款开源桌面音乐库管理工具,能把 Spotify、Apple Music、Amazon Music、Tidal、Qobuz、Deezer 等平台的链接转成 FLAC、ALAC、AAC、MP3 的本地无损音乐库。更实用的是,它内置了一套FFT 频谱分析仪,专门回答一个发烧友绕不开的问题:你下载的这个 FLAC,到底是真无损,还是 MP3 改个后缀的"假无损"(Fake Lossless)?本文带你用 Antra 内置 Analyzer 实操判一次,并完整拆解它的 Fake Lossless 判定逻辑。
为什么"FLAC 文件"不等于真无损?
FLAC 本身是无损压缩容器,但它不保证"里面的内容"是无损的:
- 很多人把 Spotify/YouTube Music 下载的 320 kbps MP3 或 AAC,重新封装成 .flac文件分发;
- 文件扩展名、标签都写着 FLAC,播放器也照常播放,唯独高频部分被有损编码器的低通滤波器"切掉"了;
- 靠肉眼或文件名根本看不出来——只有看频谱才能抓住它。
Antra 的 antra-wails/spectrum.go 注释里写得很直白:早期的"六点频率探针"只能在 {8k, 12k, 16k, 17k, 19k, 21k} 里猜一个截止频率,分辨不出 320 kbps MP3 和 256 kbps AAC,更没法和真无损区分,还会凭很弱的信号就武断报"Fake Lossless"。现在的版本改成了真正的 FFT 频谱分析:
- 用 ffmpeg 解码出真实 PCM,跳过片头从曲目 25% 处取约 45 秒音频;
- 4096 点 FFT + Hann 窗,约 11.7 Hz 的频率分辨率,最多平均 900 帧;
- 每个结论都附带置信度(0~1)和证据列表,拿不准时明确报 "inconclusive",而不是瞎猜。
快速上手:3步打开 Antra 频谱分析仪
- 启动 Antra(Windows/macOS/Linux 单文件免安装,首次运行选择音乐库文件夹);
- 点击顶部导航栏的Analyzer(📈 图标),进入内置分析面板;
- 拖入音频文件(支持 FLAC / MP3 / M4A / AAC / ALAC / WAV / AIFF / OGG),即可开始批量分析——支持画廊视图、单项移除和 Clear All。
批量分析完成后,每个文件会显示:频谱图(Spectrogram)、统计面板、以及自动判定的质量徽章。面板入口和实现分别见 antra-wails/frontend/src/App.svelte 与 antra-wails/analyzer.go,功能说明见 FEATURES.md 的Built-in Audio Analyzer一节。
统计面板:6 个指标分别告诉你什么
AnalyzeAudio 会并发跑 ffprobe(元数据)、频谱图生成、音频测量,关键指标一览:
| 指标 | 含义 |
|---|---|
| Peak dBFS | 文件中最响的采样 |
| RMS dBFS | 平均响度 |
| True Peak dBTP | 采样间峰值(流媒体交付的关键) |
| Integrated Loudness (LUFS) | 全文件综合响度 |
| Loudness Range (LRA) | 动态范围 |
| Frequency Cutoff | 仍有有效内容的最高频率 ⭐ |
其中Frequency Cutoff是判定"假无损"的核心线索:真正的无损母带高频能量能顶到接近奈奎斯特频率,而被转码过的文件会在 16~21 kHz 附近出现一道"悬崖"。
Fake Lossless 判定逻辑:三个信号必须"同时指认"
这是 Antra v1.1.8(FEAT-5)最核心的设计:"lossy" 判定要求三条独立信号全部满足,缺一不可(源码见 antra-wails/spectrum.go 的deriveVerdict):
条件 1:存在足够陡峭的"编码墙"
在 8 kHz ~ 21 kHz 区间内寻找最陡的每 1 kHz 降幅,要求降幅 ≥20 dB。消费级编码器的低通滤波器是"断崖式"的,而录音本身的滚降(roll-off)是平缓的。
条件 2:悬崖必须落在编码器"能切"的位置
墙的位置必须在8 kHz 以上、21 kHz 以下——没有任何消费级有损编码器会把低通放在 8 kHz 之下,也不会让 21 kHz 以上的内容通过。
条件 3:墙之上必须跌到"数字地板"
这是最关键、也最容易被漏掉的一条:墙上方频段的能量中位数要 ≤-88 dB。因为编码器会把墙上的频点清零,而母带滚降再陡,上面也留着噪声。实测数据:MP3 320 跌到 -98 dB,MP3 128 跌到 -91 dB,而 96 kHz 真无损母带看似更陡的滚降只跌到 -85 dB——正是这条把两者分开了。
置信度分级
| 墙降幅 | 置信度 |
|---|---|
| ≥ 35 dB | 0.95 |
| ≥ 27 dB | 0.85 |
| ≥ 20 dB | 0.75 |
如果分析帧数不足 60 帧(音频太短/太安静),置信度再打 6 折,并在证据列表里注明"证据不足,已降低置信度"。
三条结论的完整去向
| FFT 结论 | 触发条件 | UI 徽章 |
|---|---|---|
| lossy | 上述三条件全满足且置信度 ≥ 0.75 | 🔴Fake Lossless(并附编码器猜测) |
| lossless | 有效内容延伸到 ≥ 20.5 kHz(有损编码"够不着"的频段) | 🟢 Lossless / Hi-Res Lossless(24-bit ≥ 88.2 kHz) |
| inconclusive | 滚降不够陡或没跌得足够深,无法区分 | 🟡 Inconclusive / Lossless (unverified) |
关键设计哲学:误判真母带为"假无损"是更严重的错误,所以 Antra 宁可报 Inconclusive,也不凭弱信号下结论。只有 FFT 完全不可用时的旧版粗探针结果,也只是标 "Suspect (low cutoff)",绝不直接定性。
顺带猜出它是从哪个码率转来的
guessEncoder会把截止频率映射回常见编码设置,全部以"约"表述:
| 有效内容截止于 | 猜测来源 |
|---|---|
| < 11.5 kHz | ≈64 kbps 或更低 |
| < 15 kHz | MP3 ≈128 kbps |
| < 16.5 kHz | MP3 ≈160 / AAC ≈96 |
| < 18 kHz | MP3 ≈192 / AAC ≈128 |
| < 19.5 kHz | AAC ≈256 kbps |
| < 20.5 kHz | MP3 ≈320 kbps |
一个真实踩过的坑:Hi-Res 文件曾被全判"假"
早期版本按"截止频率 / 奈奎斯特频率"的比值判假:96 kHz 母带由于麦克风和母带处理的原因,24 kHz 以上本来就没内容,比值约 0.5,结果所有 88.2/96/192 kHz 的 Hi-Res 文件一上来就被判 Fake Lossless(实测一个经 Spek 验证的真 96 kHz 无损,25.5 dB 滚降就被冤枉了)。
现在的阈值全部改用绝对频率和绝对电平,不再和奈奎斯特比值挂钩,并在证据列表里明确提示:"高采样率下 24 kHz 以上为空是录音特性,不是转码证据。"
源码与文档索引 🔗
- FFT 分析与判定逻辑:antra-wails/spectrum.go(含回归测试 antra-wails/spectrum_test.go)
- 分析面板调度与统计测量:antra-wails/analyzer.go
- 徽章显示与置信度门槛:antra-wails/frontend/src/App.svelte
- 功能文档:FEATURES.md · 项目总览:README.md
小结
- Antra 内置的 FFT 频谱分析仪是检验 FLAC 真伪最直接的利器:拖文件进去,几秒出结论;
- Fake Lossless 判定 = 陡峭编码墙 + 位置合法 + 跌到数字地板,三条信号同时成立且置信度 ≥ 0.75 才会亮红灯;
- 结论永远是证据 + 置信度的组合,拿不准就诚实地说 Inconclusive——这正是"不冤枉一张真母带"的最短路径。
下次再有人向你甩来一个"无损"FLAC 包,打开 Antra Analyzer,用频谱说话吧 🎧
【免费下载链接】AntraA desktop music library builder that turns Spotify, Youtube Music Apple Music, Amazon Music, Tidal, Qobuz, and Deezer links into fully tagged local library in FLAC, ALAC, Dolby Atmos, AAC, or MP3.项目地址: https://gitcode.com/gh_mirrors/an/Antra
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考