# probe.py import json import subprocess def ffprobe(filepath): cmd = [ "ffprobe", "-v", "quiet", "-print_format", "json", "-show_format", "-show_streams", filepath, ] result = subprocess.run( cmd, capture_output=True, text=True, check=True, ) return json.loads(result.stdout) def get_duration(filepath): data = ffprobe(filepath) return float( data["format"]["duration"] ) def get_video_stream(filepath): data = ffprobe(filepath) for stream in data["streams"]: if stream["codec_type"] == "video": return stream return None def get_resolution(filepath): stream = get_video_stream(filepath) if stream is None: return None return ( stream["width"], stream["height"], ) def get_fps(filepath): stream = get_video_stream(filepath) if stream is None: return None fps_raw = stream["r_frame_rate"] num, den = fps_raw.split("/") return float(num) / float(den)