From 9269931b9bba837a514af32e56dddae14d8fd405 Mon Sep 17 00:00:00 2001 From: PadoTheOriginal <54630918+PadoTheOriginal@users.noreply.github.com> Date: Wed, 26 Jul 2023 18:24:55 -0300 Subject: [PATCH] Update ffmpeg.py Problem: I created a yt-dlp GUI and I use ffmpeg to convert to audio often, recently I used pyinstaller to make a .exe for this GUI because I want to send it to friends who don't have python in their computers, also I don't like the console that appears with python so I just put the configuration to remove the console on pyinstaller, the program works fine, until it has to convert anything with ffmpeg, then because ffmpeg requires a console to open it the program crashes. Solution: Added 'creationflags=subprocess.CREATE_NO_WINDOW' so it doesn't try to create a terminal window, this fixes the crashing. Extra info: - All of this is on windows, I didn't test on linux or on mac - This problem only happend to me when I compiled the program to .exe - I tried this solution and it worked perfectly --- yt_dlp/postprocessor/ffmpeg.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/yt_dlp/postprocessor/ffmpeg.py b/yt_dlp/postprocessor/ffmpeg.py index 323f4303c..1a9d61dc6 100644 --- a/yt_dlp/postprocessor/ffmpeg.py +++ b/yt_dlp/postprocessor/ffmpeg.py @@ -251,7 +251,8 @@ class FFmpegPostProcessor(PostProcessor): cmd.append(encodeFilename(self._ffmpeg_filename_argument(path), True)) self.write_debug(f'{self.basename} command line: {shell_quote(cmd)}') stdout, stderr, returncode = Popen.run( - cmd, text=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + cmd, text=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, + stderr=subprocess.PIPE, creationflags=subprocess.CREATE_NO_WINDOW) if returncode != (0 if self.probe_available else 1): return None except OSError: @@ -292,7 +293,8 @@ class FFmpegPostProcessor(PostProcessor): cmd += opts cmd.append(self._ffmpeg_filename_argument(path)) self.write_debug(f'ffprobe command line: {shell_quote(cmd)}') - stdout, _, _ = Popen.run(cmd, text=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE) + stdout, _, _ = Popen.run(cmd, text=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, + stdin=subprocess.PIPE, creationflags=subprocess.CREATE_NO_WINDOW) return json.loads(stdout) def get_stream_number(self, path, keys, value): @@ -361,7 +363,8 @@ class FFmpegPostProcessor(PostProcessor): self.write_debug('ffmpeg command line: %s' % shell_quote(cmd)) _, stderr, returncode = Popen.run( - cmd, text=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE) + cmd, text=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, + stdin=subprocess.PIPE, creationflags=subprocess.CREATE_NO_WINDOW) if returncode not in variadic(expected_retcodes): self.write_debug(stderr) raise FFmpegPostProcessorError(stderr.strip().splitlines()[-1])