class_docstr: Given a list of video files, computes all consecutive subvideos of size
  `clip_length_in_frames`, where the distance between each subvideo in the
  same video is defined by `frames_between_clips`.
  If `frame_rate` is specified, it will also resample all the videos to have
  the same frame rate, and the clips will refer to this frame rate.
  
  Creating this instance the first time is time-consuming, as it needs to
  decode all the videos in `video_paths`. It is recommended that you
  cache the results after instantiation of the class.
  
  Recreating the clips for different clip lengths is fast, and can be done
  with the `compute_clips` method.
  
  Args:
      video_paths (List[str]): paths to the video files
      clip_length_in_frames (int): size of a clip in number of frames
      frames_between_clips (int): step (in frames) between each clip
      frame_rate (int, optional): if specified, it will resample the video
          so that it has `frame_rate`, and then the clips will be defined
          on the resampled video
      num_workers (int): how many subprocesses to use for data loading.
          0 means that the data will be loaded in the main process. (default: 0)
      output_format (str): The format of the output video tensors. Can be either "THWC" (default) or "TCHW".
code: def __getstate__(self) -> Dict[str, Any]:
      video_pts_sizes = [len(v) for v in self.video_pts]
      # To be back-compatible, we convert data to dtype torch.long as needed
      # because for empty list, in legacy implementation, torch.as_tensor will
      # use torch.float as default dtype. This happens when decoding fails and
      # no pts is returned in the list.
      video_pts = [x.to(torch.int64) for x in self.video_pts]
      # video_pts can be an empty list if no frames have been decoded
      if video_pts:
          video_pts = torch.cat(video_pts)  # type: ignore[assignment]
          # avoid bug in https://github.com/pytorch/pytorch/issues/32351
          # TODO: Revert it once the bug is fixed.
          video_pts = video_pts.numpy()  # type: ignore[attr-defined]
  
      # make a copy of the fields of self
      d = self.__dict__.copy()
      d["video_pts_sizes"] = video_pts_sizes
      d["video_pts"] = video_pts
      # delete the following attributes to reduce the size of dictionary. They
      # will be re-computed in "__setstate__()"
      del d["clips"]
      del d["resampling_idxs"]
      del d["cumulative_sizes"]
  
      # for backwards-compatibility
      d["_version"] = 2
      return d
  
imports: import bisect
  import math
  import warnings
  from fractions import Fraction
  from typing import Any, Callable, cast, Dict, List, Optional, Tuple, TypeVar, Union
  import torch
  from torchvision.io import _probe_video_from_file, _read_video_from_file, read_video, read_video_timestamps
  from .utils import tqdm
label_desc: Use image node_id 14 for calling the VideoClips obj's underlying member method code with example usage: obj.__getstate__() and returns: d