我们正在Python中随时生成MP3文件,并且需要使用类似文件的对象在内存中编辑ID3标头。在Python中的文件类对象上编辑MP3元数据?
PyPI上的所有ID3库出现要求您以字符串形式传递文件系统路径。我觉得这很令人沮丧!
由于多种原因,特别是性能,将我们生成的MP3写入磁盘(或ramdisk)仅用于添加ID3标记是不可接受的。
鉴于ID3库的庞大程度,有没有一个ID3库,只是与文件类对象一起工作?
我们正在Python中随时生成MP3文件,并且需要使用类似文件的对象在内存中编辑ID3标头。在Python中的文件类对象上编辑MP3元数据?
PyPI上的所有ID3库出现要求您以字符串形式传递文件系统路径。我觉得这很令人沮丧!
由于多种原因,特别是性能,将我们生成的MP3写入磁盘(或ramdisk)仅用于添加ID3标记是不可接受的。
鉴于ID3库的庞大程度,有没有一个ID3库,只是与文件类对象一起工作?
那么,答案似乎是没有这样的动物存在。编程到界面的优势显然在Python的MP3框架黑客身上丧失了。我们通过修改现有的库来解决问题。
AFAIR标记被追加到文件的末尾。你可能想研究一下这个格式,并自己创建一个简单的库,这应该不是很困难。
另外,您可以考虑将它们临时存储在像tmpfs(ramdisk)这样的文件系统上。
StringIO有帮助吗? http://docs.python.org/library/stringio.html
问题是,我见过的所有库都不能用w/StringIO或者类似的东西,因为它们需要文件系统路径。 – 2009-10-07 21:56:22
,你不想修改其中一个更简单的库? – foosion 2009-10-07 22:08:06
你会推荐一个简单的修改吗? – 2009-10-08 13:26:43
对于那些寻求在遥远的未来,mutagen这个答案,已经完全为我工作,并为它的MP3的一个对象的构造函数采用要么文件路径或一个类文件对象(文档叫它一个'文件')。
从https://mutagen.readthedocs.io/en/latest/user/filelike.html:
传递给一个文件类型或元数据的第一个参数可以是一个文件名或类似文件的对象,如StringIO的(BytesIO在Python 3)和诱变剂会找出去做。
MP3("myfile.mp3") MP3(myfileobj)
实际上,ID3标签是最好的。 http://en.wikipedia.org/wiki/ID3#ID3v2 – 2009-10-07 21:46:16
哈,我不知道他们将标签移动到ID3v2文件的开头... – liori 2009-10-07 21:56:05
是的。至于tmpfs,这太骇人了。我已经有内存中的对象 - 为什么我需要复制它以使用它? – 2009-10-07 22:00:32