add colors to output to make it more readable

This commit is contained in:
Lucy 2025-03-07 17:06:27 +00:00
parent caaa3482d7
commit 77e6f43ef6

View file

@ -10,20 +10,30 @@ app = Flask(__name__)
BASE_STORAGE_PATH = "/vPath" # Root directory for MKV files
DEBUG_MODE = True # Default: Debugging on
class bcolors:
HEADER = '\033[95m'
OKBLUE = '\033[94m'
OKCYAN = '\033[96m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
ENDC = '\033[0m'
BOLD = '\033[1m'
UNDERLINE = '\033[4m'
@app.route('/convert/vpath/<path:filepath>.webm')
def convert(filepath):
# Log the incoming request
if DEBUG_MODE:
print(f"[DEBUG] Received request: {request.url}")
print(f"[DEBUG] Mapped file path: {os.path.join(BASE_STORAGE_PATH, filepath + '.mkv')}")
print(f"{bcolors.OKGREEN}[DEBUG] Received request: {request.url}{bcolors.ENDC}")
print(f"{bcolors.OKGREEN}[DEBUG] Mapped file path: {os.path.join(BASE_STORAGE_PATH, filepath + '.mkv')}{bcolors.ENDC}")
mkv_file = os.path.join(BASE_STORAGE_PATH, filepath + ".mkv")
# Check if the file exists before proceeding
if not os.path.isfile(mkv_file):
if DEBUG_MODE:
print(f"[ERROR] File not found: {mkv_file}")
print(f"{bcolors.FAIL}[ERROR] File not found: {mkv_file}{bcolors.ENDC}")
return "File not found", 404
def generate():
@ -32,10 +42,10 @@ def convert(filepath):
try:
audio_codec_info = subprocess.check_output(probe_cmd, stderr=subprocess.PIPE).decode('utf-8').strip()
if DEBUG_MODE:
print(f"[DEBUG] Audio codec: {audio_codec_info}")
print(f"{bcolors.OKGREEN}[DEBUG] Audio codec: {audio_codec_info}{bcolors.ENDC}")
except subprocess.CalledProcessError as e:
if DEBUG_MODE:
print(f"[ERROR] Audio probe failed: {e}")
print(f"{bcolors.FAIL}[ERROR] Audio probe failed: {e}{bcolors.ENDC}")
audio_codec_info = "unknown"
# Use ffprobe to get the video information
@ -43,10 +53,10 @@ def convert(filepath):
try:
video_codec_info = subprocess.check_output(probe_cmd, stderr=subprocess.PIPE).decode('utf-8').strip()
if DEBUG_MODE:
print(f"[DEBUG] Video codec: {video_codec_info}")
print(f"{bcolors.WARNING}[DEBUG] Video codec: {video_codec_info}{bcolors.ENDC}")
except subprocess.CalledProcessError as e:
if DEBUG_MODE:
print(f"[ERROR] Video probe failed: {e}")
print(f"{bcolors.FAIL}[ERROR] Video probe failed: {e}{bcolors.ENDC}")
video_codec_info = "unknown"
# Get available encoders in this FFmpeg installation
@ -54,17 +64,17 @@ def convert(filepath):
try:
encoders_output = subprocess.check_output(["ffmpeg", "-encoders"], stderr=subprocess.PIPE).decode('utf-8')
if DEBUG_MODE:
print("[DEBUG] Checking available encoders")
print("{bcolors.WARNING}[DEBUG] Checking available encoders{bcolors.ENDC}")
for line in encoders_output.split('\n'):
if ' V' in line or ' A' in line: # Video or Audio encoder
parts = line.split()
if len(parts) > 2:
available_encoders.append(parts[1])
if DEBUG_MODE:
print(f"[DEBUG] Found encoders: {', '.join(available_encoders)}")
print(f"{bcolors.WARNING}[DEBUG] Found encoders: {', '.join(available_encoders)}{bcolors.ENDC}")
except Exception as e:
if DEBUG_MODE:
print(f"[ERROR] Failed to get encoder list: {str(e)}")
print(f"{bcolors.FAIL}[ERROR] Failed to get encoder list: {str(e)}{bcolors.ENDC}")
# Build FFmpeg command with fallback options
ffmpeg_cmd = ["ffmpeg", "-i", mkv_file]
@ -102,9 +112,10 @@ def convert(filepath):
])
if DEBUG_MODE:
print(f"[DEBUG] Executing command: {' '.join(ffmpeg_cmd)}")
print(f"{bcolors.WARNING}[DEBUG] Executing command: {' '.join(ffmpeg_cmd)}{bcolors.ENDC}")
# Start FFmpeg process
print(f"{bcolors.OKGREEN}Dispatching ffmpeg Task with: {' '.join(ffmpeg_cmd)}{bcolors.ENDC}")
process = subprocess.Popen(
ffmpeg_cmd,
stdout=subprocess.PIPE,
@ -122,7 +133,7 @@ def convert(filepath):
line_text = line.decode('utf-8', errors='replace').strip()
error_output.append(line_text)
if DEBUG_MODE:
print(f"[FFMPEG] {line_text}")
print(f"{bcolors.OKCYAN}[FFMPEG] {line_text}{bcolors.ENDC}")
stderr_thread = threading.Thread(target=log_stderr)
stderr_thread.daemon = True
@ -142,21 +153,21 @@ def convert(filepath):
received_data = True
if byte_count == len(chunk): # First chunk
if DEBUG_MODE:
print(f"[DEBUG] First chunk received after {time.time() - start_time:.2f} seconds, size: {len(chunk)} bytes")
print(f"{bcolors.WARNING}[DEBUG] First chunk received after {time.time() - start_time:.2f} seconds, size: {len(chunk)} bytes{bcolors.ENDC}")
yield chunk
else:
# Check if process has ended
if process.poll() is not None:
if DEBUG_MODE:
print(f"[DEBUG] FFmpeg process completed with code: {process.returncode}")
print(f"[DEBUG] Total bytes streamed: {byte_count}")
print(f"{bcolors.WARNING}[DEBUG] FFmpeg process completed with code: {process.returncode}{bcolors.ENDC}")
print(f"{bcolors.WARNING}[DEBUG] Total bytes streamed: {byte_count}{bcolors.ENDC}")
# If we never got any data and process exited with error
if not received_data and process.returncode != 0:
if DEBUG_MODE:
print("[ERROR] FFmpeg failed to produce any output")
print("{bcolors.FAIL}[ERROR] FFmpeg failed to produce any output{bcolors.ENDC}")
if error_output:
print(f"[ERROR] Last errors: {error_output[-10:]}")
print(f"{bcolors.FAIL}[ERROR] Last errors: {error_output[-10:]}{bcolors.ENDC}")
break
# Short wait before trying again
@ -165,12 +176,12 @@ def convert(filepath):
# Safety timeout - if no data after 30 seconds, abort
if not received_data and (time.time() - start_time) > 30:
if DEBUG_MODE:
print("[ERROR] Timed out waiting for FFmpeg output")
print("{bcolors.FAIL}[ERROR] Timed out waiting for FFmpeg output{bcolors.ENDC}")
break
except Exception as e:
if DEBUG_MODE:
print(f"[ERROR] Streaming exception: {str(e)}")
print(f"{bcolors.FAIL}[ERROR] Streaming exception: {str(e)}{bcolors.ENDC}")
finally:
try:
@ -185,10 +196,10 @@ def convert(filepath):
except Exception as e:
if DEBUG_MODE:
print(f"[ERROR] Process cleanup error: {str(e)}")
print(f"{bcolors.FAIL}[ERROR] Process cleanup error: {str(e)}{bcolors.ENDC}")
if DEBUG_MODE:
print(f"[DEBUG] Streaming ended for: {mkv_file}")
print(f"{bcolors.WARNING}[DEBUG] Streaming ended for: {mkv_file}{bcolors.ENDC}")
# Set proper headers for streaming
headers = {
@ -218,6 +229,6 @@ if __name__ == "__main__":
if args.debug:
DEBUG_MODE = True
print("[DEBUG] Debug mode enabled")
print(f"{bcolors.WARNING}[DEBUG] Debug mode enabled{bcolors.ENDC}")
app.run(host="0.0.0.0", port=8080, debug=DEBUG_MODE, threaded=True)