假设您有一个96 kbit的mp3,并且Transcode该文件为320 kbit的mp3。你怎么能以编程方式检测原始比特率或质量?创建Generation loss是因为每次应用有损算法时,新信息将被视为“不必要”并被丢弃。算法如何使用此属性来检测音频的转码。
128 kbps LAME mp3转码为320 kbps LAME mp3(I Feel You,Depeche Mode)10.8 MB。
alt text http://blowfish.be/eac/Spectral/Images/mp3_128-320.png
此图片来自this site的底部。上面的2个轨道看起来几乎相同,但差异足以支持这个论点。
答案 0 :(得分:4)
一种方法是分析信号的频谱。我不确定是否可以确定确切的原始速率,但你可以肯定地告诉真正的320 kbps mp3和转码96 - > 320 kbps。 96 kbps的mp3将以15 kHz左右的频率切割更高的频率。 320 kbps应该在18-20 kHz左右或甚至更高时具有非零值(取决于编码器)。
答案 1 :(得分:2)
比特率存储在MPEG frame header中。除非你用ID3之类的东西存储原始比特率,否则没有简单的方法。
编辑:更新了答案,看起来我误解了原来的问题。
答案 2 :(得分:2)
如果您通过将原始MP3转换为未压缩格式(如WAV)进行转码,然后以更高比特率重新编码为MP3,则仅在转换后的文件中无法确定原始文件的比特率。我想这个过程可能会产生一些令人难以置信的微妙的音频文件,可以通过统计分析,但在我看来,这将是一项非常艰巨的工作,并且不太可能成功。
我不确定是否可以在没有解码和重新编码的情况下对MP3进行升级,但即使 可能,该过程仍然无法保留新文件中的原始比特率。同样,这个过程可能产生一些奇怪的,可测量的伪像,可能暗示原始的比特率,但我对此表示怀疑。
更新:现在,我想起来,有可能以某种方式检测到这一点,虽然我不知道如何以编程方式进行。人耳可以做出这样的区分(其中一些,无论如何):我可以清楚地区分128k MP3和196k MP3之间的区别,因此区分96k和320k将是小菜一碟。已经上传的96k MP3仍然会有96k版本中的所有音频工件(不幸的是还有新版本)。
但是,我不知道如何使用代码确定这一点。如果我必须做这项工作,我会训练鸽子去做(而且我不是在开玩笑)。
答案 3 :(得分:1)
您在光谱显示中看到的差异可能主要是由于量化误差。如果您在较低比特率音频文件上最大化比特深度(分辨率),并在上转换(过采样)时保持该比特深度,则频谱显示应该更紧密地匹配。编码器也可能使用一些抖动来避免由于量化误差造成的音频伪影。
如果位深度已经以较低的比特率达到最大值,那么添加的点将是显而易见的,并且您将在波形中看到一些锯齿状边缘。否则,给定足够的位深度,您将无法确定哪些点是原始点以及哪些点已添加。对于使用曲线投影新点而不是简单地在现有点之间均匀绘制新点的高端上变频器尤其如此。
根据定义,采样率决定了可能的频率范围,因此这是确定原始比特率的最佳选择,正如Igor建议的那样。