diff options
Diffstat (limited to 'yt_dlp/postprocessor')
-rw-r--r-- | yt_dlp/postprocessor/common.py | 12 | ||||
-rw-r--r-- | yt_dlp/postprocessor/embedthumbnail.py | 2 | ||||
-rw-r--r-- | yt_dlp/postprocessor/ffmpeg.py | 27 | ||||
-rw-r--r-- | yt_dlp/postprocessor/sponskrub.py | 2 |
4 files changed, 31 insertions, 12 deletions
diff --git a/yt_dlp/postprocessor/common.py b/yt_dlp/postprocessor/common.py index f8f4e7693..3c316b349 100644 --- a/yt_dlp/postprocessor/common.py +++ b/yt_dlp/postprocessor/common.py @@ -91,10 +91,18 @@ class PostProcessor(object): except Exception: self.report_warning(errnote) - def _configuration_args(self, *args, **kwargs): + def _configuration_args(self, exe, keys=None, default=[], use_compat=True): + pp_key = self.pp_key().lower() + exe = exe.lower() + root_key = exe if pp_key == exe else '%s+%s' % (pp_key, exe) + keys = ['%s%s' % (root_key, k) for k in (keys or [''])] + if root_key in keys: + keys += [root_key] + ([] if pp_key == exe else [(self.pp_key(), exe)]) + ['default'] + else: + use_compat = False return cli_configuration_args( self._downloader.params.get('postprocessor_args'), - self.pp_key().lower(), *args, **kwargs) + keys, default, use_compat) class AudioConversionError(PostProcessingError): diff --git a/yt_dlp/postprocessor/embedthumbnail.py b/yt_dlp/postprocessor/embedthumbnail.py index cc6cd1c8e..3c68e0298 100644 --- a/yt_dlp/postprocessor/embedthumbnail.py +++ b/yt_dlp/postprocessor/embedthumbnail.py @@ -139,7 +139,7 @@ class EmbedThumbnailPP(FFmpegPostProcessor): encodeFilename(thumbnail_filename, True), encodeArgument('-o'), encodeFilename(temp_filename, True)] - cmd += [encodeArgument(o) for o in self._configuration_args(exe='AtomicParsley')] + cmd += [encodeArgument(o) for o in self._configuration_args('AtomicParsley')] self.to_screen('Adding thumbnail to "%s"' % filename) self.write_debug('AtomicParsley command line: %s' % shell_quote(cmd)) diff --git a/yt_dlp/postprocessor/ffmpeg.py b/yt_dlp/postprocessor/ffmpeg.py index 944a4bc17..a8635c1d1 100644 --- a/yt_dlp/postprocessor/ffmpeg.py +++ b/yt_dlp/postprocessor/ffmpeg.py @@ -234,25 +234,35 @@ class FFmpegPostProcessor(PostProcessor): return num, len(streams) def run_ffmpeg_multiple_files(self, input_paths, out_path, opts): + return self.real_run_ffmpeg( + [(path, []) for path in input_paths], + [(out_path, opts)]) + + def real_run_ffmpeg(self, input_path_opts, output_path_opts): self.check_version() oldest_mtime = min( - os.stat(encodeFilename(path)).st_mtime for path in input_paths) + os.stat(encodeFilename(path)).st_mtime for path, _ in input_path_opts) cmd = [encodeFilename(self.executable, True), encodeArgument('-y')] # avconv does not have repeat option if self.basename == 'ffmpeg': cmd += [encodeArgument('-loglevel'), encodeArgument('repeat+info')] - def make_args(file, pre=[], post=[], *args, **kwargs): - args = pre + self._configuration_args(*args, **kwargs) + post + def make_args(file, args, name, number): + keys = ['_%s%d' % (name, number), '_%s' % name] + if name == 'o' and number == 1: + keys.append('') + args += self._configuration_args(self.basename, keys) + if name == 'i': + args.append('-i') return ( - [encodeArgument(o) for o in args] + [encodeArgument(arg) for arg in args] + [encodeFilename(self._ffmpeg_filename_argument(file), True)]) - for i, path in enumerate(input_paths): - cmd += make_args(path, post=['-i'], exe='%s_i%d' % (self.basename, i + 1), use_default_arg=False) - cmd += make_args(out_path, pre=opts, exe=self.basename) + for arg_type, path_opts in (('i', input_path_opts), ('o', output_path_opts)): + cmd += [arg for i, o in enumerate(path_opts) + for arg in make_args(o[0], o[1], arg_type, i + 1)] self.write_debug('ffmpeg command line: %s' % shell_quote(cmd)) p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE) @@ -262,7 +272,8 @@ class FFmpegPostProcessor(PostProcessor): if self.get_param('verbose', False): self.report_error(stderr) raise FFmpegPostProcessorError(stderr.split('\n')[-1]) - self.try_utime(out_path, oldest_mtime, oldest_mtime) + for out_path, _ in output_path_opts: + self.try_utime(out_path, oldest_mtime, oldest_mtime) return stderr.decode('utf-8', 'replace') def run_ffmpeg(self, path, out_path, opts): diff --git a/yt_dlp/postprocessor/sponskrub.py b/yt_dlp/postprocessor/sponskrub.py index 2f30acc8e..4ba33398e 100644 --- a/yt_dlp/postprocessor/sponskrub.py +++ b/yt_dlp/postprocessor/sponskrub.py @@ -71,7 +71,7 @@ class SponSkrubPP(PostProcessor): if not self.cutout: cmd += ['-chapter'] cmd += compat_shlex_split(self.args) # For backward compatibility - cmd += self._configuration_args(exe=self._exe_name, use_default_arg='no_compat') + cmd += self._configuration_args(self._exe_name, use_compat=False) cmd += ['--', information['id'], filename, temp_filename] cmd = [encodeArgument(i) for i in cmd] |