quodlibet / mutagen

Python module for handling audio metadata

Home Page:https://mutagen.readthedocs.io

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Name of tag is cut off when displaying (.m4a file)

Ethan-Core2 opened this issue · comments

Steps to reproduce:

Set filename to the path to a .m4a file.

tags = MP4(filename).tags
tags["title"] = "This is a title"
tags.save(filename)

This will work, which can be verified with exiftool:

exiftool $filename | grep "Title"
Returns:
Title : This is a title

However, if you try to display it in python, it changes title to titl:

audioA = MP4(filename)
print(audioA.pprint())

Returns:

MPEG-4 audio (AAC LC), 207.62 seconds, 256044 bps (audio/mp4)
titl=This is a title
©too=Lavf58.76.100

I don't think it's just a printing error, as if you try to access the property like this:

toPrint = MP4(filename).tags.get("title", [None])[-1]

Then it doesn't work, (returns None) but if you change title to titl then it will work

For MP4 the tag names are atom names and limited to 4 characters. mutagen truncates the given name.

What you really should do is use the proper atom names. You hit a bit of a lucky punch here, as titl seems to be an atom name interpreted by exiftools. But in case of audio files to store the track title the expected atom name is actually ©nam (yes, that's a copyright symbol as first character). Take a look at e.g. https://picard-docs.musicbrainz.org/downloads/MusicBrainz_Picard_Tag_Map.html for some common atom names as typically used.

If you want a simple way to set or read some tags with readable names have a look at mutagen's EasyMP4 class, which is similar to the EasyMP3 one. With it you could do something like this.

from mutagen.easymp4 import EasyMP4

f = EasyMP4('test.m4a')
f.tags["title"] = "foo"
f.tags["album"] = "bar"
f.save()

The you will get something like this:

% mutagen-inspect test.m4a
-- test.m4a
- MPEG-4 audio (AAC LC), 0.11 seconds, 14376 bps (audio/mp4)
©alb=bar
©nam=foo
©too=FAAC 1.24

Or maybe if you want some generic abstraction to use the same approach and names across different tagging formats have a look at the MediaFIle library, which adds a format independent wrapper API over mutagen.