Add tagging function for mp3 files

This commit is contained in:
2022-03-20 20:54:54 +01:00
parent e4056c8b17
commit 98114feca6

View File

@@ -2,6 +2,10 @@
# ex: set filetype=python
import argparse
from mutagen.mp3 import MP3
from mutagen.easyid3 import EasyID3
import mutagen.id3
from mutagen.id3 import ID3, TIT2, TIT3, TALB, TRCK, TYER
import os
from shutil importy copyfile
import xml.etree.cElementTree as xml
@@ -17,6 +21,7 @@ class Track():
for k, v in zip(it, it):
setattr(self, k.text.replace(' ', ''), v.text)
def parseXml(xml_file):
"""
Parses an xml file and returns the DOM tree.
@@ -28,7 +33,7 @@ def parseXml(xml_file):
tracks.append(Track(t))
return tracks
def copy_file(track, targetFolder):
def copy_file(track: Track, targetFolder) -> str:
"""
Copies a track from its source to the destination folder
"""
@@ -41,6 +46,33 @@ def copy_file(track, targetFolder):
print('File {0} not found.')
return dst
def tag_file(track: Track, file_name: str):
"""
Adds ID3 tags to a file.
"""
if not file_name.endswith('.mp3'):
print('Skipping file {0}. It\'s not an mp3 file.'.format(file_name))
return
print('Tagging file {0}'.format(file_name))
mp3file = MP3(file_name, ID3=EasyID3)
if hasattr(track,'Album'): mp3file['album'] = track.Album
if hasattr(track,'BPM'): mp3file['bpm'] = track.BPM
if hasattr(track,'Compilation'): mp3file['compilation'] = 'true'
if hasattr(track,'Composer'): mp3file['composer'] = track.Composer
if hasattr(track,'TotalTime'): mp3file['length'] = track.TotalTime
if hasattr(track,'Name'): mp3file['title'] = track.Name
if hasattr(track,'Artist'): mp3file['artist'] = track.Artist
if hasattr(track,'AlbumArtist'): mp3file['albumartist'] = track.AlbumArtist
if hasattr(track,'DiscNumber'): mp3file['discnumber'] = track.DiscNumber
if hasattr(track,'TrackNumber'):
if hasattr(track,'TrackCount'):
mp3file['tracknumber'] = '{0}/{1}'.format(track.TrackNumber, track.TrackCount)
else:
mp3file['tracknumber'] = track.TrackNumber
if hasattr(track,'Genre'): mp3file['genre'] = track.Genre
mp3file.save()
def main():
"""
@@ -63,6 +95,7 @@ def main():
for t in tracks:
new_file = copy_file(t, args.target)
tag_file(t, new_file)
if __name__ == "__main__":
main()