Switch to class for embedding metadata

This commit is contained in:
Ritiek
2017-06-16 14:35:14 +05:30
parent 06853a03d4
commit e9c247ead9
3 changed files with 115 additions and 110 deletions

View File

@@ -1,102 +0,0 @@
import urllib2
from mutagen.easyid3 import EasyID3
from mutagen.id3 import ID3, APIC
from mutagen.mp4 import MP4, MP4Cover
def compare_metadata(file, metadata):
try:
if file.endswith('.mp3'):
audiofile = EasyID3('Music/' + file)
already_tagged = audiofile['title'][0] == metadata['name']
elif file.endswith('.m4a'):
tag = {'title': '\xa9nam'}
audiofile = MP4('Music/' + file)
already_tagged = audiofile[tags['title']] == metadata['name']
except KeyError:
already_tagged = False
return already_tagged
def embed_metadata(music_file, meta_tags, output_ext):
if meta_tags is None:
print('Could not find meta-tags')
elif output_ext == '.m4a':
print('Fixing meta-tags')
metadata_m4a(music_file, meta_tags, output_ext)
elif output_ext == '.mp3':
print('Fixing meta-tags')
metadata_mp3(music_file, meta_tags, output_ext)
else:
print('Cannot embed meta-tags into given output extension')
def metadata_mp3(music_file, meta_tags, output_ext):
artists = []
for artist in meta_tags['artists']:
artists.append(artist['name'])
audiofile = EasyID3('Music/' + music_file + output_ext)
audiofile['artist'] = artists
audiofile['albumartist'] = meta_tags['artists'][0]['name']
audiofile['album'] = meta_tags['album']['name']
audiofile['title'] = meta_tags['name']
audiofile['tracknumber'] = [meta_tags['track_number'], meta_tags['total_tracks']]
audiofile['discnumber'] = [meta_tags['disc_number'], 0]
audiofile['date'] = meta_tags['release_date']
audiofile['originaldate'] = meta_tags['release_date']
audiofile['media'] = meta_tags['type']
audiofile['copyright'] = meta_tags['copyright']
audiofile['author'] = meta_tags['artists'][0]['name']
audiofile['lyricist'] = meta_tags['artists'][0]['name']
audiofile['arranger'] = meta_tags['artists'][0]['name']
audiofile['performer'] = meta_tags['artists'][0]['name']
audiofile['encodedby'] = meta_tags['publisher']
audiofile['isrc'] = meta_tags['external_ids']['isrc']
audiofile['website'] = meta_tags['external_urls']['spotify']
audiofile['length'] = str(meta_tags['duration_ms'] / 1000)
if meta_tags['genre']:
audiofile['genre'] = meta_tags['genre']
audiofile.save(v2_version=3)
audiofile = ID3('Music/' + music_file + output_ext)
albumart = urllib2.urlopen(meta_tags['album']['images'][0]['url'])
audiofile["APIC"] = APIC(encoding=3, mime='image/jpeg', type=3, desc=u'Cover', data=albumart.read())
albumart.close()
audiofile.save(v2_version=3)
def metadata_m4a(music_file, meta_tags, output_ext):
# eyed serves only mp3 not aac so using mutagen
# Apple has specific tags - see mutagen docs -
# http://mutagen.readthedocs.io/en/latest/api/mp4.html
tags = {'album': '\xa9alb',
'artist': '\xa9ART',
'date': '\xa9day',
'title': '\xa9nam',
'originaldate': 'purd',
'comment': '\xa9cmt',
'group': '\xa9grp',
'writer': '\xa9wrt',
'genre': '\xa9gen',
'tracknumber': 'trkn',
'albumartist': 'aART',
'disknumber': 'disk',
'cpil': 'cpil',
'albumart': 'covr',
'copyright': 'cprt',
'tempo': 'tmpo'}
artists = []
for artist in meta_tags['artists']:
artists.append(artist['name'])
audiofile = MP4('Music/' + music_file + output_ext)
audiofile[tags['artist']] = artists
audiofile[tags['albumartist']] = meta_tags['artists'][0]['name']
audiofile[tags['album']] = meta_tags['album']['name']
audiofile[tags['title']] = meta_tags['name']
audiofile[tags['tracknumber']] = [(meta_tags['track_number'], meta_tags['total_tracks'])]
audiofile[tags['disknumber']] = [(meta_tags['disc_number'], 0)]
audiofile[tags['date']] = meta_tags['release_date']
audiofile[tags['originaldate']] = meta_tags['release_date']
audiofile[tags['copyright']] = meta_tags['copyright']
if meta_tags['genre']:
audiofile[tags['genre']] = meta_tags['genre']
albumart = urllib2.urlopen(meta_tags['album']['images'][0]['url'])
audiofile[tags['albumart']] = [ MP4Cover(albumart.read(), imageformat=MP4Cover.FORMAT_JPEG) ]
albumart.close()
audiofile.save()

106
core/metadata.py Normal file
View File

@@ -0,0 +1,106 @@
import urllib2
from mutagen.easyid3 import EasyID3
from mutagen.id3 import ID3, APIC
from mutagen.mp4 import MP4, MP4Cover
def compare_metadata(file, metadata):
try:
if file.endswith('.mp3'):
audiofile = EasyID3('Music/' + file)
already_tagged = audiofile['title'][0] == metadata['name']
elif file.endswith('.m4a'):
tag = {'title': '\xa9nam'}
audiofile = MP4('Music/' + file)
already_tagged = audiofile[tags['title']] == metadata['name']
except KeyError:
already_tagged = False
return already_tagged
class embed_metadata(object):
def __init__(self, music_file, meta_tags, output_ext):
if meta_tags is None:
print('Could not find meta-tags')
elif output_ext == '.m4a':
print('Fixing meta-tags')
self.metadata_m4a(music_file, meta_tags, output_ext)
elif output_ext == '.mp3':
print('Fixing meta-tags')
self.metadata_mp3(music_file, meta_tags, output_ext)
else:
print('Cannot embed meta-tags into given output extension')
def metadata_mp3(self, music_file, meta_tags, output_ext):
artists = []
for artist in meta_tags['artists']:
artists.append(artist['name'])
audiofile = EasyID3('Music/' + music_file + output_ext)
audiofile['artist'] = artists
audiofile['albumartist'] = meta_tags['artists'][0]['name']
audiofile['album'] = meta_tags['album']['name']
audiofile['title'] = meta_tags['name']
audiofile['tracknumber'] = [meta_tags['track_number'], meta_tags['total_tracks']]
audiofile['discnumber'] = [meta_tags['disc_number'], 0]
audiofile['date'] = meta_tags['release_date']
audiofile['originaldate'] = meta_tags['release_date']
audiofile['media'] = meta_tags['type']
audiofile['copyright'] = meta_tags['copyright']
audiofile['author'] = meta_tags['artists'][0]['name']
audiofile['lyricist'] = meta_tags['artists'][0]['name']
audiofile['arranger'] = meta_tags['artists'][0]['name']
audiofile['performer'] = meta_tags['artists'][0]['name']
audiofile['encodedby'] = meta_tags['publisher']
audiofile['isrc'] = meta_tags['external_ids']['isrc']
audiofile['website'] = meta_tags['external_urls']['spotify']
audiofile['length'] = str(meta_tags['duration_ms'] / 1000)
if meta_tags['genre']:
audiofile['genre'] = meta_tags['genre']
audiofile.save(v2_version=3)
audiofile = ID3('Music/' + music_file + output_ext)
albumart = urllib2.urlopen(meta_tags['album']['images'][0]['url'])
audiofile["APIC"] = APIC(encoding=3, mime='image/jpeg', type=3, desc=u'Cover', data=albumart.read())
albumart.close()
audiofile.save(v2_version=3)
def metadata_m4a(self, music_file, meta_tags, output_ext):
# eyed serves only mp3 not aac so using mutagen
# Apple has specific tags - see mutagen docs -
# http://mutagen.readthedocs.io/en/latest/api/mp4.html
tags = {'album': '\xa9alb',
'artist': '\xa9ART',
'date': '\xa9day',
'title': '\xa9nam',
'originaldate': 'purd',
'comment': '\xa9cmt',
'group': '\xa9grp',
'writer': '\xa9wrt',
'genre': '\xa9gen',
'tracknumber': 'trkn',
'albumartist': 'aART',
'disknumber': 'disk',
'cpil': 'cpil',
'albumart': 'covr',
'copyright': 'cprt',
'tempo': 'tmpo'}
artists = []
for artist in meta_tags['artists']:
artists.append(artist['name'])
audiofile = MP4('Music/' + music_file + output_ext)
audiofile[tags['artist']] = artists
audiofile[tags['albumartist']] = meta_tags['artists'][0]['name']
audiofile[tags['album']] = meta_tags['album']['name']
audiofile[tags['title']] = meta_tags['name']
audiofile[tags['tracknumber']] = [(meta_tags['track_number'], meta_tags['total_tracks'])]
audiofile[tags['disknumber']] = [(meta_tags['disc_number'], 0)]
audiofile[tags['date']] = meta_tags['release_date']
audiofile[tags['originaldate']] = meta_tags['release_date']
audiofile[tags['copyright']] = meta_tags['copyright']
if meta_tags['genre']:
audiofile[tags['genre']] = meta_tags['genre']
albumart = urllib2.urlopen(meta_tags['album']['images'][0]['url'])
audiofile[tags['albumart']] = [ MP4Cover(albumart.read(), imageformat=MP4Cover.FORMAT_JPEG) ]
albumart.close()
audiofile.save()

View File

@@ -1,10 +1,9 @@
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
from core.embed_metadata import compare_metadata
from core.embed_metadata import embed_metadata
from core.embed_metadata import metadata_mp3
from core.embed_metadata import metadata_m4a
#from core.metadata import embed_metadata
#from core.metadata import compare_metadata
from core import metadata
from core.misc import input_link
from core.misc import trim_song
from core.misc import get_arguments
@@ -235,15 +234,17 @@ def check_exists(music_file, raw_song, islist):
if file.startswith(generate_filename(music_file)):
already_tagged = compare_metadata(file, generate_metadata(raw_song))
already_tagged = metadata.compare_metadata(file, generate_metadata(raw_song))
if is_spotify(raw_song) and not already_tagged:
os.remove("Music/" + file)
return False
if islist:
return True
else:
prompt = raw_input('Song with same name has already been downloaded. Re-download? (y/n): ').lower()
if prompt == "y":
os.remove("Music/" + file)
return False
@@ -251,8 +252,8 @@ def check_exists(music_file, raw_song, islist):
return True
def grab_list(file):
lines = open(file, 'r').read()
lines = lines.splitlines()
with open(file, 'r') as listed:
lines = (listed.read()).splitlines()
# Ignore blank lines in file (if any)
try:
lines.remove('')
@@ -301,7 +302,7 @@ def grab_single(raw_song, number=None):
convert_song(music_file)
meta_tags = generate_metadata(raw_song)
if not args.no_metadata:
embed_metadata(music_file, meta_tags, args.output_ext)
metadata.embed_metadata(music_file, meta_tags, args.output_ext)
if __name__ == '__main__':