我需要这个确切的东西,但很快意识到mutagen并不足够抽象以执行这种操作。幸运的是,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
def update_tags(mp3_fn, flac_fn):
mp3 = qllib.AudioFile(mp3_fn)
flac = qllib.AudioFile(flac_fn)
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)