diff --git a/bin/vcmp b/bin/vcmp index 4717fb1..6a76918 100755 --- a/bin/vcmp +++ b/bin/vcmp @@ -16,6 +16,10 @@ total_files: int = 0 def is_system_busy() -> bool: """Returns true if the cpu is doing something else. maybe.""" + # First call all processes, so we can recheck them later. + # See: https://psutil.readthedocs.io/en/latest/#psutil.Process.cpu_percent + for proc in psutil.process_iter(['cpu_percent', 'pid']): + pass total_cpu = 0 our_pids = [os.getpid()] try: @@ -27,7 +31,6 @@ def is_system_busy() -> bool: for proc in psutil.process_iter(['cpu_percent', 'pid']): if proc.info['pid'] not in our_pids: total_cpu += proc.info['cpu_percent'] - #print(total_cpu) cpu_count = psutil.cpu_count() if cpu_count is None: @@ -130,8 +133,11 @@ def run_progress(process, duration, file_index=0) -> bool: current_time = None last_update = 0 progress = 0 - UPDATE_INTERVAL = 1 + UPDATE_INTERVAL = 10 # TODO: Parameter start_time = time.time() + is_interactive = sys.stdout.isatty() + if is_interactive: + UPDATE_INTERVAL = 1 while True: line = process.stdout.readline() if process.stdout else None @@ -142,24 +148,24 @@ def run_progress(process, duration, file_index=0) -> bool: if line and line.startswith('out_time_ms='): try: - time_str = line.split('=')[1].strip() - current_time = float(time_str) / 1000000 - current_time = min(current_time, duration) - progress = (current_time / duration) * 100 - elapsed = time.time() - start_time - speed = current_time / elapsed if elapsed > 0 else 0 if time.time() - last_update > UPDATE_INTERVAL: if is_system_busy(): return False - total_progress = (file_index / total_files) * 100 - sys.stdout.write( - f"\rProcessing ({file_index}/{total_files} [{total_progress:.1f}%]) :" - f"{progress:5.1f}% " - f"({current_time:.1f} / {duration:.1f} seconds) " - f"[{speed:.2f}x]" - f"{'.' * int(progress / 5)}{' ' * (20 - int(progress / 5))}" - ) - sys.stdout.flush() + if is_interactive: + time_str = line.split('=')[1].strip() + current_time = float(time_str) / 1000000 + current_time = min(current_time, duration) + progress = (current_time / duration) * 100 + elapsed = time.time() - start_time + speed = current_time / elapsed if elapsed > 0 else 0 + sys.stdout.write( + f"\rProcessing:" + f"{progress:5.1f}% " + f"({current_time:.1f} / {duration:.1f} seconds) " + f"[{speed:.2f}x]" + f"{'.' * int(progress / 5)}{' ' * (20 - int(progress / 5))}" + ) + sys.stdout.flush() last_update = time.time() except: pass @@ -211,7 +217,7 @@ def process_single_file( temp_path = temp_dir / filepath.with_suffix(".mp4").name clean_directory(temp_dir) # Should be empty if mktemp was used, but clear it regardless. - logging.info(f"Processing {filepath} to {target_path}") + logging.info(f"Processing ({file_index}/{total_files}): {filepath} to {target_path} ") logging.debug(f"Using temporary file: {temp_path}") cmd = ffmpeg_command(filepath, temp_path, nice)