From ec6efafbeda40b5b5b3fc0508813c5cb63d5e1a1 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Sun, 11 Aug 2024 12:16:22 +0200 Subject: [PATCH] Added m4a, m4b files to parsable audio metadata --- cps/audio.py | 17 +++++++++++++++-- cps/uploader.py | 3 ++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/cps/audio.py b/cps/audio.py index 21916674..61ec1b48 100644 --- a/cps/audio.py +++ b/cps/audio.py @@ -107,8 +107,21 @@ def get_audio_file_info(tmp_file_path, original_file_extension, original_file_na tmp_cover_name = os.path.join(os.path.dirname(tmp_file_path), 'cover.jpg') with open(tmp_cover_name, "wb") as cover_file: cover_file.write(cover_data[0].value) - - + elif original_file_extension in [".mp4", ".m4a", ".m4b"]: + title = audio_file.tags.get('©nam')[0] if "©nam" in audio_file.tags else None + author = audio_file.tags.get('©ART')[0] if "©ART" in audio_file.tags else None + comments = audio_file.tags.get('©cmt')[0] if "©cmt" in audio_file.tags else None + tags = audio_file.tags.get('©gen')[0] if "©gen" in audio_file.tags else None + series = audio_file.tags.get('©alb')[0] if "©alb" in audio_file.tags else None + series_id = str(audio_file.tags.get('trkn')[0][0]) if "trkn" in audio_file.tags else None + publisher = "" + pubdate = audio_file.tags.get('©day')[0] if "©day" in audio_file.tags else None + cover_data = audio_file.tags.get('covr', None) + if cover_data: + tmp_cover_name = os.path.join(os.path.dirname(tmp_file_path), 'cover.jpg') + if cover_data[0].imageformat == mutagen.mp4.AtomDataType.JPEG: + with open(tmp_cover_name, "wb") as cover_file: + cover_file.write(audio_file.tags['covr'][0]) return BookMeta( file_path=tmp_file_path, diff --git a/cps/uploader.py b/cps/uploader.py index 01b765bf..bdb3a2b0 100644 --- a/cps/uploader.py +++ b/cps/uploader.py @@ -91,7 +91,8 @@ def process(tmp_file_path, original_file_name, original_file_extension, rar_exec original_file_name, original_file_extension, rar_executable) - elif extension_upper in [".MP3", ".OGG", ".FLAC", ".WAV", ".AAC", ".AIFF", ".ASF", ".MP4"] and use_audio_meta: + elif extension_upper in [".MP3", ".OGG", ".FLAC", ".WAV", ".AAC", ".AIFF", ".ASF", ".MP4", + ".M4A", ".M4B"] and use_audio_meta: meta = audio.get_audio_file_info(tmp_file_path, original_file_extension, original_file_name) except Exception as ex: log.warning('cannot parse metadata, using default: %s', ex)