使用 eyeD3 嵌入来自 URL 的专辑封面

Using eyeD3 to embed album art from URL

我正在编写一个 python 脚本,该脚本从服务器下载音乐文件,然后从 URL 向其添加专辑图像,为此我正在使用 eyeD3 python 库下面我的原始代码。

import eyed3

mySong = eyed3.load('C:\Users\PC\Music\Test.mp3')
mySong.tag.album_artist = u'Artist-Name'
mySong.tag.images.remove(u'')
mySong.tag.images.set(3, 'None', 'https://upload.wikimedia.org/wikipedia/en/6/60/Recovery_Album_Cover.jpg')
mySong.tag.save()

我已经尝试了这个命令的不同版本,它 returns 没有错误但没有像上面的代码那样嵌入图像,或者 returns 一条错误消息表明 "ValueError: img_url MUST not be none when no image data"。

在我的另一个选择是直接从 URL 下载图像存储在一个文件夹中并从那里嵌入然后删除显然我的其他解决方案会更好。

任何人都成功地使用了 eyeD3 的这一部分。

您可以使用urllib2从URL获取图像的图像数据,然后在eyed3中使用它。

import urllib2
response = urllib2.urlopen(your image url)  
imagedata = response.read()

import eyed3
file = eyed3.load("song.mp3")
file.tag.images.set(3, imagedata , "image/jpeg" ,u"Description")
file.tag.save()

使用

mySong.tag.images.set(type_=3, img_data=None, mime_type=None, description=u"you can put a description here", img_url=u"https://upload.wikimedia.org/wikipedia/en/6/60/Recovery_Album_Cover.jpg")

解释:

mySong.tag.images.set 正在调用 src/eyed3/id3/tag.py.

中定义的 class ImagesAccessorset 函数

签名如下:

def set(self, type_, img_data, mime_type, description=u"", img_url=None):
    """Add an image of ``type_`` (a type constant from ImageFrame).
    The ``img_data`` is either bytes or ``None``. In the latter case
    ``img_url`` MUST be the URL to the image. In this case ``mime_type``
    is ignored and "-->" is used to signal this as a link and not data
    (per the ID3 spec)."""