  
      def get_argument_list(self):
          frames_dir = "\n\tMust Pass in a frames folder (-fr)."
          faces_dir = "\n\tMust Pass in a faces folder (-fc)."
          frames_or_faces_dir = ("\n\tMust Pass in either a frames folder"
                                 "\n\tOR a faces folder (-fr or -fc).")
          frames_and_faces_dir = ("\n\tMust Pass in a frames folder AND a faces"
                                  "\n\tfolder (-fr and -fc).")
          output_opts = "\n\tUse the output option (-o) to process\n\tresults."
          align_eyes = "\n\tCan optionally use the align-eyes switch (-ae)."
          argument_list = list()
          argument_list.append({
 
</s> remove         output_opts = "\n\tUse the output option (-o) to process\n\tresults."
 </s> add         output_opts = "\n\tUse the output option (-o) to process results." </s> remove         frames_dir = "\n\tMust Pass in a frames folder (-fr)."
 </s> add         frames_dir = "\n\tMust Pass in a frames folder/source video file (-fr)." </s> remove     def check_folder_exists(self):
        """ makes sure that the faces folder exists """
 </s> add     @property
    def count(self):
        """ Number of faces or frames """
        if self.vid_cap:
            retval = int(self.vid_cap.get(cv2.CAP_PROP_FRAME_COUNT))  # pylint: disable=no-member
        else:
            retval = len(self.file_list_sorted)
        return retval

    def check_input_folder(self):
        """ makes sure that the frames or faces folder exists
            If frames folder contains a video file return video capture object """ </s> remove                     "\n'extract-large' - Extract all faces that have not been"
                    "\n\tupscaled. Useful for excluding low-res images from a"
                    "\n\ttraining set" + frames_and_faces_dir + align_eyes +
                    "\n'manual': Manually view and edit landmarks." +
                    frames_dir + align_eyes +
                    "\n'merge': Merge multiple alignment files into one."
                    "\n\tSpecify the main alignments file with the -a flag"
                    "\n\tand the file to be merged with the -a2 flag."
                    "\n'missing-alignments': Identify frames that do not"
                    "\n\texist in the alignments file." + output_opts +
                    frames_dir +
                    "\n'missing-frames': Identify frames in the alignments"
                    "\n\tfile that do not appear within the frames"
                    "\n\tfolder." + output_opts + frames_dir +
                    "\n'legacy': This updates legacy alignments to the latest"
                    "\n\tformat by adding frame dimensions, rotating the"
                    "\n\tlandmarks and bounding boxes and adding face_hashes" +
                    frames_and_faces_dir +
                    "\n'leftover-faces': Identify faces in the faces"
                    "\n\tfolder that do not exist in the alignments file."
                    + output_opts + faces_dir +
                    "\n'multi-faces': Identify where multiple faces exist"
                    "\n\twithin the alignments file." + output_opts +
                    frames_or_faces_dir +
                    "\n'no-faces': Identify frames that exist within the"
                    "\n\talignment file but no faces were detected." +
                    output_opts + frames_dir +
                    "\n'reformat': Save a copy of alignments file in a"
                    "\n\tdifferent format. Specify a format with"
                    "\n\tthe -fmt option."
                    "\n\tAlignments can be converted from"
                    "\n\tDeepFaceLab by specifing:"
 </s> add                     "\n'extract-large' - Extract all faces that have not been upscaled. Useful"
                    "\n\tfor excluding low-res images from a training set." +
                    frames_and_faces_dir + align_eyes +
                    "\n'manual': Manually view and edit landmarks." + frames_dir + align_eyes +
                    "\n'merge': Merge multiple alignment files into one. Specify the main"
                    "\n\talignments file with the -a flag and the file to be merged with the"
                    "\n\t-a2 flag."
                    "\n'missing-alignments': Identify frames that do not exist in the alignments"
                    "\n\tfile." + output_opts + frames_dir +
                    "\n'missing-frames': Identify frames in the alignments file that do no "
                    "\n\tappear within the frames folder/video." + output_opts + frames_dir +
                    "\n'legacy': This updates legacy alignments to the latest format by adding"
                    "\n\tframe dimensions, rotating the landmarks and bounding boxes and adding"
                    "\n\tface_hashes" + frames_and_faces_dir +
                    "\n'leftover-faces': Identify faces in the faces folder that do not exist in"
                    "\n\tthe alignments file." + output_opts + faces_dir +
                    "\n'multi-faces': Identify where multiple faces exist within the alignments"
                    "\n\tfile." + output_opts + frames_or_faces_dir +
                    "\n'no-faces': Identify frames that exist within the alignment file but no"
                    "\n\tfaces were detected." + output_opts + frames_dir +
                    "\n'reformat': Save a copy of alignments file in a different format. Specify"
                    "\n\ta format with the -fmt option."
                    "\n\tAlignments can be converted from DeepFaceLab by specifing:" </s> remove     def get_input_images(self):
        """ Return the list of images that are to be processed """
 </s> add     @property
    def images_found(self):
        """ Number of images or frames """
        if self.is_video:
            cap = cv2.VideoCapture(self.args.input_dir)  # pylint: disable=no-member
            retval = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))  # pylint: disable=no-member
            cap.release()
        else:
            retval = len(self.input_images)
        return retval

    def check_input_folder(self):
        """ Check whether the input is a folder or video """
        frames_or_faces_dir = ("\n\tMust Pass in either a frames folder/source video file OR a"
                               "\n\tfaces folder (-fr or -fc).")
        frames_and_faces_dir = ("\n\tMust Pass in a frames folder/source video file AND a faces "
  
      def get_argument_list(self):
          frames_dir = "\n\tMust Pass in a frames folder (-fr)."
          faces_dir = "\n\tMust Pass in a faces folder (-fc)."
        frames_or_faces_dir = ("\n\tMust Pass in either a frames folder/source video file OR a"
                               "\n\tfaces folder (-fr or -fc).")
        frames_and_faces_dir = ("\n\tMust Pass in a frames folder/source video file AND a faces "
        frames_or_faces_dir = ("\n\tMust Pass in either a frames folder/source video file OR a"
                               "\n\tfaces folder (-fr or -fc).")
        frames_and_faces_dir = ("\n\tMust Pass in a frames folder/source video file AND a faces "
        frames_or_faces_dir = ("\n\tMust Pass in either a frames folder/source video file OR a"
                               "\n\tfaces folder (-fr or -fc).")
        frames_and_faces_dir = ("\n\tMust Pass in a frames folder/source video file AND a faces "
                                  "\n\tfolder (-fr and -fc).")
          output_opts = "\n\tUse the output option (-o) to process\n\tresults."
          align_eyes = "\n\tCan optionally use the align-eyes switch (-ae)."
          argument_list = list()
          argument_list.append({
keep keep keep keep replace replace replace 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/cli.py