From debe7ee9024e2ec65eed9935460c62f4eecd03ea Mon Sep 17 00:00:00 2001 From: Ritiek Malhotra Date: Tue, 19 May 2020 12:49:00 +0530 Subject: [PATCH] Optional parameter to check if the encoder exists If `must_exists` is `False` when intializing `EncoderFFmpeg()`, skip skip checking whether the FFmpeg binary exists. Fixes #722. --- spotdl/encode/encode_base.py | 4 ++-- spotdl/encode/encoders/ffmpeg.py | 4 ++-- spotdl/track.py | 8 ++++---- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/spotdl/encode/encode_base.py b/spotdl/encode/encode_base.py index 6add514..2bddf18 100644 --- a/spotdl/encode/encode_base.py +++ b/spotdl/encode/encode_base.py @@ -37,12 +37,12 @@ class EncoderBase(ABC): """ @abstractmethod - def __init__(self, encoder_path, loglevel, additional_arguments=[]): + def __init__(self, encoder_path, must_exist, loglevel, additional_arguments=[]): """ This method must make sure whether specified encoder is available under PATH. """ - if shutil.which(encoder_path) is None: + if must_exist and shutil.which(encoder_path) is None: raise EncoderNotFoundError( "{} executable does not exist or was not found in PATH.".format( encoder_path diff --git a/spotdl/encode/encoders/ffmpeg.py b/spotdl/encode/encoders/ffmpeg.py index c511383..1469fee 100644 --- a/spotdl/encode/encoders/ffmpeg.py +++ b/spotdl/encode/encoders/ffmpeg.py @@ -27,11 +27,11 @@ RULES = { class EncoderFFmpeg(EncoderBase): - def __init__(self, encoder_path="ffmpeg"): + def __init__(self, encoder_path="ffmpeg", must_exist=True): _loglevel = "-hide_banner -nostats -v panic" _additional_arguments = ["-b:a", "192k", "-vn"] try: - super().__init__(encoder_path, _loglevel, _additional_arguments) + super().__init__(encoder_path, must_exist, _loglevel, _additional_arguments) except EncoderNotFoundError as e: raise FFmpegNotFoundError(e.args[0]) self._rules = RULES diff --git a/spotdl/track.py b/spotdl/track.py index 32bd85e..bdc07c1 100644 --- a/spotdl/track.py +++ b/spotdl/track.py @@ -44,9 +44,9 @@ class Track: return progress_bar def download_while_re_encoding(self, stream, target_path, target_encoding=None, - encoder=EncoderFFmpeg, show_progress=True): + encoder=EncoderFFmpeg(must_exist=False), show_progress=True): total_chunks = self.calculate_total_chunks(stream["filesize"]) - process = encoder().re_encode_from_stdin( + process = encoder.re_encode_from_stdin( stream["encoding"], target_path, target_encoding=target_encoding @@ -80,10 +80,10 @@ class Track: writer(response, progress_bar, file_io) def re_encode(self, input_path, target_path, target_encoding=None, - encoder=EncoderFFmpeg, show_progress=True): + encoder=EncoderFFmpeg(must_exist=False), show_progress=True): stream = self.metadata["streams"].getbest() total_chunks = self.calculate_total_chunks(stream["filesize"]) - process = encoder().re_encode_from_stdin( + process = encoder.re_encode_from_stdin( stream["encoding"], target_path, target_encoding=target_encoding