Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
Ethan-Core2 opened this issue Jun 11, 2023 · 1 comment
Open

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

Ethan-Core2 opened this issue Jun 11, 2023 · 1 comment
Labels

Comments

@Ethan-Core2
Copy link

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

@phw
Copy link
Collaborator

phw commented Jun 11, 2023

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.

@phw phw added the question label Jun 11, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants