我想在 Python 中分离一个 mp3 文件的通道并将其保存在另外两个文件中。有谁知道这方面的图书馆。提前致谢。
1 回答
我假设你想无损地分割频道,而不是解码 MP3 并重新编码 - 否则你根本不会提到 MP3,并且很容易找到很多工具,比如Audacity来做到这一点。
MP3 帧有 4 种通道模式 - 这意味着 4 种类型的 MP3 文件:简单立体声、联合立体声、双通道、单声道。联合立体声文件无法无损分割。单声道文件不需要拆分。其余:立体声和双声道,占所有 MP3 文件的不到 0.1%,技术上可以分成 2 个文件,每个文件为一个声道,不会丢失。然而,互联网上没有任何工具可以做到这一点 - 没有任何命令行工具或任何 GUI 工具,因为很少有人需要该功能。
也没有适合您的 python 库。大多数库在解码后将 MP3 文件抽象为您可以操作的通用音频。pymad 是唯一一个特定于 MP3 文件的文件,它可以判断文件是否使用 4 种通道模式中的任何一种,但不提供在不解码的情况下提取通道。如果您编写一个新工具,您将不得不处理原始 MP3 文件或为其生成一个库。
并且为它编写工具或库并不容易。它是一个具有 2 个通道的流,而不是在帧级别上交错的两个流。您不能简单地处理 MP3 帧、丢弃一些帧、保留其他帧并设法以这种方式提取频道。这是专业人士的任务,也许最好发生在解码器项目(如lame或libmad)中,而不是文件操作项目(如mp3info或 python eyeD3)中。换句话说,这个特性很可能是用 C 编写的,而不是 python。
实施说明:
因此,构建这样一个工具的任务非常适合计算机科学 C 编程语言课程项目: 1. 花费大量时间;2.它需要从C编程课程中学到的每一项技能;3. 容易出错;4. 很可能是建立在其他项目的工作之上,适应现有工作的教训;5. 是一项前所未有的艰巨努力,因此非常有回报 6. 也许可以用 300 行困难的代码来完成,而不是臃肿的简单 Visual Basic 代码,因此是谦虚和质量的好选择;7. 最后:没有人急于等待有效的实施。
所有条件都非常适合 C 编程课程项目。
实施说明 2:
一些比特率只能在单声道模式(80kbps)下实现,而一些比特率只能在立体声模式下实现(例如320kpbs)。幸运的是,这在此任务中不会出现问题,因为所有双 mp3 比特率都可以映射到合适的单声道 mp3 比特率 - 但反之则不然!