使用eyed3如何设置“专辑艺术家”?

6
我正在尝试使用Python库eyed3来修改一个大量的 .MP3 文件的艺术家名称。我尝试使用该项目网页(http://eyed3.nicfit.net/)上的示例代码,setsaudiofile.tag.artist可以更改"Contributing Artist"。根据文档(http://eyed3.nicfit.net/api/eyed3.html),标签对象中没有其他艺术家字段。
是否可能使用eyed3来实际更改专辑艺术家?如果可以,请提供清晰、简洁的Python代码。

1
如果您正在寻找专辑封面,即图像文件。这里有一个stackoverflow答案https://dev59.com/9XRC5IYBdhLWcg3wG9Jb#1002814。album_artisttag对象中可用 import eyed3; audiofile = eyed3.load("song.mp3"); audiofile.tag.album_artist = u"Various Artists";, 示例来自http://eyed3.nicfit.net/ - RajaRaviVarma
感谢您的回复和有用的链接! 我实际上是想设置'专辑艺术家'标签。我对实际的艺术本身不感兴趣(我觉得一旦它在我的iPod /媒体播放器等上,我不会看它,只会听它 :))。album_artist:嗯,是的,那看起来是正确的。话虽如此,自从我问这个问题以来已经过了一段时间(看起来是1.5年),我老实说无法记得为什么那样做(或不做)的确切细节。不过,那个例子似乎非常清楚-我想也许API自从我问问题以来已经改变了?无论如何-谢谢! - MikeTheTall
3个回答

2

这是我一段时间前写下的命令,用于更改该字段:

eyeD3 --set-text-frame=TPE2:"Various Artists" filename.mp3

其中,“Various Artists”是你希望在“专辑艺术家”字段中出现的值。


你可以通过以下语法来更正你的答案:eyeD3 --set-text-frame=TPE2:"Various Artists" *.mp3。eyeD3 完全能够处理这个需求。你可以提到官方规范 http://id3.org/id3v2.3.0。 - cinhtau
为什么“乐队/管弦乐团/伴奏”框架用于记录表演者的附加信息,但在媒体播放器上被翻译成“专辑艺术家”?这是否是正确的框架?编辑:“从iTunes 7开始(确认?),TPE1框架用于‘艺术家’字段,TPE2框架用于‘专辑艺术家’。”http://id3.org/iTunes 还请参阅Foobar2000 ID3规范:http://wiki.hydrogenaud.io/index.php?title=Foobar2000:ID3_Tag_Mapping - Jay
@cinhtau 我理解为命令 eyeD3 --album-artist="Various Artists" *.mp3 现在应该可以工作了。但实际上并没有。 - Tom Russell
@TomRussell 不确定为什么您认为您的命令会起作用。我的回答是两年前,并且在当时使用的eyed3版本和IMHO仍然有效。您只需使用TPE2字段存储信息即可。任何id3查看器都将给您正确的信息。 - cinhtau
@cinhtau 抱歉,我想我误解了。对我来说,“完全支持”意味着我所述的命令语法与API的其余部分一致应该可以工作。我不明白为什么我们必须访问一个晦涩的数据项。 - Tom Russell
显示剩余2条评论

1

针对大量的MP3收藏,您可以将同一位艺术家的所有歌曲放在一个特定的文件夹中。例如:所有“Coldplay”歌曲都放在“Coldplay”文件夹中。

如果您使用Linux系统,可以执行以下操作:

import os
import eyed3
folder = raw_input('Please enter the folder of music')
files = os.listdir(folder) # This will give us a list of all of the MP3s in that folder
artist = folder.split('/')[-1]

for x in files:
    mp3 = eyed3.load(folder + '/' + x) # Loads each and every MP3
    mp3.tag.artist = unicode(artist, "UTF-8") # Sets the "artist" tag to the artist name 
    mp3.tag.save() # Saves tag

如果您使用的是Windows系统,请将代码中所有的斜杠“/”替换为反斜杠“\”。

以上代码对我来说运行得很好。如果我能帮上忙就很高兴 :)


我认为OP是在询问“专辑封面”,而不是“艺术家”! - RajaRaviVarma
1
不是的,OP在问专辑艺术家,而不是专辑封面艺术(请参见上面的扩展回复)。 - MikeTheTall
5
仍然,这并没有回答问题“如何使用eyed3设置‘专辑艺术家’?” - Steven Roose
1
此代码假设您的文件系统中的专辑是按艺术家分组的。请自行决定是否运行。 - Tom Russell

0
相关:如果专辑艺术家为空,我希望将其设置为 Quod Libet中音乐库的艺术家字段的值。 以下方法有效:
import os
import quodlibet.library

library_path = os.path.join(quodlibet.get_user_dir(), "songs")
library = quodlibet.library.init(library_path)

for song in library:
    if song('albumartist') == '':
        song['albumartist'] = song('artist')
        print(song['albumartist'])
    library.changed([song])

library.save()

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