From b534ea99042a53432e6cdf24a8d613055cab32e9 Mon Sep 17 00:00:00 2001 From: Matey Krastev Date: Sun, 21 Sep 2025 17:04:11 +0200 Subject: [PATCH 1/2] impl: add support for passing arbitrary file handles/sys.stdout/sys.stderr --- .../better_ffmpeg_progress.py | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/better_ffmpeg_progress/better_ffmpeg_progress.py b/better_ffmpeg_progress/better_ffmpeg_progress.py index 920f511..e893dd3 100644 --- a/better_ffmpeg_progress/better_ffmpeg_progress.py +++ b/better_ffmpeg_progress/better_ffmpeg_progress.py @@ -93,7 +93,7 @@ def __init__( self._ffmpeg_log_file = Path( ffmpeg_log_file or f"{self._input_filepath.name}_ffmpeg_log.txt" - ) + ) if type(ffmpeg_log_file) is os.PathLike else ffmpeg_log_file self._print_detected_duration = print_detected_duration self._duration_secs = get_media_duration(input_file_path_str) @@ -151,7 +151,22 @@ def run( self._return_code = 1 try: - with open(self._ffmpeg_log_file, "w", encoding="utf-8") as f: + if type(self._ffmpeg_log_file) is Path: + with open(self._ffmpeg_log_file, "w", encoding="utf-8") as f: + creationflags = 0 + + if os.name == "nt": + creationflags = subprocess.CREATE_NEW_PROCESS_GROUP + + self._process = subprocess.Popen( + current_ffmpeg_command, + shell=self._shell_needed, + stdout=subprocess.PIPE, + stderr=f, + creationflags=creationflags, + ) + else: + # Assume it's a valid file descriptor like sys.stdout creationflags = 0 if os.name == "nt": @@ -161,7 +176,7 @@ def run( current_ffmpeg_command, shell=self._shell_needed, stdout=subprocess.PIPE, - stderr=f, + stderr=self._ffmpeg_log_file, creationflags=creationflags, ) except Exception as e: From 3b17f243ae7c58ad7597b7c5e40388b73fe7894a Mon Sep 17 00:00:00 2001 From: Matey Krastev Date: Sun, 21 Sep 2025 18:02:11 +0200 Subject: [PATCH 2/2] fix --- better_ffmpeg_progress/better_ffmpeg_progress.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/better_ffmpeg_progress/better_ffmpeg_progress.py b/better_ffmpeg_progress/better_ffmpeg_progress.py index e893dd3..b0a8cb0 100644 --- a/better_ffmpeg_progress/better_ffmpeg_progress.py +++ b/better_ffmpeg_progress/better_ffmpeg_progress.py @@ -93,7 +93,8 @@ def __init__( self._ffmpeg_log_file = Path( ffmpeg_log_file or f"{self._input_filepath.name}_ffmpeg_log.txt" - ) if type(ffmpeg_log_file) is os.PathLike else ffmpeg_log_file + ) if (isinstance(ffmpeg_log_file, os.PathLike) or ffmpeg_log_file is None) else ffmpeg_log_file + self._print_detected_duration = print_detected_duration self._duration_secs = get_media_duration(input_file_path_str) @@ -151,7 +152,7 @@ def run( self._return_code = 1 try: - if type(self._ffmpeg_log_file) is Path: + if isinstance(self._ffmpeg_log_file, (str, Path)): with open(self._ffmpeg_log_file, "w", encoding="utf-8") as f: creationflags = 0