                        "frame_extension": file_extension}
              logger.trace(retval)
              yield retval
  
      def load_items(self):
          """ Load the frame info into dictionary """
          frames = dict()
          for frame in self.file_list_sorted:
              frames[frame["frame_fullname"]] = (frame["frame_name"],
                                                 frame["frame_extension"])
 
</s> remove         src = os.path.join(self.folder, filename)
        logger.trace("Loading image: '%s'", src)
        image = cv2.imread(src)  # pylint: disable=no-member
 </s> add         if self.vid_cap:
            image = self.load_video_frame(filename)
        else:
            src = os.path.join(self.folder, filename)
            logger.trace("Loading image: '%s'", src)
            image = cv2.imread(src)  # pylint: disable=no-member
        return image

    def load_video_frame(self, filename):
        """ Load a requested frame from video """
        frame = os.path.splitext(filename)[0]
        logger.trace("Loading video frame: '%s'", frame)
        frame_no = int(frame[frame.rfind("_") + 1:])
        self.vid_cap.set(cv2.CAP_PROP_POS_FRAMES, frame_no)  # pylint: disable=no-member
        _, image = self.vid_cap.read() </s> remove         image = self.images.load_one_image(filename)
 </s> add  </s> remove     def detect_faces(self, filename):
 </s> add     @staticmethod
    def detect_faces(filename, image):
    def process_video(self):
        """Dummy in frames for video """
        logger.info("Loading video frames from %s", self.folder)
        vidname = os.path.splitext(os.path.basename(self.folder))[0]
        for i in range(self.count):
            idx = i + 1
            # Keep filename format for outputted face
            filename = "{}_{:06d}".format(vidname, idx)
            retval = {"frame_fullname": "{}.png".format(filename),
                      "frame_name": filename,
                      "frame_extension": ".png"}
            logger.trace(retval)
            yield retval

                        "frame_extension": file_extension}
              logger.trace(retval)
              yield retval
  
    def process_video(self):
        """Dummy in frames for video """
        logger.info("Loading video frames from %s", self.folder)
        vidname = os.path.splitext(os.path.basename(self.folder))[0]
        for i in range(self.count):
            idx = i + 1
            # Keep filename format for outputted face
            filename = "{}_{:06d}".format(vidname, idx)
            retval = {"frame_fullname": "{}.png".format(filename),
                      "frame_name": filename,
                      "frame_extension": ".png"}
            logger.trace(retval)
            yield retval

      def load_items(self):
          """ Load the frame info into dictionary """
          frames = dict()
          for frame in self.file_list_sorted:
              frames[frame["frame_fullname"]] = (frame["frame_name"],
                                                 frame["frame_extension"])
keep keep keep add keep keep keep keep keep keep
 Add ability to extract from and convert from a video file (#559)

* Add ability to extract from and convert from a video file

* Update cli helptext. Add filebrowser button for GUI input

* Add video support to Alignments Tool 
tools/lib_alignments/media.py