class_docstr: Decode mp4 file to frames.
  Args:
      filepath: the file path of mp4 file
class_docstr_tok: ["Decode","mp4","file","to","frames",".","Args",":","filepath",":","the","file","path","of","mp4","file"]
docstr: Perform mp4 decode operations.
  return:
      List where each item is a numpy array after decoder.
docstr_tok: ["Perform","mp4","decode","operations",".","return",":","List","where","each","item","is","a","numpy","array","after","decoder","."]
code: def __call__(self, results):
      """
      Perform mp4 decode operations.
      return:
          List where each item is a numpy array after decoder.
      """
      file_path = results["filename"]
      results["format"] = "video"
      results["backend"] = self.backend
  
      if self.backend == "cv2":  # here
          cap = cv2.VideoCapture(file_path)
          videolen = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
  
          sampledFrames = []
          for i in range(videolen):
              ret, frame = cap.read()
              # maybe first frame is empty
              if ret == False:
                  continue
              img = frame[:, :, ::-1]
              sampledFrames.append(img)
          results["frames"] = sampledFrames
          results["frames_len"] = len(sampledFrames)
  
      elif self.backend == "decord":
          container = de.VideoReader(file_path)
          frames_len = len(container)
          results["frames"] = container
          results["frames_len"] = frames_len
      else:
          raise NotImplementedError
      return results
  
imports: import cv2
  import numpy
  from PIL import Image
  import paddle
label_desc: Use image node_id 2 for calling the VideoDecoder obj's underlying member method code with example usage: obj.__call__(results) and returns: results