我正在寻找python或bash中的资源,这将使其易于使用,例如,mp3文件X和m4a文件Y并说"将X的标签复制到Y".
Python的"mutagen"模块通常适用于标记标记,但是没有"艺术家字段"的抽象概念跨越不同类型的标记; 我想要一个处理所有繁琐位的库,并知道fieldname等价.对于并非所有标签系统都可以表达的东西,我可以将信息丢失或最佳猜测.
(使用案例:我将无损文件编码为mp3,然后使用mp3进行收听.每个月左右,我希望能够使用我对mp3进行的任何标记更改来更新'master'无损文件.我我厌倦了根据格式之间的实施差异来纠缠我的脚趾.)
我需要这个确切的东西,我也很快意识到诱变剂不是一个足够远的抽象来做这种事情.幸运的是,mutagen的作者需要它的媒体播放器QuodLibet.
我不得不深入研究QuodLibet源代码以了解如何使用它,但是一旦我理解了它,我就编写了一个名为sequitur的实用程序,它旨在成为一个等同于ExFalso(QuodLibet的标记组件)的命令行.它使用这种抽象机制并提供一些额外的抽象和功能.
如果你想查看源代码,这里有一个指向最新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)