sane-tag-music: support mp4/m4a; support "producer" tag (grouping) for mp3/mp4
This commit is contained in:
@@ -10,16 +10,20 @@
|
|||||||
# - Artist
|
# - Artist
|
||||||
# - Organization (i.e. record label)
|
# - Organization (i.e. record label)
|
||||||
# - Performer
|
# - Performer
|
||||||
# - Producer
|
# - Producer (N.B.: mutagen supports this for FLAC, but not mp3 or mp4)
|
||||||
# - Title
|
# - Title
|
||||||
# - TrackNumber
|
# - TrackNumber
|
||||||
# - ID3 (mp3): <https://www.exiftool.org/TagNames/ID3.html>
|
# - ID3 (mp3): <https://www.exiftool.org/TagNames/ID3.html>
|
||||||
|
# - <https://docs.mp3tag.de/mapping/>
|
||||||
# - Album
|
# - Album
|
||||||
# - AlbumArtist (??)
|
# - AlbumArtist
|
||||||
# - Artist
|
# - Artist
|
||||||
# - Band
|
# - Band
|
||||||
# - Conductor
|
# - Conductor
|
||||||
|
# - Composer (?)
|
||||||
|
# - Grouping
|
||||||
# - InterpretedBy
|
# - InterpretedBy
|
||||||
|
# - Publisher (N.B.: mutagen doesn't support this for mp4)
|
||||||
# - Subtitle
|
# - Subtitle
|
||||||
# - Title
|
# - Title
|
||||||
# - Track
|
# - Track
|
||||||
@@ -86,6 +90,7 @@ import os.path
|
|||||||
import mutagen.easyid3
|
import mutagen.easyid3
|
||||||
import mutagen.flac
|
import mutagen.flac
|
||||||
import mutagen.mp3
|
import mutagen.mp3
|
||||||
|
import mutagen.easymp4
|
||||||
import mutagen.oggopus
|
import mutagen.oggopus
|
||||||
import mutagen.oggvorbis
|
import mutagen.oggvorbis
|
||||||
import pykakasi
|
import pykakasi
|
||||||
@@ -522,23 +527,27 @@ class AudioFile(MediaFile):
|
|||||||
def __init__(self, path_: str):
|
def __init__(self, path_: str):
|
||||||
super().__init__(path_)
|
super().__init__(path_)
|
||||||
self.muta = None
|
self.muta = None
|
||||||
|
self.producer_field_name = "producer"
|
||||||
|
|
||||||
_base, ext = os.path.splitext(path_)
|
ext = self.ext
|
||||||
try:
|
try:
|
||||||
# TODO: handle:
|
# TODO: handle:
|
||||||
# - .m4a
|
|
||||||
# - .wav
|
# - .wav
|
||||||
# - .wma
|
# - .wma
|
||||||
if ext == '.flac':
|
if ext == 'flac':
|
||||||
self.muta = mutagen.flac.Open(path_)
|
self.muta = mutagen.flac.Open(path_)
|
||||||
elif ext == '.aac':
|
elif ext == 'aac':
|
||||||
# TODO: this seems to only read tags, and not create them?
|
# TODO: this seems to only read tags, and not create them?
|
||||||
self.muta = mutagen.easyid3.EasyID3(path_)
|
self.muta = mutagen.easyid3.EasyID3(path_)
|
||||||
elif ext == '.mp3':
|
elif ext == 'mp3':
|
||||||
|
self.producer_field_name = "grouping"
|
||||||
self.muta = mutagen.mp3.EasyMP3(path_)
|
self.muta = mutagen.mp3.EasyMP3(path_)
|
||||||
elif ext == '.ogg':
|
elif ext in [ 'm4a', 'mp4' ]:
|
||||||
|
self.producer_field_name = "grouping"
|
||||||
|
self.muta = mutagen.easymp4.EasyMP4(path_)
|
||||||
|
elif ext in 'ogg':
|
||||||
self.muta = mutagen.oggvorbis.OggVorbis(path_)
|
self.muta = mutagen.oggvorbis.OggVorbis(path_)
|
||||||
elif ext == '.opus':
|
elif ext == 'opus':
|
||||||
self.muta = mutagen.oggopus.OggOpus(path_)
|
self.muta = mutagen.oggopus.OggOpus(path_)
|
||||||
else:
|
else:
|
||||||
logger.debug(f"no metadata handler for {path_}")
|
logger.debug(f"no metadata handler for {path_}")
|
||||||
@@ -550,7 +559,7 @@ class AudioFile(MediaFile):
|
|||||||
album=self.muta.get('album', []) if self.muta else [],
|
album=self.muta.get('album', []) if self.muta else [],
|
||||||
albumartist=self.muta.get('albumartist', []) if self.muta else [],
|
albumartist=self.muta.get('albumartist', []) if self.muta else [],
|
||||||
artist=self.muta.get('artist', []) if self.muta else [],
|
artist=self.muta.get('artist', []) if self.muta else [],
|
||||||
producer=self.muta.get('producer', []) if self.muta else [],
|
producer=self.muta.get(self.producer_field_name, []) if self.muta else [],
|
||||||
title=self.muta.get('title', []) if self.muta else [],
|
title=self.muta.get('title', []) if self.muta else [],
|
||||||
tracknumber=self.muta.get('tracknumber', []) if self.muta else [],
|
tracknumber=self.muta.get('tracknumber', []) if self.muta else [],
|
||||||
)
|
)
|
||||||
@@ -569,7 +578,7 @@ class AudioFile(MediaFile):
|
|||||||
set_tag('album', tags.album)
|
set_tag('album', tags.album)
|
||||||
set_tag('albumartist', tags.albumartist)
|
set_tag('albumartist', tags.albumartist)
|
||||||
set_tag('artist', tags.artist)
|
set_tag('artist', tags.artist)
|
||||||
set_tag('producer', tags.producer)
|
set_tag(self.producer_field_name, tags.producer)
|
||||||
set_tag('title', tags.title)
|
set_tag('title', tags.title)
|
||||||
set_tag('tracknumber', tags.tracknumber)
|
set_tag('tracknumber', tags.tracknumber)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user