class_docstr: FrameVideo is an abstractions for accessing clips based on their start and end
  time for a video where each frame is stored as an image. PathManager is used for
  frame image reading, allowing non-local uri's to be used.
docstr: Args:
      video_frame_paths (List[str]): a list of paths to each frames in the video.
      fps (float): the target fps for the video. This is needed to link the frames
          to a second timestamp in the video.
      multithreaded_io (bool):  controls whether parllelizable io operations are
          performed across multiple threads.
docstr_tok: ["Args",":","video_frame_paths","(","List","[","str","]",")",":","a","list","of","paths","to","each","frames","in","the","video",".","fps","(","float",")",":","the","target","fps","for","the","video",".","This","is","needed","to","link","the","frames","to","a","second","timestamp","in","the","video",".","multithreaded_io","(","bool",")",":","controls","whether","parllelizable","io","operations","are","performed","across","multiple","threads","."]
code: def from_frame_paths(
      cls,
      video_frame_paths: List[str],
      fps: float = 30.0,
      multithreaded_io: bool = False,
  ):
      """
      Args:
          video_frame_paths (List[str]): a list of paths to each frames in the video.
          fps (float): the target fps for the video. This is needed to link the frames
              to a second timestamp in the video.
          multithreaded_io (bool):  controls whether parllelizable io operations are
              performed across multiple threads.
      """
      assert len(video_frame_paths) != 0, "video_frame_paths is empty"
      return cls(
          len(video_frame_paths) / fps,
          fps,
          video_frame_paths=video_frame_paths,
          multithreaded_io=multithreaded_io,
      )
  
imports: from __future__ import annotations
  import logging
  import math
  import os
  import re
  import time
  from typing import Callable, Dict, List, Optional
  import numpy
  import torch
  import torch.utils.data
  from iopath.common.file_io import g_pathmgr
  from pytorchvideo.data.utils import optional_threaded_foreach
  from .utils import thwc_to_cthw
  from .video import Video
label_desc: Use image node_id 3 for calling the FrameVideo obj's underlying member method code with example usage: obj.from_frame_paths(cls, video_frame_paths, fps, multithreaded_io) and returns: cls