我正在寻找python或bash中的资源,这样可以轻松获取,例如,mp3文件X和m4a文件Y,并说“将X的标签复制到Y”。
Python的“mutagen”模块通常适用于标记符号,但是没有“艺术家字段”的抽象概念跨越不同类型的标记;我想要一个处理所有繁琐位的库,并知道fieldname等价。对于并非所有标签系统都可以表达的东西,我可以将信息丢失或最佳猜测。
(使用案例:我将无损文件编码为mp3,然后使用mp3进行监听。每个月左右,我希望能够使用我对其进行的任何标记更改来更新'主'无损文件。我已经厌倦了根据格式之间的实现差异来纠缠我的脚趾。)
答案 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,似乎效果很好。