代码之家  ›  专栏  ›  技术社区  ›  rook

如何检测转码音频的生成丢失

  •  2
  • rook  · 技术社区  · 14 年前

    假设你有一个96kbit的MP3 Transcode 将文件转换为320 kbit MP3。如何以编程方式检测原始比特率或质量? Generation loss 因为每次应用有损算法时,新信息都被视为“不必要”并被丢弃。算法如何使用此属性检测音频转码。

    128 kbps的跛足MP3转码为320 kbps的跛足MP3(我感觉你,戴普模式)10.8 MB。
    alt text http://blowfish.be/eac/Spectral/Images/mp3_128-320.png

    这张照片是从 this site . 上面的两条轨迹看起来几乎相同,但差异足以支持这个论点。

    4 回复  |  直到 14 年前
        1
  •  4
  •   Igor Krivokon    14 年前

    一种方法是分析信号的频谱。我不确定是否可以确定确切的原始速率,但您可以明确区分真正的320 kbps MP3和转码的96->320 kbps。96kbps的MP3将在15kHz左右时有更高的频率。320 kbps应该在18-20 kHz或更高的频率下非零(这取决于编码器)。

        2
  •  2
  •   Ion Todirel    14 年前

    比特率存储在 MPEG frame header . 除非用ID3之类的东西存储原始比特率,否则这不是一个简单的方法。

    编辑 :更新了答案,看起来我误解了原始问题。

        3
  •  2
  •   MusiGenesis    14 年前

    如果您通过将原始MP3转换为未压缩格式(如wav)进行转码,然后以较高的比特率重新编码为MP3,那么就不可能仅根据转换后的文件来确定原始文件的比特率。我想这个过程可能会产生一些非常微妙的音频产物,可以从统计上进行分析,但在我看来,这是一项非常艰巨的工作,不太可能成功。

    我不确定是否有可能在不解码和重新编码的情况下提高MP3的速率,但即使它 可能的话,进程仍然不会在新文件中保留原始比特率。同样,这个过程可能会产生一些奇怪的、可测量的工件,它们可能暗示着原始比特率,但我对此表示怀疑。

    更新: 现在我想到了它,也许可以通过某种方式检测到它,尽管我不知道如何通过编程实现它。人类的耳朵可以做出这样的区分(不管怎样,其中一些):我可以清楚地分辨出128K mp3和196K mp3之间的区别,所以区分96K和320K是小菜一碟。一个96K的MP3已经被升级了,它仍然拥有96K版本中的所有音频产物(不幸的是,还有新的)。

    但是,我不知道如何用代码来确定这个问题。如果我必须这样做,我会训练鸽子去做(我不是开玩笑)。

        4
  •  1
  •   Marcus Adams    14 年前

    您在光谱显示中看到的差异可能主要是由于量化误差造成的。如果在低比特率音频文件上最大化比特深度(分辨率),并在上转换(过采样)时保持该比特深度,则频谱显示应更接近匹配。编码器也可能使用一些抖动来避免量化错误导致的音频伪影。

    如果位深已经以较低的比特率最大化了,那么添加的点将很明显,您将在波形中看到一些锯齿状的边缘。否则,如果有足够的位深度,您将无法确定哪些点是原始的,哪些是添加的。这尤其适用于高端上变频器,它将使用曲线投影新点,而不是简单地在现有点之间均匀绘制新点。

    根据定义,采样率决定了可能的频率范围,所以这将是您确定原始比特率的最佳选择,正如igor建议的那样。