假设您有一个 96 kbit mp3,并且您将文件转码为 320 kbit mp3。您如何以编程方式检测原始比特率或质量?生成损失是因为每次应用有损算法时,新信息将被视为“不必要的”并被丢弃。算法如何使用此属性来检测音频的转码。
128 kbps LAME mp3 转码为 320 kbps LAME mp3(我感觉到你,Depeche 模式)10.8 MB。
这张图片是从这个网站的底部拍摄的。上面的 2 条轨道看起来几乎相同,但差异足以支持这一论点。
一种方法是分析信号的频谱。我不确定是否可以确定确切的原始速率,但您绝对可以分辨出真正的 320 kbps mp3 和转码后的 96 -> 320 kbps。96 kbps mp3 将在 15 kHz 左右有更高的频率。320 kbps 应该在 18-20 kHz 左右或更高(取决于编码器)处具有非零值。
比特率存储在MPEG 帧头中。除非您使用 ID3 之类的东西存储原始比特率,否则没有简单的方法。
编辑:更新了答案,看起来我误解了原来的问题。
如果您通过将原始 MP3 转换为未压缩格式(如 WAV)然后以更高比特率重新编码为 MP3 进行转码,那么仅给定转换后的文件就无法确定原始文件的比特率。我想这个过程可能会产生一些非常微妙的音频伪影,可以进行统计分析,但在我看来,这将是一项非常艰巨的工作,而且不太可能成功。
我不确定是否甚至可以在不解码和重新编码的情况下提高 MP3 的速率,但即使有可能,该过程仍然不会在新文件中保留原始比特率。同样,这个过程可能会产生某种奇怪的、可测量的伪影,这些伪影可能暗示原始比特率,但我对此表示怀疑。
更新: 现在我考虑了一下,可能以某种方式检测到这一点,尽管我不知道如何以编程方式进行。人耳可以做出这样的区分(其中一些,无论如何):我可以清楚地分辨 128k MP3 和 196k MP3 之间的区别,因此区分 96k 和 320k 将是小菜一碟。已升级的 96k MP3 仍将具有 96k 版本中存在的所有音频伪像(不幸的是,还有新的伪像)。
但是,我不知道您将如何使用代码来确定这一点。如果我必须完成这项工作,我会训练鸽子去做(我不是在开玩笑)。
您在频谱显示中看到的差异可能主要是由于量化误差。如果您最大化较低比特率音频文件的位深度(分辨率),并在上转换(过采样)时保持该位深度,则频谱显示应该更接近匹配。编码器还可能使用了一些抖动来避免由于量化错误而导致的音频伪影。
如果位深度已经在较低的比特率下达到最大值,那么添加的点会很明显,您会在波形中看到一些锯齿状边缘。否则,给定足够的位深度,您将无法确定哪些点是原始的,哪些是添加的。对于将使用曲线投影新点而不是简单地在现有点之间均匀地绘制新点的高端上变频器来说尤其如此。
根据定义,采样率决定了可能的频率范围,因此正如 Igor 建议的那样,这将是确定原始比特率的最佳选择。