diff --git a/core/convert.py b/core/convert.py index 95a4704..5f830a3 100644 --- a/core/convert.py +++ b/core/convert.py @@ -18,58 +18,60 @@ https://trac.ffmpeg.org/wiki/Encode/AAC def song(input_song, output_song, folder, avconv=False): """ Do the audio format conversion. """ if not input_song == output_song: + convert = Converter(input_song, output_song, folder) log.info('Converting {0} to {1}'.format( input_song, output_song.split('.')[-1])) if avconv: - exit_code = convert_with_avconv(input_song, output_song, folder) + exit_code = convert.with_avconv() else: - exit_code = convert_with_ffmpeg(input_song, output_song, folder) + exit_code = convert.with_ffmpeg() return exit_code return 0 -def convert_with_avconv(input_song, output_song, folder): - """ Convert the audio file using avconv. """ - if log.level == 10: - level = 'debug' - else: - level = '0' +class Converter: + def __init__(self, input_song, output_song, folder): + self.input_song = input_song + self.output_song = output_song + self.folder = folder - command = ['avconv', '-loglevel', level, '-i', - os.path.join(folder, input_song), '-ab', '192k', - os.path.join(folder, output_song)] + def with_avconv(self): + if log.level == 10: + level = 'debug' + else: + level = '0' - log.debug(command) + command = ['avconv', '-loglevel', level, '-i', + os.path.join(self.folder, self.input_song), '-ab', '192k', + os.path.join(self.folder, self.output_song)] - return subprocess.call(command) + log.debug(command) + return subprocess.call(command) + def with_ffmpeg(self): + ffmpeg_pre = 'ffmpeg -y ' -def convert_with_ffmpeg(input_song, output_song, folder): - """ Convert the audio file using FFmpeg. """ - ffmpeg_pre = 'ffmpeg -y ' + if not log.level == 10: + ffmpeg_pre += '-hide_banner -nostats -v panic ' - if not log.level == 10: - ffmpeg_pre += '-hide_banner -nostats -v panic ' + input_ext = self.input_song.split('.')[-1] + output_ext = self.output_song.split('.')[-1] - input_ext = input_song.split('.')[-1] - output_ext = output_song.split('.')[-1] + if input_ext == 'm4a': + if output_ext == 'mp3': + ffmpeg_params = '-codec:v copy -codec:a libmp3lame -q:a 2 ' + elif output_ext == 'webm': + ffmpeg_params = '-c:a libopus -vbr on -b:a 192k -vn ' - if input_ext == 'm4a': - if output_ext == 'mp3': - ffmpeg_params = '-codec:v copy -codec:a libmp3lame -q:a 2 ' - elif output_ext == 'webm': - ffmpeg_params = '-c:a libopus -vbr on -b:a 192k -vn ' + elif input_ext == 'webm': + if output_ext == 'mp3': + ffmpeg_params = ' -ab 192k -ar 44100 -vn ' + elif output_ext == 'm4a': + ffmpeg_params = '-cutoff 20000 -c:a libfdk_aac -b:a 192k -vn ' - elif input_ext == 'webm': - if output_ext == 'mp3': - ffmpeg_params = ' -ab 192k -ar 44100 -vn ' - elif output_ext == 'm4a': - ffmpeg_params = '-cutoff 20000 -c:a libfdk_aac -b:a 192k -vn ' + command = '{0}-i {1} {2}{3}'.format( + ffmpeg_pre, os.path.join(self.folder, self.input_song), + ffmpeg_params, os.path.join(self.folder, self.output_song)).split(' ') - command = '{0}-i {1} {2}{3}'.format( - ffmpeg_pre, os.path.join(folder, input_song), - ffmpeg_params, os.path.join(folder, output_song)).split(' ') - - log.debug(command) - - return subprocess.call(command) + log.debug(command) + return subprocess.call(command) diff --git a/core/metadata.py b/core/metadata.py index e7b795f..829fea6 100755 --- a/core/metadata.py +++ b/core/metadata.py @@ -8,7 +8,6 @@ import urllib.request def compare(music_file, metadata): """Check if the input music file title matches the expected title.""" - already_tagged = False try: if music_file.endswith('.mp3'): audiofile = EasyID3(music_file) @@ -17,29 +16,31 @@ def compare(music_file, metadata): audiofile = MP4(music_file) already_tagged = audiofile[tags['title']] == metadata['name'] except (KeyError, TypeError): - pass + already_tagged = False + return already_tagged def embed(music_file, meta_tags): """ Embed metadata. """ - embedder = EmbedMetadata(music_file, meta_tags) + embed = EmbedMetadata(music_file, meta_tags) if music_file.endswith('.m4a'): log.info('Applying metadata') - return embedder.m4a() + return embed.as_m4a() elif music_file.endswith('.mp3'): log.info('Applying metadata') - return embedder.mp3() + return embed.as_mp3() else: log.warning('Cannot embed metadata into given output extension') return False + class EmbedMetadata: def __init__(self, music_file, meta_tags): self.music_file = music_file self.meta_tags = meta_tags - def mp3(self): + def as_mp3(self): """ Embed metadata to MP3 files. """ music_file = self.music_file meta_tags = self.meta_tags @@ -81,7 +82,7 @@ class EmbedMetadata: audiofile.save(v2_version=3) return True - def m4a(self): + def as_m4a(self): """ Embed metadata to M4A files. """ music_file = self.music_file meta_tags = self.meta_tags