from mutagen import mp4 from mutagen.easyid3 import EasyID3 class MP4Tags(mp4.MP4Tags): fields = { 'cover': 'covr', 'tempo': 'tmpo', 'track_num': 'trkn', 'disc_num': 'disk', 'is_part_of_compilation': 'cpil', 'is_part_of_gapless_album': 'pgap', 'is_podcast': 'pcst', 'track_title': '\xa9nam', 'album': '\xa9alb', 'artist': '\xa9ART', 'album_artist': 'aART', 'composer': '\xa9wrt', 'year': '\xa9day', 'comment': '\xa9cmt', 'description': 'desc', 'purchase_date': 'purd', 'grouping': '\xa9grp', 'genre': '\xa9gen', 'lyrics': '\xa9lyr', 'podcast_url': 'purl', 'podcast_episode_id': 'egid', 'podcast_category': 'catg', 'podcast_keyword': 'keyw', 'encoded_by': '\xa9too', 'copyright': 'cprt', 'sort_album': 'soal', 'sort_album_artist': 'soaa', 'sort_artist': 'soar', 'sort_title': 'sonm', 'sort_composer': 'soco', 'sort_show': 'sosn', 'tv_show_name': 'tvsh', } @property def track_number(self): return self.track_num[0] @property def total_tracks(self): return self.track_num[1] @property def disc_number(self): return self.disc_num[0] @property def total_discs(self): return self.disc_num[1] def __getattr__(self, attr): value = self[self.fields[attr]] if len(value) == 1: return value[0] else: return value class MP4(mp4.MP4): MP4Tags = MP4Tags