============== 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
:class:mutagen.ogg.OggFileType and the :class: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 :class:`mutagen.flac.Picture`,
:attr:`mutagen.flac.FLAC.pictures`, :meth:`mutagen.flac.FLAC.add_picture` and
:meth:`mutagen.flac.FLAC.clear_pictures`.