]> jfr.im git - yt-dlp.git/blobdiff - yt_dlp/postprocessor/sponskrub.py
[docs] Improve embedding docs and other minor fixes
[yt-dlp.git] / yt_dlp / postprocessor / sponskrub.py
index 2f30acc8e52b43af0204b680a22ab813cb5a614a..1a9f5dc66374a1c46e55b0584b2b1d5d1ab20d07 100644 (file)
@@ -1,37 +1,43 @@
-from __future__ import unicode_literals
 import os
+import shlex
 import subprocess
 
 from .common import PostProcessor
-from ..compat import compat_shlex_split
 from ..utils import (
+    Popen,
+    PostProcessingError,
     check_executable,
+    cli_option,
     encodeArgument,
     encodeFilename,
+    prepend_extension,
     shell_quote,
     str_or_none,
-    PostProcessingError,
-    prepend_extension,
-    process_communicate_or_kill,
 )
 
 
+# Deprecated in favor of the native implementation
 class SponSkrubPP(PostProcessor):
     _temp_ext = 'spons'
     _exe_name = 'sponskrub'
 
-    def __init__(self, downloader, path='', args=None, ignoreerror=False, cut=False, force=False):
+    def __init__(self, downloader, path='', args=None, ignoreerror=False, cut=False, force=False, _from_cli=False):
         PostProcessor.__init__(self, downloader)
         self.force = force
         self.cutout = cut
         self.args = str_or_none(args) or ''  # For backward compatibility
         self.path = self.get_exe(path)
 
+        if not _from_cli:
+            self.deprecation_warning(
+                'yt_dlp.postprocessor.SponSkrubPP support is deprecated and may be removed in a future version. '
+                'Use yt_dlp.postprocessor.SponsorBlock and yt_dlp.postprocessor.ModifyChaptersPP instead')
+
         if not ignoreerror and self.path is None:
             if path:
                 raise PostProcessingError('sponskrub not found in "%s"' % path)
             else:
-                raise PostProcessingError('sponskrub not found. Please install or provide the path using --sponskrub-path.')
+                raise PostProcessingError('sponskrub not found. Please install or provide the path using --sponskrub-path')
 
     def get_exe(self, path=''):
         if not path or not check_executable(path, ['-h']):
@@ -40,6 +46,7 @@ def get_exe(self, path=''):
                 return None
         return path
 
+    @PostProcessor._restrict_to(images=False)
     def run(self, information):
         if self.path is None:
             return [], information
@@ -70,19 +77,19 @@ def run(self, information):
         cmd = [self.path]
         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 += cli_option(self._downloader.params, '-proxy', 'proxy')
+        cmd += shlex.split(self.args)  # For backward compatibility
+        cmd += self._configuration_args(self._exe_name, use_compat=False)
         cmd += ['--', information['id'], filename, temp_filename]
         cmd = [encodeArgument(i) for i in cmd]
 
         self.write_debug('sponskrub command line: %s' % shell_quote(cmd))
         pipe = None if self.get_param('verbose') else subprocess.PIPE
-        p = subprocess.Popen(cmd, stdout=pipe)
-        stdout = process_communicate_or_kill(p)[0]
+        p = Popen(cmd, stdout=pipe)
+        stdout = p.communicate_or_kill()[0]
 
         if p.returncode == 0:
-            os.remove(encodeFilename(filename))
-            os.rename(encodeFilename(temp_filename), encodeFilename(filename))
+            os.replace(temp_filename, filename)
             self.to_screen('Sponsor sections have been %s' % ('removed' if self.cutout else 'marked'))
         elif p.returncode == 3:
             self.to_screen('No segments in the SponsorBlock database')