]> jfr.im git - yt-dlp.git/commitdiff
Add more post-processing stages
authorpukkandan <redacted>
Sun, 2 Jan 2022 10:53:20 +0000 (16:23 +0530)
committerpukkandan <redacted>
Mon, 3 Jan 2022 14:10:05 +0000 (19:40 +0530)
playlist = After entire playlist
after_video = After downloading all formats of a video

README.md
yt_dlp/YoutubeDL.py
yt_dlp/options.py
yt_dlp/utils.py
ytdlp_plugins/postprocessor/sample.py

index 1b8680e339bc2b80e95b3acbd3be73c0f3797be2..f236ced157cb5603fd9769796957073084960034 100644 (file)
--- a/README.md
+++ b/README.md
@@ -948,10 +948,12 @@ ## Post-Processing Options:
                                      "pre_process" (after extraction),
                                      "before_dl" (before video download),
                                      "post_process" (after video download;
-                                     default) or "after_move" (after moving file
-                                     to their final locations). This option can
-                                     be used multiple times to add different
-                                     postprocessors
+                                     default), "after_move" (after moving file
+                                     to their final locations), "after_video"
+                                     (after downloading and processing all
+                                     formats of a video), or "playlist" (end of
+                                     playlist). This option can be used multiple
+                                     times to add different postprocessors
 
 ## SponsorBlock Options:
 Make chapter entries for, or remove various segments (sponsor,
index 5b285e1a161be0efc5194622de7395676e3001db..57c56f882b4802af0259be173bfd37acb9f62c3b 100644 (file)
@@ -1766,6 +1766,10 @@ def get_entry(i):
 
         for tmpl in self.params['forceprint'].get('playlist', []):
             self._forceprint(tmpl, ie_result)
+
+        for pp in self._pps['playlist']:
+            ie_result = self.run_pp(pp, ie_result)
+
         self.to_screen('[download] Finished downloading playlist: %s' % playlist)
         return ie_result
 
@@ -2564,6 +2568,10 @@ def is_wellformed(f):
                 new_info['__original_infodict'] = info_dict
                 new_info.update(fmt)
                 self.process_info(new_info)
+
+            for pp in self._pps['after_video']:
+                info_dict = self.run_pp(pp, info_dict)
+
         # We update the info dict with the selected best quality format (backwards compatibility)
         if formats_to_download:
             info_dict.update(formats_to_download[-1])
index f4e5d14df5c565477c01c59e4b6b1f3c04b21d6a..a96fb82a2ba1b10c6da5e46a6013a72c421de769 100644 (file)
@@ -1482,8 +1482,10 @@ def _dict_from_options_callback(
             'ARGS are a semicolon ";" delimited list of NAME=VALUE. '
             'The "when" argument determines when the postprocessor is invoked. '
             'It can be one of "pre_process" (after extraction), '
-            '"before_dl" (before video download), "post_process" (after video download; default) '
-            'or "after_move" (after moving file to their final locations). '
+            '"before_dl" (before video download), "post_process" (after video download; default), '
+            '"after_move" (after moving file to their final locations), '
+            '"after_video" (after downloading and processing all formats of a video), '
+            'or "playlist" (end of playlist). '
             'This option can be used multiple times to add different postprocessors'))
 
     sponsorblock = optparse.OptionGroup(parser, 'SponsorBlock Options', description=(
index f56129aa5fd92c611e5d63325ad945b823a957c0..1fd85de8eba74d789379cd5b84dcac75c6d699be 100644 (file)
@@ -3036,7 +3036,7 @@ def q(qid):
     return q
 
 
-POSTPROCESS_WHEN = {'pre_process', 'before_dl', 'after_move', 'post_process'}
+POSTPROCESS_WHEN = {'pre_process', 'before_dl', 'after_move', 'post_process', 'after_video', 'playlist'}
 
 
 DEFAULT_OUTTMPL = {
index 6891280d50a2dc5a1adc26ef2c07efc4dc0afb8b..551c4bfff74ae47d555ff7997e0aa01454dc517a 100644 (file)
@@ -14,8 +14,10 @@ def __init__(self, downloader=None, **kwargs):
 
     # ℹ️ See docstring of yt_dlp.postprocessor.common.PostProcessor.run
     def run(self, info):
-        filepath = info.get('filepath')
-        if filepath:  # PP was called after download (default)
+        if info.get('_type', 'video') != 'video':  # PP was called for playlist
+            self.to_screen(f'Post-processing playlist {info.get("id")!r} with {self._kwargs}')
+        elif info.get('filepath'):  # PP was called after download (default)
+            filepath = info.get('filepath')
             self.to_screen(f'Post-processed {filepath!r} with {self._kwargs}')
         else:  # PP was called before actual download
             filepath = info.get('_filename')