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 __init__(
      self,
      video_paths: List[str],
      clip_length_in_frames: int = 16,
      frames_between_clips: int = 1,
      frame_rate: Optional[int] = None,
      _precomputed_metadata: Optional[Dict[str, Any]] = None,
      num_workers: int = 0,
      _video_width: int = 0,
      _video_height: int = 0,
      _video_min_dimension: int = 0,
      _video_max_dimension: int = 0,
      _audio_samples: int = 0,
      _audio_channels: int = 0,
      output_format: str = "THWC",
  ) -> None:
      self.video_paths = video_paths
      self.num_workers = num_workers
  
      # these options are not valid for pyav backend
      self._video_width = _video_width
      self._video_height = _video_height
      self._video_min_dimension = _video_min_dimension
      self._video_max_dimension = _video_max_dimension
      self._audio_samples = _audio_samples
      self._audio_channels = _audio_channels
      self.output_format = output_format.upper()
      if self.output_format not in ("THWC", "TCHW"):
          raise ValueError(
              f"output_format should be either 'THWC' or 'TCHW', got {output_format}."
          )
  
      if _precomputed_metadata is None:
          self._compute_frame_pts()
      else:
          self._init_from_metadata(_precomputed_metadata)
      self.compute_clips(
          clip_length_in_frames, frames_between_clips, frame_rate
      )
  
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 1 to create a new VideoClips object  with example: obj = VideoClips(video_paths, clip_length_in_frames, frames_between_clips, frame_rate, _precomputed_metadata, num_workers, _video_width, _video_height, _video_min_dimension, _video_max_dimension, _audio_samples, _audio_channels, output_format)