code: def generate_gt_vis_json(
      data_sample: DataSample, cache_suffix="", overwrite=False
  ):
      gt_file = get_vis_gt_location(data_sample, cache_suffix)
      if os.path.isfile(gt_file) and not overwrite:
          return
      #### Generate GT Track json ####
      os.makedirs(os.path.dirname(gt_file), exist_ok=True)
  
      vis_video_file = get_vis_video_location(data_sample)
      vis_vid = VideoFrameReader(vis_video_file)
      sample_dict = data_sample.to_dict(include_id=True)
      sample_dict[FieldNames.METADATA][FieldNames.FPS] = vis_vid.fps
      save_json(sample_dict, gt_file, indent=0)
  
      return gt_file
  
file_path: gluon-cv/gluoncv/torch/data/gluoncv_motion_dataset/dataset_pre_processor.py
imports: import os
  import random
  import logging
  import ray
  from pathlib import Path
  from tqdm import tqdm
  from .io.video_io import VideoFrameReader, write_img_files_to_vid_ffmpeg, resize_and_write_video_ffmpeg, convert_vid_ffmpeg
  from .utils.serialization_utils import save_json
  from .dataset import GluonCVMotionDataset, DataSample, FieldNames, get_resized_video_location, get_vis_gt_location, get_vis_thumb_location, get_vis_video_location
label_desc: Use image node_id 4 for calling a global function with example usage: generate_gt_vis_json(data_sample, cache_suffix, overwrite) and returns: gt_file