"""Resolve ffmpeg/ffprobe paths for both frozen and development builds.""" from __future__ import annotations import os import sys def get_ffmpeg_path() -> str: """Return the path to the ffmpeg binary. When running as a frozen PyInstaller bundle, looks next to sys.executable. Otherwise falls back to the system PATH. """ if getattr(sys, "frozen", False): # Frozen PyInstaller bundle — ffmpeg is next to the sidecar binary bundle_dir = os.path.dirname(sys.executable) candidates = [ os.path.join(bundle_dir, "ffmpeg.exe" if sys.platform == "win32" else "ffmpeg"), os.path.join(bundle_dir, "ffmpeg"), ] for path in candidates: if os.path.isfile(path): return path return "ffmpeg" def get_ffprobe_path() -> str: """Return the path to the ffprobe binary. When running as a frozen PyInstaller bundle, looks next to sys.executable. Otherwise falls back to the system PATH. """ if getattr(sys, "frozen", False): bundle_dir = os.path.dirname(sys.executable) candidates = [ os.path.join(bundle_dir, "ffprobe.exe" if sys.platform == "win32" else "ffprobe"), os.path.join(bundle_dir, "ffprobe"), ] for path in candidates: if os.path.isfile(path): return path return "ffprobe"