···6464def download(options):
6565 """Accepts an `options` dict, but there's no validation and all options must be present. Look inside `parse_cli_options()` for an example options object."""
66666767- metadata_formats = ['mp3', 'wav', 'opus']
6767+ metadata_formats = ['mp3', 'wav', 'opus', 'm4a']
6868 if options['download_folder'] == None:
6969 log.error("No download_folder is set in the vidl config file")
7070 return
+28
vidl/md.py
···11import mutagen
22from mutagen.id3 import ID3, TIT2, TPE1, TALB, TPE2, TRCK, TCON, TDRC, COMM, USLT, TCOM
33from mutagen.oggopus import OggOpus
44+from mutagen.mp4 import MP4
45from pprint import pformat
56from vidl import log
67···1213 id3(filename, md)
1314 elif file_format == "opus":
1415 opus(filename, md)
1616+ elif file_format == "m4a":
1717+ m4a(filename, md)
1818+15191620 for key, value in md.items():
1721 whitespace = ' ' * (13 - len(key))
···6872 if 'composer' in md: tags["COMPOSER"] = md['composer']
69737074 file.save(filename)
7575+7676+def m4a(filename, md):
7777+ try:
7878+ file = MP4(filename)
7979+ tags = file.tags
8080+ except mutagen.MutagenError:
8181+ return None
8282+8383+ if 'title' in md: tags["\xa9nam"] = md['title']
8484+ if 'artist' in md: tags["\xa9ART"] = md['artist']
8585+ if 'album' in md: tags["\xa9alb"] = md['album']
8686+ if 'album_artist' in md: tags["aART"] = md['album_artist']
8787+ if 'track_number' in md:
8888+ tags["trkn"] = (md['track_number'])
8989+ if 'track_count' in md:
9090+ tags["trkn"] = (md['track_number'], md['track_count'])
9191+ if 'genre' in md: tags["\xa9gen"] = md['genre']
9292+ if 'year' in md: tags["\xa9day"] = md['year']
9393+9494+ if 'comment' in md: tags["\xa9cmt"] = md['comment']
9595+ if 'lyrics' in md: tags["\xa9lyr"] = md['lyrics']
9696+ if 'composer' in md: tags["\xa9wrt"] = md['composer']
9797+9898+ file.save(filename)