{
  "input_filename": "source.mp4",
  "output_video": null,
  "result_json": "result.json",
  "metadata": {
    "duration_seconds": 13.720534,
    "width": 1110,
    "height": 720,
    "fps": 29.955028946465465,
    "frame_count": 411,
    "container": "mov,mp4,m4a,3gp,3g2,mj2",
    "video_codec": "h264",
    "audio_codec": "aac",
    "file_size": 4845647
  },
  "analysis_options": {
    "ball_tracking": true,
    "court_detection": true,
    "player_tracking": true,
    "pose_tracking": true,
    "bounce_detection": true,
    "scene_cut_detection": true,
    "statistics": true,
    "point_analysis": false
  },
  "visualization_options": {},
  "analysis_artifact": "analysis-artifact.json",
  "shots": [
    {
      "frame": 176,
      "player_role": "bottom_player",
      "ball_speed_kmh": null,
      "reason": "pre_bounce_serve_hit"
    },
    {
      "frame": 209,
      "player_role": "top_player",
      "ball_speed_kmh": 8.342470406190527,
      "reason": "sustained_ball_trajectory_change"
    },
    {
      "frame": 346,
      "player_role": "bottom_player",
      "ball_speed_kmh": 89.24257586504022,
      "reason": "sustained_ball_trajectory_change_alternation_corrected"
    }
  ],
  "bounces": [
    {
      "frame": 183,
      "phase": "serve",
      "in_out": "out",
      "court_region": null,
      "projected_x": 853.9468994140625,
      "projected_y": 1077.0521240234375,
      "rule": "serve uses the opposite service box boundaries"
    },
    {
      "frame": 238,
      "phase": "game",
      "in_out": "in",
      "court_region": "singles_court",
      "projected_x": 1079.7667236328125,
      "projected_y": 2243.710693359375,
      "rule": "game uses full singles court boundaries"
    },
    {
      "frame": 258,
      "phase": "game",
      "in_out": "in",
      "court_region": "singles_court",
      "projected_x": 1227.0458984375,
      "projected_y": 1970.4837646484375,
      "rule": "game uses full singles court boundaries"
    },
    {
      "frame": 283,
      "phase": "game",
      "in_out": "in",
      "court_region": "singles_court",
      "projected_x": 1061.9552001953125,
      "projected_y": 758.660400390625,
      "rule": "game uses full singles court boundaries"
    },
    {
      "frame": 366,
      "phase": "game",
      "in_out": "in",
      "court_region": "singles_court",
      "projected_x": 647.3751220703125,
      "projected_y": 1447.702392578125,
      "rule": "game uses full singles court boundaries"
    }
  ],
  "player_statistics": {
    "top_player": {
      "shots": 1,
      "total_distance_m": 27.013264017844385,
      "average_speed_kmh": 7.22136760873068,
      "max_speed_kmh": 44.00885152862503
    },
    "bottom_player": {
      "shots": 2,
      "total_distance_m": 12.628287448799664,
      "average_speed_kmh": 4.959472888983142,
      "max_speed_kmh": 43.21359196125997
    }
  },
  "summary": {
    "frames_processed": 411,
    "scene_count": 1,
    "shot_count": 3,
    "bounce_count": 5,
    "average_ball_speed_kmh": 103.4007066696386,
    "max_ball_speed_kmh": 277.10524441430584
  },
  "scene_cuts": [],
  "points": [],
  "plots": [],
  "warnings": [
    "Speeds, event classification, and in/out calls are experimental estimates."
  ],
  "schema_version": "1.0",
  "pipeline_version": "0.1.0",
  "estimates": "experimental"
}