Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to add album art to mp3 file using python 3?

I was wondering what module to use for setting an image as the album art for a particular mp3 file. Mutagen seemed to be a popular choice, but it doesn't seem to work on python 3 and I can't find any documentation.

like image 585
Lakshay Kalbhor Avatar asked Jul 21 '16 17:07

Lakshay Kalbhor


2 Answers

an addition to answers above, here is what I struggled on for two days:

you have to set the ID3 version to "V2.3", otherwise the photo won't show up for the file icon. also you have to set a different album name for each MP3 file because otherwise the music player shits itself and shows the same AlbumCover for all music files even if they don't have any AlbumArt

audio.tag.title = u'your_title'
audio.tag.album = u'your_album_name'
audio.tag.images.set(3, open("cover.jpg", 'rb').read(), 'image/jpeg')
audio.tag.save(version=eyed3.id3.ID3_V2_3)

you'd better set a title too because file name won't be displayed in music players.

using the audio.initTag() can also wipe the tag information if you would want that.

like image 21
Ryan Norooz Avatar answered Sep 25 '22 17:09

Ryan Norooz


Here's a modified version of the code I use. You will want to change the example.mp3 and cover.jpg (and perhaps the mime type too):

import eyed3
from eyed3.id3.frames import ImageFrame

audiofile = eyed3.load('example.mp3')
if (audiofile.tag == None):
    audiofile.initTag()

audiofile.tag.images.set(ImageFrame.FRONT_COVER, open('cover.jpg','rb').read(), 'image/jpeg')

audiofile.tag.save()

tag.images.set() takes three arguments:

  • Picture Type: This is the type of image it is. 3 is the code for the front cover art. You can find them all here.
  • Image Data: This is the binary data of your image. In the example, I load this in using open().read().
  • Mime Type: This is the type of file the binary data is. If it's a jpg file, you'll want image/jpeg, and if it's a png file, you'll want image/png.
like image 174
Thomas Pritchard Avatar answered Sep 25 '22 17:09

Thomas Pritchard