抽象id3标签,m4a标签,flac标签之间的转换

时间:2009-03-30 15:50:00

标签: python bash mp3 m4a

我正在寻找python或bash中的资源,这样可以轻松获取,例如,mp3文件X和m4a文件Y,并说“将X的标签复制到Y”。

Python的“mutagen”模块通常适用于标记符号,但是没有“艺术家字段”的抽象概念跨越不同类型的标记;我想要一个处理所有繁琐位的库,并知道fieldname等价。对于并非所有标签系统都可以表达的东西,我可以将信息丢失或最佳猜测。

(使用案例:我将无损文件编码为mp3,然后使用mp3进行监听。每个月左右,我希望能够使用我对其进行的任何标记更改来更新'主'无损文件。我已经厌倦了根据格式之间的实现差异来纠缠我的脚趾。)

5 个答案:

答案 0 :(得分:9)

我需要这个确切的东西,我也很快意识到诱变剂不是一个足够远的抽象来做这种事情。幸运的是,mutagen的作者需要它的媒体播放器QuodLibet

我不得不深入研究QuodLibet源代码以了解如何使用它,但是一旦我理解了它,我写了一个名为 sequitur 的实用程序,它的目的是成为一个等同于 ExFalso (QuodLibet的标记组件)。它使用这种抽象机制,并提供一些额外的抽象和功能。

如果您想查看来源here's a link to the latest tarball。该包实际上是一组三个命令行脚本和一个用于与QL连接的模块。如果您想安装整个产品,可以使用:

easy_install QLCLI

关于exfalso / quodlibet(以及因此sequitur)要记住的一件事是它们实际上正确地实现了音频元数据,这意味着所有标签都支持多个值(除非文件类型禁止它,其中没有多少做)。所以,做一些像:

print qllib.AudioFile('foo.mp3')['artist']

不会输出单个字符串,但会输出一个字符串列表,如:

[u'The First Artist', u'The Second Artist']

您可以使用它来复制标签的方式如下:

import os.path
import qllib  # this is the module that comes with QLCLI

def update_tags(mp3_fn, flac_fn):
    mp3 = qllib.AudioFile(mp3_fn)
    flac = qllib.AudioFile(flac_fn)
    # you can iterate over the tag names
    # they will be the same for all file types
    for tag_name in mp3:
        flac[tag_name] = mp3[tag_name]
    flac.write()

mp3_filenames = ['foo.mp3', 'bar.mp3', 'baz.mp3']

for mp3_fn in mp3_filenames:
    flac_fn = os.path.splitext(mp3_fn)[0] + '.flac'
    if os.path.getmtime(mp3_fn) != os.path.getmtime(flac_fn):
        update_tags(mp3_fn, flac_fn)

答案 1 :(得分:2)

这是一些示例代码,我编写的用于复制标记的脚本 文件使用Quod Libet的音乐格式类(不是mutagen的!)。跑步 它,只是做copytags.py src1 dest1 src2 dest2 src3 dest3,它 将sec1中的标签复制到dest1(删除任何现有标签后) 在dest1!),等等。请注意黑名单,您应该调整它 你自己的偏好。黑名单不仅会阻止某些标签 从被复制,它也将防止它们被破坏 目的地文件。

要明确的是,Quod Libet的格式不可知标记不是诱变剂的特征;它是在 mutagen之上实现的。因此,如果您想要格式无关的标记,则需要使用quodlibet.formats.MusicFile来打开文件,而不是mutagen.File

现在可以在此处找到代码:https://github.com/DarwinAwardWinner/copytags

如果您还想同时进行转码,请使用:https://github.com/DarwinAwardWinner/transfercoder

我的一个重要细节是Quod Libet的音乐格式课程 期待加载QL的配置,因此我的config.init行 脚本。没有它,我在加载或保存时会遇到各种错误 文件。

我已经测试了这个脚本,用于在flac,ogg和mp3之间复制,带有“标准”标签,以及任意标签。到目前为止它一直运作良好。

至于我没有使用QLLib的原因,它对我不起作用。我怀疑它得到了与我相同的配置相关错误,但却默默地忽略了它们而只是无法编写标签。

答案 2 :(得分:2)

我有一个bash脚本正是这样做的,atwat-tagger。它支持flac,mp3,ogg和mp4文件。

usage: `atwat-tagger.sh inputfile.mp3 outputfile.ogg`

我知道您的项目已经完成,但是通过搜索引擎找到此页面的人可能会发现它很有用。

答案 3 :(得分:0)

您可以编写一个简单的应用程序,将每种格式的每个标记名称映射到“抽象标记”类型,然后很容易从一个转换为另一个。您甚至不必了解所有可用的类型 - 只是您感兴趣的类型。

对我而言,就像周末项目类型的时间投资,可能更少。玩得开心,我不介意看看你的实现,甚至使用它 - 如果你不介意当然释放它:-)。

答案 4 :(得分:0)

还有tagpy,似乎效果很好。