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
This commit is contained in:
PadoTheOriginal 2023-07-26 18:24:55 -03:00 committed by GitHub
parent 95abea9a03
commit 9269931b9b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -251,7 +251,8 @@ def get_audio_codec(self, path):
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 @@ def get_metadata_object(self, path, opts=[]):
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 @@ def make_args(file, args, name, number):
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])