Skip to content

Instantly share code, notes, and snippets.

@brutus
Created October 1, 2015 15:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save brutus/69c51cd706a6cf5d1594 to your computer and use it in GitHub Desktop.
Save brutus/69c51cd706a6cf5d1594 to your computer and use it in GitHub Desktop.
Mutagen MP3 Image Error
def add_image(
filenames, image_path, description='Cover', img_type=3, encoding=3
):
"""
Adds an image to MP3 from *filenames*.
Args:
filenames (lits): paths to the MP3
image_path (string): path to image file
description (string): optional description
img_type (integer): ID3 code for the iomage (3=cover)
encoding (integer): encoding to use (3=UTF-8)
Raises:
ArgumentError: on *image_path* errors
Image Type:
https://mutagen.readthedocs.org/en/latest/api/id3.html#mutagen.id3.PictureType
Encoding:
https://mutagen.readthedocs.org/en/latest/api/id3.html#mutagen.id3.Encoding
"""
SUPPORTED_TYPES = (
'.png',
'.jpg', '.jpeg',
)
# check image
if not os.path.exists(image_path):
msg = "the image seems not to exists: '{}'"
msg = msg.format(image_path)
raise ArgumentError(msg)
img_type = os.path.splitext(image_path)[1].lower()
if img_type not in SUPPORTED_TYPES:
msg = "image type '{}' is not supported, only: {}"
msg = msg.format(img_type, ', '.join(SUPPORTED_TYPES))
raise ArgumentError(msg)
if img_type == 'png':
mime = 'image/png'
else:
mime = 'image/jpeg'
# add image to files
image = open(image_path, mode='rb').read()
image = APIC(
encoding=encoding,
mime=mime,
type=img_type,
desc=description,
data=image
)
for filename in filenames:
print("- {}".format(filename))
mp3 = MP3(filename, ID3=ID3)
# add image tag
mp3.tags.add(image)
mp3.save()
Traceback (most recent call last):
File "~/.local/bin/mp3tag", line 190, in <module>
sys.exit(main())
File "~/.local/bin/mp3tag", line 183, in main
add_image(args.filenames, args.image)
File "~/.local/bin/mp3tag", line 124, in add_image
data=image
File "~/.local/lib/python3.4/site-packages/mutagen/id3/_frames.py", line 69, in __init__
self, kwargs.get(checker.name, None))
File "~/.local/lib/python3.4/site-packages/mutagen/id3/_specs.py", line 130, in validate
chr_(value)
File "~/.local/lib/python3.4/site-packages/mutagen/_compat.py", line 64, in <lambda>
chr_ = lambda x: bytes([x])
TypeError: 'str' object cannot be interpreted as an integer
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment