diff options
Diffstat (limited to 'yt_dlp/downloader/external.py')
-rw-r--r-- | yt_dlp/downloader/external.py | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/yt_dlp/downloader/external.py b/yt_dlp/downloader/external.py index 8a69b4847..28b1d4e2b 100644 --- a/yt_dlp/downloader/external.py +++ b/yt_dlp/downloader/external.py @@ -347,6 +347,10 @@ class FFmpegFD(ExternalFD): # TODO: Fix path for ffmpeg return FFmpegPostProcessor().available + def on_process_started(self, proc, stdin): + """ Override this in subclasses """ + pass + def _call_downloader(self, tmpfilename, info_dict): urls = [f['url'] for f in info_dict.get('requested_formats', [])] or [info_dict['url']] ffpp = FFmpegPostProcessor(downloader=self) @@ -474,6 +478,8 @@ class FFmpegFD(ExternalFD): self._debug_cmd(args) proc = subprocess.Popen(args, stdin=subprocess.PIPE, env=env) + if url in ('-', 'pipe:'): + self.on_process_started(proc, proc.stdin) try: retval = proc.wait() except BaseException as e: @@ -482,7 +488,7 @@ class FFmpegFD(ExternalFD): # produces a file that is playable (this is mostly useful for live # streams). Note that Windows is not affected and produces playable # files (see https://github.com/ytdl-org/youtube-dl/issues/8300). - if isinstance(e, KeyboardInterrupt) and sys.platform != 'win32': + if isinstance(e, KeyboardInterrupt) and sys.platform != 'win32' and url not in ('-', 'pipe:'): process_communicate_or_kill(proc, b'q') else: proc.kill() |