python使用变量存储以下mp3信息_如何使用python从mp3文件中提取原始数据?

这篇博客探讨了如何使用Python从.mp3文件中提取原始数据,以理解MP3压缩的工作原理。虽然纯Python实现不如专门工具(如ffmpeg)高效,但它对于学习和探索音频压缩算法非常有价值。文章建议创建Python类来表示MP3帧,并通过读取二进制文件来实现。还建议模拟简单的编码方案,通过频域变换来体验数据丢失和恢复过程,从而深入了解MP3压缩技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

stackoverflow周围也有一些类似的问题。有不同的用例。用户希望将.mp3文件转换为PCM文件,如.wav文件。

用户希望访问.mp3文件中的原始数据(即,不要将其视为压缩的PCM)。这里的用例是理解MP3和AAC这样的压缩方案是如何工作的。

这个答案是针对其中的第二个,尽管我没有工作代码可以共享或指向。

MP3等压缩方案通常在频域工作。作为一个简单的例子,您可以一次获取一个.wav文件1024个样本,使用FFT变换1024个样本的每个块,并将其存储。粗略地说,有损压缩然后丢弃来自频域的信息,以便允许更小的编码。

如果只想从.mp3转换为.wav,那么纯python实现是非常不切实际的。但是,如果你想探索.mp3和相关的方案是如何工作的,有一些你可以很容易地修改的东西,即使代码运行速度比ffmpeg使用的慢1000倍,实际上也是有用的,特别是如果用一种让源代码的读写者能够看到.mp3压缩是如何工作的方式编写的。例如,请参阅http://bugra.github.io/work/notes/2014-07-12/discre-fourier-cosine-transform-dft-dct-image-compression/中的IPython工作簿,该工作簿介绍如何在JPEG等图像压缩方案中使用频域变换。类似于MP3压缩和类似的东西对人们学习压缩很有用。

mp3文件基本上是一个mp3帧序列,每个帧都有一个头部和数据组件。然后,第一个任务是编写一个(或多个)Python类来表示它们,并从.mp3文件中读取它们。首先以二进制模式(即f=open(filename,“rb”)读取文件,然后data=f.read()——在现代机器上,假设.mp3中的一首典型的5分钟歌曲大约为5 MB,那么您也可以一次性读取整个文件。

按照这些思路编写一个更简单(而且效率要低得多)的编码方案来探索它的工作原理也是值得的,随着时间的推移,可以逐渐添加MP3和AAC这样的技巧方案。例如,将一个PCM输入文件分割成1024个样本块,使用FFT或DCT或其他方法,然后再返回,看看如何恢复原始数据。然后探索如何将数据从频率转换版本中丢弃,并查看它在转换回PCM数据时的效果。一开始,最终的结果将非常糟糕,但是通过看到问题,并看到MP3和AAC所做的事情,您可以了解到为什么这些压缩方案以它们的方式做事情。

简而言之,如果您的用例是一个“完成任务”用例,那么您可能不想使用Python。另一方面,如果你的用例是一个“学习如何完成事情”的用例,那就不一样了。(作为一个粗略的经验法则,从90年代开始,在奔腾100上使用优化后的程序集可以做些什么,在现代核心i5上使用Python可以达到大致相同的性能——大概是这样——原始性能有100倍左右,使用Python也会有类似的减速)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值