Vorbis Comment
VorbisComment is the tagging format used in Ogg and FLAC container formats. In
mutagen this corresponds to the tags in all subclasses of
mutagen.ogg.OggFileType
and the mutagen.flac.FLAC
class.
Embedded Images
The most common way to include images in VorbisComment (except in FLAC) is to
store a base64 encoded FLAC Picture block with the key
metadata_block_picture
(see
https://wiki.xiph.org/VorbisComment#Cover_art). See the following code example
on how to read and write images this way:
# READING / SAVING
import base64
from mutagen.oggvorbis import OggVorbis
from mutagen.flac import Picture, error as FLACError
file_ = OggVorbis("somefile.ogg")
for b64_data in file_.get("metadata_block_picture", []):
try:
data = base64.b64decode(b64_data)
except (TypeError, ValueError):
continue
try:
picture = Picture(data)
except FLACError:
continue
extensions = {
"image/jpeg": "jpg",
"image/png": "png",
"image/gif": "gif",
}
ext = extensions.get(picture.mime, "jpg")
with open("image.%s" % ext, "wb") as h:
h.write(picture.data)
# WRITING
import base64
from mutagen.oggvorbis import OggVorbis
from mutagen.flac import Picture
file_ = OggVorbis("somefile.ogg")
with open("image.jpeg", "rb") as h:
data = h.read()
picture = Picture()
picture.data = data
picture.type = 17
picture.desc = u"A bright coloured fish"
picture.mime = u"image/jpeg"
picture.width = 100
picture.height = 100
picture.depth = 24
picture_data = picture.write()
encoded_data = base64.b64encode(picture_data)
vcomment_value = encoded_data.decode("ascii")
file_["metadata_block_picture"] = [vcomment_value]
file_.save()
Some programs also write base64 encoded image data directly into the
coverart
field and sometimes a corresponding mime type into the
coverartmime
field:
# READING
import base64
import itertools
from mutagen.oggvorbis import OggVorbis
file_ = OggVorbis("somefile.ogg")
values = file_.get("coverart", [])
mimes = file_.get("coverartmime", [])
for value, mime in itertools.izip_longest(values, mimes, fillvalue=u""):
try:
image_data = base64.b64decode(value.encode("ascii"))
except (TypeError, ValueError):
continue
print(mime)
print(image_data)
FLAC supports images directly, see mutagen.flac.Picture
,
mutagen.flac.FLAC.pictures
, mutagen.flac.FLAC.add_picture()
and
mutagen.flac.FLAC.clear_pictures()
.