有没有使用mutagen写入文件的好例子?

19

正如标题所问 - 是否有使用Mutagen Python ID3库.mp3文件写入信息的好例子?

我特别想添加唱片/曲目编号信息,但编辑标题和艺术家的示例也会很有帮助。

干杯!
/YGA


2
Mutagen教程有问题吗?http://code.google.com/p/mutagen/wiki/Tutorial - pafcu
3个回答

27

这是我一段时间前编写的一个脚本,用于将歌词嵌入到MP3文件中:

http://code.activestate.com/recipes/577138-embed-lyrics-into-mp3-files-using-mutagen-uslt-tag/

其中相关的部分是:

from mutagen.id3 import ID3NoHeaderError
from mutagen.id3 import ID3, TIT2, TALB, TPE1, TPE2, COMM, TCOM, TCON, TDRC, TRCK

# Read the ID3 tag or create one if not present
try: 
    tags = ID3(fname)
except ID3NoHeaderError:
    print("Adding ID3 header")
    tags = ID3()

tags["TIT2"] = TIT2(encoding=3, text=title)
tags["TALB"] = TALB(encoding=3, text=u'mutagen Album Name')
tags["TPE2"] = TPE2(encoding=3, text=u'mutagen Band')
tags["COMM"] = COMM(encoding=3, lang=u'eng', desc='desc', text=u'mutagen comment')
tags["TPE1"] = TPE1(encoding=3, text=u'mutagen Artist')
tags["TCOM"] = TCOM(encoding=3, text=u'mutagen Composer')
tags["TCON"] = TCON(encoding=3, text=u'mutagen Genre')
tags["TDRC"] = TDRC(encoding=3, text=u'2010')
tags["TRCK"] = TRCK(encoding=3, text=u'track_number')

tags.save(fname)

另请参阅:


我想知道是否应该像 ID3 一样关闭文件对象。 - Roman Shapovalov
1
文档中没有提到类似于 close() 方法的内容,因此我认为只需要使用 save() 方法即可。如果需要更多细节,可以查看源代码:https://github.com/quodlibet/mutagen - ccpizza
代码使用复杂的逻辑来维护上下文;从代码中很难判断它是存储文件名还是打开的文件描述符:https://github.com/quodlibet/mutagen/blob/6298fa63e619f3d31dcc79c72898489f57ad2b3e/mutagen/_util.py#L207 我希望是前者,即每次加载/保存时都会打开文件。我也在循环中编辑了数千个文件而没有崩溃,所以这可能没问题(尽管我不知道我的系统每个进程的文件描述符限制是多少)。 - Roman Shapovalov
我假设该软件包遵循最少惊讶原则。如果您遇到瓶颈或限制,请考虑在Github上提交问题,以便作者回应。 - ccpizza

6

你是否查看了网上的示例?其中一些应该会对你有所帮助。

[编辑:]

Mutagen教程非常好,因此没有添加更多信息。dir()提供了大部分细节。

使用mutagen为mp3设置专辑封面

使用mutagen嵌入歌词

一个例子

from mutagen.mp3 import MP3
from mutagen.easyid3 import EasyID3
import mutagen.id3

filename = 'xxx.mp3'

# Example which shows how to automatically add tags to an MP3 using EasyID3

mp3file = MP3(filename, ID3=EasyID3)

try:
    mp3file.add_tags(ID3=EasyID3)
except mutagen.id3.error:
    print("has tags")

mp3file['title'] = 'Newly tagged'
mp3file.save()
print(mp3file.pprint())

6
一种简单的方法是:
from mutagen.easyid3 import EasyID3
audio = EasyID3(mp3_filename_import)
audio['title'] = "Title"
audio['artist'] = "Artist"
audio['album'] = "Album"
audio['composer'] = "" # empty
audio.save()

如果标签未出现,请将最后一行更改为:
audio.save(v2_version=3)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接