使用 python 创建有效的 .mp3 文件

Posted

技术标签:

【中文标题】使用 python 创建有效的 .mp3 文件【英文标题】:Create valid .mp3 file with python 【发布时间】:2016-06-12 17:29:18 【问题描述】:

我看到了这段 perl 代码,它创建了一个 MP3 对象并向其写入了一些标签。我不在 perl 中编写代码,但我假设它会创建一个带有标签的有效 mp3 文件。

$mp3 = MP3::Tag->new('1.mp3');
$mp3->title_set('Some_title');
$mp3->artist_set('Some_artist');
$mp3->update_tags();  
$mp3->close();

我想用python写一些类似的东西。 到目前为止,我已经尝试过 mutagen 和 eyeD3,但我只能用这段代码覆盖现有 mp3 文件的标签,我在某处找到了:

from mutagen.easyid3 import EasyID3

# works with valid mp3 files, which already have tags
def manipulate_id3_tags(path, title, artist, genre):
    try:
        meta = EasyID3(path) # HERE I GET ERROR
        # i assume, if no meta tags where found, it will create some
        # but it never hits the exception even it is ID3NoHeaderError
    except ID3NoHeaderError:                          
        meta = mutagen.File(path, easy=True)    # this also can't be a proper function call
        meta.add_tags()
    meta['title'] = title
    meta['artist'] = artist
    meta['genre'] = genre
    meta.save()
    print(meta)

我不认为这些模块可以从头开始创建 mp3 文件。

我阅读了关于 MP3 的wikipedia article。我的想法是在 python 中创建一个 .mp3 文件并将标题写入它。然后我用垃圾代码填充其余部分。

这是我根据***文章的示例标题: 11111111 11111011 11010110 00000100

byte_header = b"\xff\xfb\xd6\x04"
mp3 = open(path + "\\my_file.mp3", "wb")
mp3.write(byte_header)
mp3.write(b"\x01" * 800)
mp3.close

我在上面的注释行收到错误 'C:\Users\Admin\Music\my_file.mp3' 不以 ID3 标签开头

即使错误处理会起作用,我认为这种方法也不会起作用。 任何人都可以在这里帮助我。只想创建一个简单的 mp3 虚拟文件,我可以在其中写入有效且可读的标签。

【问题讨论】:

【参考方案1】:

您对 Perl 的 MP3::Tag 模块有误。它的构造函数需要一个现有的有效 MP3 文件,您可以读取和修改其标签。它不会从头开始创建 MP3 文件

This site 有长度为 1/10 秒以上的静音 MP3 文件,我建议您只需下载其中一个

【讨论】:

感谢您的回答。关于这个页面,通过简单地将有效的 mp3 标头写入文件来创建有效的 mp3 文件并不像我想象的那么容易。期望从不工作的错误处理中,我可以将一些标签写入这些无声的 mp3 文件,例如VLC 识别。 由于空白 mp3 的链接已失效,我建议改用这个 Github 存储库:anars/blank-audio。

以上是关于使用 python 创建有效的 .mp3 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 python 和音频文件创建自定义文本到语音?

使用 python 从 mp3 音频文件中获取幅度数据

使用python将任何音频文件转换为mp3

如何使用 python 脚本停止/关闭音频文件(mp3/.wav)

如何使用python获取mp3文件的采样率

如何在 Python 中播放 .MP3 文件?