使用Python 3中的Mutagen将专辑封面嵌入到mp3中

4

ID3。这是Python 3的API,我不确定如何嵌入图像,到目前为止,我只更改了标签。

def addMetaData(url, title, artist, album, track):

    response = requests.get(url, stream=True)
    with open('img.jpg', 'wb') as out_file:
        shutil.copyfileobj(response.raw, out_file)
    del response

    audio = MP3(filename=title+".mp3", ID3 = EasyID3)
    audio['artist'] = artist
    audio['title'] = title
    audio['tracknumber'] = track
    audio['album'] = album

    audio.save()

请提供一个带有明确问题陈述的MCVE - MD XF
2个回答

7

我认为使用 EasyID3 不能嵌入专辑封面, 但是使用 ID3 可以。

您可以按照以下步骤使用 ID3 嵌入专辑封面:

from mutagen.id3 import ID3, APIC

audio = ID3('music_file.mp3')

with open('img.jpg', 'rb') as albumart:
    audio['APIC'] = APIC(
                      encoding=3,
                      mime='image/jpeg',
                      type=3, desc=u'Cover',
                      data=albumart.read()
                    )

audio.save()

如果性能不是您的主要关注点,您可以使用EasyID3保存文本元数据,然后再使用ID3加载音乐文件以嵌入专辑艺术。否则,您可以完全使用ID3来处理。
因此,在第一种情况下,您的代码将如下所示:
import requests
import shutil

# you can directly import EasyID3 and ID3
from mutagen.easyid3 import EasyID3
from mutagen.id3 import ID3, APIC

def addMetaData(url, title, artist, album, track):

    response = requests.get(url, stream=True)
    with open('img.jpg', 'wb') as out_file:
        shutil.copyfileobj(response.raw, out_file)
    del response

    audio = EasyID3('music_file.mp3')
    audio['artist'] = artist
    audio['title'] = title
    audio['tracknumber'] = track
    audio['album'] = album
    audio.save()

    audio = ID3('music_file.mp3')
    with open('img.jpg', 'rb') as albumart:
        audio['APIC'] = APIC(
                          encoding=3,
                          mime='image/jpeg',
                          type=3, desc=u'Cover',
                          data=albumart.read()
                        )            
    audio.save()

在第二种情况下:
import requests
import shutil

from mutagen.id3 import ID3, TPE1, TIT2, TRCK, TALB, APIC

def addMetaData(url, title, artist, album, track):

    response = requests.get(url, stream=True)
    with open('img.jpg', 'wb') as out_file:
        shutil.copyfileobj(response.raw, out_file)
    del response

    audio = ID3('music_file.mp3')
    audio['TPE1'] = TPE1(encoding=3, text=artist)
    audio['TIT2'] = TALB(encoding=3, text=title)
    audio['TRCK'] = TRCK(encoding=3, text=track)
    audio['TALB'] = TALB(encoding=3, text=album)

    with open('img.jpg', 'rb') as albumart:
        audio['APIC'] = APIC(
                          encoding=3,
                          mime='image/jpeg',
                          type=3, desc=u'Cover',
                          data=albumart.read()
                        )            
    audio.save()

注意:您还可以直接使用urllib2嵌入专辑封面,无需先将其保存在磁盘上。例如:
import urllib2
from mutagen.id3 import ID3, APIC

audio = ID3('music_file.mp3')
albumart = urllib2.urlopen(url)

audio['APIC'] = APIC(
                  encoding=3,
                  mime='image/jpeg',
                  type=3,
                  desc=u'Cover',
                  data=albumart.read()
                )

albumart.close()
audio.save()

注意:encoding=3 表示 encoding=Encoding.UTF8,而 type=3 表示 type=PictureType.COVER_FRONT。 不要忘记导入 from mutagen.id3 import Encoding, PictureType - Nick Veld
对于第二种情况:应该是audio['TIT2'] = TIT2(encoding=3, text=title)。 - Oguz

0

你需要将shutil调用更改为写入你打开的文件:

...
response = requests.get(url, stream=True)
with open('img.jpg', 'wb') as out_file:
    out_file.write(response.raw)
...

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