mutagen: how to detect and embed album art in mp3, flac and mp4

foosion picture foosion · Sep 1, 2011 · Viewed 10.6k times · Source

I'd like to be able to detect whether an audio file has embedded album art and, if not, add album art to that file. I'm using mutagen

1) Detecting album art. Is there a simpler method than this pseudo code:

from mutagen import File
audio = File('music.ext')
test each of audio.pictures, audio['covr'] and audio['APIC:']
    if doesn't raise an exception and isn't None, we found album art

2) I found this for embedding album art into an mp3 file: How do you embed album art into an MP3 using Python?

How do I embed album art into other formats?

EDIT: embed mp4

audio = MP4(filename)
data = open(albumart, 'rb').read()

covr = []
if albumart.endswith('png'):
    covr.append(MP4Cover(data, MP4Cover.FORMAT_PNG))
else:
    covr.append(MP4Cover(data, MP4Cover.FORMAT_JPEG))

audio.tags['covr'] = covr
audio.save()   

Answer

foosion picture foosion · Sep 2, 2011

Embed flac:

from mutagen import File
from mutagen.flac import Picture, FLAC

def add_flac_cover(filename, albumart):
    audio = File(filename)
        
    image = Picture()
    image.type = 3
    if albumart.endswith('png'):
        mime = 'image/png'
    else:
        mime = 'image/jpeg'
    image.desc = 'front cover'
    with open(albumart, 'rb') as f: # better than open(albumart, 'rb').read() ?
        image.data = f.read()
    
    audio.add_picture(image)
    audio.save()

For completeness, detect picture

def pict_test(audio):
    try: 
        x = audio.pictures
        if x:
            return True
    except Exception:
        pass  
    if 'covr' in audio or 'APIC:' in audio:
        return True
    return False