把一批录音棚交付的 WAV 归档,硬盘告急,转成 FLAC 把体积砍掉一半;半年后要重新混音,又把 FLAC 转回 WAV。两次转换都标着「无损」,可你发现文件大小变了,连算出来的 MD5 也对不上。于是问题变得很实际:这中间到底有没有偷偷丢掉东西?丢了的话,又是哪一步丢的?

底层原理:无损压缩是 ZIP,不是重采样
WAV、FLAC、ALAC、AIFF 装的是同一类东西------PCM 采样序列,区别只在「怎么装」。
WAV 和 AIFF 属于「裸装」:PCM 原样平铺,前头加一个描述信息的头。WAV 用小端字节序,AIFF 用大端,纯粹是历史包袱,数据本身等价。FLAC 和 ALAC 则是在 PCM 之上做一次无损压缩:先用线性预测(LPC)去掉相邻采样之间的相关性,再对残差做 Rice 熵编码,思路和 ZIP 压文本如出一辙。整个过程严格可逆,解码回来应当逐采样、逐比特一致。
要划清一条界线:无损压缩发生在数据层,不碰采样率、不改位深、不做任何有损变换。它跟「有损转码」是两回事------把 WAV 转成 MP3 再转回 WAV,每一次都要过一遍心理声学模型,被砍掉的高频再也回不来。
所以验证只有一个标准:把两份文件都解码成裸 PCM,逐字节比。下面三条路径,从强到弱各有用途。

验证方法一:解码回 PCM,比音频流哈希
最直接的验证,是把两边还原成原始 PCM 再比哈希:
ffmpeg -v error -i a.wav -f s16le - | md5sum
ffmpeg -v error -i b.flac -f s16le - | md5sum
也可以直接算容器内音频流的哈希
ffmpeg -v error -i b.flac -map 0:a -f md5 -
两个细节最容易翻车:一是要显式指定输出格式 (`-f s16le`),否则 ffmpeg 会按扩展名猜,两条命令可能落在不同采样格式上,哈希必然对不上;二是要确认位深一致,16bit 与 24bit 解码出来字节长度不同,比的根本不是同一样东西。两条命令输出同一个哈希,才有资格说音频流一致。

验证方法二:比时长与采样点数,定位「首尾被截」
哈希一致是最强证据,但它不告诉你问题出在哪。当哈希不一致时,接着比采样点总数:
ffprobe -v error -select_streams a -count_frames \
-show_entries stream=nb_read_frames,sample_rate,duration -of default=nw=1 a.wav
采样点数 = 帧数 × 每帧采样数,它比「时长」可靠得多------时长的显示值是容器和播放器推算出来的,会漂;采样点数是从数据里实打实数出来的。两边采样数吻合,说明没截头、没丢尾、没静音填充;对不上,差值就是被削掉的量。采样率或位深被改动过,这里会第一时间暴露。

验证方法三:相减做差分,把差异「画」出来
前两条判「是否一致」,第三条定位「差在哪」------把两段 PCM 对齐后逐采样相减,看残差:
ffmpeg -i b.flac -c:a pcm_s24le b_decoded.wav
ffmpeg -i a.wav -i b_decoded.wav -filter_complex "amix=inputs=2:weights=1 -1" diff.wav
残差全零,说明两份文件在采样层完全相同;残差是一串低电平噪声(常见在 -80dB 以下,属抖动级别),说明中间混进了别的处理------重采样、抖动、增益;残差在某一点之后突然变大,多半是那一段被有损处理过。差分的价值就在于把「不可逆」变成一个可见的位置,而不是一句笼统的结论。 若手边没有命令行,也可以把两段频谱叠在一起看:真正的无损互转,频谱形态逐点重合,看不出任何一条曲线单独偏出。
落地方案:三步做一次可信的互转验证
这条链路不需要装一堆软件,浏览器里就能走完。
第一步,记下原始文件的真实参数------采样率、位深、声道数、采样点数,用上文 `ffprobe` 或信息面板确认。
第二步,做转换并保留原文件,输出文件名里带上格式与日期,绝不覆盖源文件;无损互转的底气,就在于原文件随时可以回退。
第三步,把输出解码一次与原文件比对:采样点数一致、PCM 哈希一致,才算验证通过。
在浏览器里完成互转与试听核对,可以直接用 AIFooler:上传本地音频、选定目标格式、导出后下载,操作逻辑与上面的验证一一对应------先确认参数、再转换、最后在本地比对,绕开容器的干扰。

收尾:把「无损」当成一个可验证的命题
「无损」不是一个形容词,而是一条能被证伪的技术声明:解码成 PCM,逐采样比。会验证的人,看到 MD5 不同不会慌,知道那多半是容器与元数据的差异;不会验证的人,只能在「听着没差」和「是不是坏了」之间反复猜。真正值得记住的取舍是------能无损就无损地存母版,有损只发生在最后一公里,而且每一步都要能够回退。
