diff options
| author | Robert Honz <exislow+github@gmail.com> | 2023-12-19 23:58:57 +0100 |
|---|---|---|
| committer | Robert Honz <exislow+github@gmail.com> | 2023-12-19 23:58:57 +0100 |
| commit | 0d4a9d6b8740035346d098f5bc28ebca64f6cd4d (patch) | |
| tree | f52c9569509565e581b03b6e60fe32e611b79ad2 /tidal_dl_ng/metadata.py | |
| parent | 82a8fe96aa08903919a90a76030bacba9f93b8e0 (diff) | |
| download | tidal-dl-ng-0d4a9d6b8740035346d098f5bc28ebca64f6cd4d.tar.gz | |
🌟 Re-add all project files.
Diffstat (limited to 'tidal_dl_ng/metadata.py')
| -rw-r--r-- | tidal_dl_ng/metadata.py | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/tidal_dl_ng/metadata.py b/tidal_dl_ng/metadata.py new file mode 100644 index 0000000..1b53dea --- /dev/null +++ b/tidal_dl_ng/metadata.py @@ -0,0 +1,163 @@ +import pathlib + +import mutagen +import requests +from mutagen import flac, mp4 +from mutagen.id3 import APIC, TALB, TCOM, TCOP, TDRC, TIT2, TOPE, TPE1, TRCK, TSRC, USLT + + +class Metadata: + path_file: str = None + type_audio: str = None + title: str = None + album: str = None + albumartist: str = None + artists: [str] = None + copy_right: str = None + tracknumber: int = None + discnumber: int = None + totaldisc: int = None + totaltrack: int = None + date: str = None + composer: [str] = None + isrc: str = None + lyrics: str = None + path_cover: str = None + url_cover: str = None + m: mutagen.mp4.MP4 | mutagen.mp4.MP4 | mutagen.flac.FLAC = None + + # TODO: What about videos? + def __init__( + self, + path_file: str, + type_audio: str = "", + album: str = "", + title: str = "", + artists: [str] = [""], + copy_right: str = "", + tracknumber: int = 0, + discnumber: int = 0, + totaltrack: int = 0, + totaldisc: int = 0, + composer: [str] = [""], + isrc: str = "", + albumartist: str = "", + date: str = "", + lyrics: str = "", + path_cover: str = "", + url_cover: str = "", + ): + self.path_file = path_file + + if type_audio: + self.type_audio = type_audio + else: + self.type_audio = pathlib.Path(self.path_file).suffix[1:] + + self.title = title + self.album = album + self.albumartist = albumartist + self.artists = artists + self.copy_right = copy_right + self.tracknumber = tracknumber + self.discnumber = discnumber + self.totaldisc = totaldisc + self.totaltrack = totaltrack + self.date = date + self.composer = composer + self.isrc = isrc + self.lyrics = lyrics + self.path_cover = path_cover + self.url_cover = url_cover + self.m: mutagen.MP4.MP4 | mutagen.m4a.M4A | mutagen.flac.FLAC | mutagen.mp3.MP3 = mutagen.File(self.path_file) + + def _cover(self) -> bool: + result = False + data_cover = None + + if self.url_cover: + try: + data_cover = requests.get(self.url_cover).content + except: + data_cover = "" + elif self.path_cover: + with open(self.path_cover, "rb") as f: + data_cover = f.read() + + if data_cover: + if self.type_audio == "flac": + flac_cover = flac.Picture() + flac_cover.data = data_cover + flac_cover.mime = "image/jpeg" + + self.m.clear_pictures() + self.m.add_picture(flac_cover) + elif self.type_audio == "mp3": + self.m.tags.add(APIC(encoding=3, data=data_cover)) + elif self.type_audio in ["mp4", "m4a"]: + cover_mp4 = mp4.MP4Cover(data_cover) + self.m.tags["covr"] = [cover_mp4] + + result = True + + return result + + def save(self): + if self.type_audio == "flac": + self.set_flac() + elif self.type_audio in ["mp3", "ts"]: + self.set_mp3() + elif self.type_audio in ["mp4", "m4a"]: + self.set_mp4() + + self._cover() + self.m.save() + + return True + + def set_flac(self): + if not self.m.tags: + self.m.add_tags() + + self.m.tags["title"] = self.title + self.m.tags["album"] = self.album + self.m.tags["albumartist"] = self.albumartist + self.m.tags["artist"] = ", ".join(self.artists) + self.m.tags["copyright"] = self.copy_right + self.m.tags["tracknumber"] = str(self.tracknumber) + self.m.tags["tracktotal"] = str(self.totaltrack) + self.m.tags["discnumber"] = str(self.discnumber) + self.m.tags["disctotal"] = str(self.totaldisc) + self.m.tags["date"] = self.date + self.m.tags["composer"] = ", ".join(self.composer) + self.m.tags["isrc"] = self.isrc + self.m.tags["lyrics"] = self.lyrics + + def set_mp3(self): + if not self.m.tags: + self.m.add_tags() + + self.m.tags.add(TIT2(encoding=3, text=self.title)) + self.m.tags.add(TALB(encoding=3, text=self.album)) + self.m.tags.add(TOPE(encoding=3, text=self.albumartist)) + self.m.tags.add(TPE1(encoding=3, text=", ".join(self.artists))) + self.m.tags.add(TCOP(encoding=3, text=self.copy_right)) + self.m.tags.add(TRCK(encoding=3, text=str(self.tracknumber))) + self.m.tags.add(TRCK(encoding=3, text=self.discnumber)) + self.m.tags.add(TDRC(encoding=3, text=self.date)) + self.m.tags.add(TCOM(encoding=3, text=", ".join(self.composer))) + self.m.tags.add(TSRC(encoding=3, text=self.isrc)) + self.m.tags.add(USLT(encoding=3, lang="eng", desc="desc", text=self.lyrics)) + + def set_mp4(self): + self.m.tags["\xa9nam"] = self.title + self.m.tags["\xa9alb"] = self.album + self.m.tags["aART"] = self.albumartist + self.m.tags["\xa9ART"] = ", ".join(self.artists) + self.m.tags["cprt"] = self.copy_right + self.m.tags["trkn"] = [[self.tracknumber, self.totaltrack]] + self.m.tags["disk"] = [[self.discnumber, self.totaldisc]] + # self.m.tags['\xa9gen'] = self.genre + self.m.tags["\xa9day"] = self.date + self.m.tags["\xa9wrt"] = ", ".join(self.composer) + self.m.tags["\xa9lyr"] = self.lyrics |
