简体   繁体   English

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

[英]Embed Album Cover to mp3 with Mutagen in Python 3

ID3 . ID3 This is the Python 3 API, i'm not sure how to embed an image, so far I have this where I change the tags, 这是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()

I don't think it is possible to embed albumart using EasyID3 but it is possible with ID3 . 我不认为使用EasyID3嵌入albumart是可能的,但ID3可以实现。

You can embed albumart using ID3 like below: 您可以使用ID3嵌入albumart,如下所示:

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()

If performance is not your major concern, you can save textual metadata with EasyID3 and then load the music file again using ID3 to embed albumart. 如果性能不是您的主要考虑因素,您可以使用EasyID3保存文本元数据,然后使用ID3重新加载音乐文件以嵌入albumart。 Otherwise, you can work completely using ID3 . 否则,您可以完全使用ID3

So, your code in 1st case will be: 那么,第一种情况下的代码将是:

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()

In 2nd case: 在第二种情况:

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()

Note: You can also directly embed the albumart using urllib2 without having to save it on disk first. 注意:您也可以使用urllib2直接嵌入albumart,而不必先将其保存在磁盘上。 Example: 例:

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()

You need to change the shutil call to instead write to the file you opened: 您需要更改shutil调用,而不是写入您打开的文件:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM