code: def _frame_number_to_filepaths(
      video_id: str,
      video_frames: Dict[str, VideoFrameInfo],
      video_infos: Dict[str, VideoInfo],
  ) -> Optional[str]:
      video_info = video_infos[video_id]
      video_frame_info = video_frames[video_info.video_id]
  
      frame_filepaths = []
      num_frames = (
          video_frame_info.max_frame_number
          - video_frame_info.min_frame_number
          + 1
      )
      for frame_index in range(num_frames):
          frame_number = frame_index + video_frame_info.min_frame_number
          if (
              frame_number < video_frame_info.min_frame_number
              or frame_number > video_frame_info.max_frame_number
          ):
              return None
  
          frame_path_index = str(frame_number)
          frame_prefix = video_frame_info.frame_file_stem
          num_zero_pad = (
              video_frame_info.frame_string_length
              - len(frame_path_index)
              - len(frame_prefix)
          )
          zero_padding = "0" * num_zero_pad
          frame_component = (
              f"{frame_prefix}{zero_padding}{frame_path_index}"
              f".{video_frame_info.file_extension}"
          )
          frame_filepaths.append(
              f"{video_frame_info.location}/{frame_component}"
          )
      return frame_filepaths
  
imports: import datetime
  import os
  from dataclasses import dataclass
  from enum import Enum
  from typing import Dict, Optional, Union
  from pytorchvideo.data.encoded_video import EncodedVideo
  from pytorchvideo.data.frame_video import FrameVideo
  from pytorchvideo.data.utils import DataclassFieldCaster, load_dataclass_dict_from_csv, save_dataclass_objs_to_headered_csv
  from pytorchvideo.data.video import Video
label_desc: Use image node_id 4 for calling the VideoDataset obj's underlying member method code with example usage: obj._frame_number_to_filepaths(video_id, video_frames, video_infos) and returns: frame_filepaths, None