• 1 Post
  • 15 Comments
Joined 3 years ago
cake
Cake day: January 21st, 2022

help-circle




  • you have a really simple use-case, so you probably don’t need and argument parsing lib, which I would normally recommend…

    You can just iterate through the arguments array and categorize them by type, then add them to the appropriate collection to be handled later.

    Something like this:

    ids = []
    urls = []
    csvs = []
    for arg in sys.argv:
      if arg.startswith('http'):
        urls.push(arg)
      else if arg.endswith('.csv'):
        csvs.push(arg)
      else:
        ids.push(arg)
    





  • def convert_video_progress_bar(self, manager, cmd):
        name = self.path.rsplit(os.path.sep, 1)[-1]
        # Run ffmpeg
        proc = expect.spawn(cmd, encoding='utf-8')
        pbar = None
        try:
            # extract the total number of frames 
            proc.expect(pattern_duration)
            total = sum(map(lambda x: float(
                x[1])*60**x[0], enumerate(reversed(proc.match.groups()[0].strip().split(':')))))
            cont = 0
            # keeps track of the progress to show it to the user
            pbar = manager.counter(
                total=100,
                desc=name,
                unit='%',
                bar_format=BAR_FMT,
                counter_format=COUNTER_FMT,
                leave=False
            )
            # infinite loop
            while True:
                # look for a progress indicator, and extract the frame count
                proc.expect(pattern_progress)
                progress = sum(map(lambda x: float(
                    x[1])*60**x[0], enumerate(reversed(proc.match.groups()[0].strip().split(':')))))
                # compute the percentage complete
                percent = progress/total*100
                # update the counter, to show the user
                pbar.update(percent-cont)
                cont = percent
        # because of the infinite loop, 
        # `proc.expect` will throw an error once ffmpeg has completed.
        # catch that error, and clean things up
        except expect.EOF:
            traceback.print_exc()
        finally:
            if pbar is not None:
                pbar.close()
        proc.expect(expect.EOF)
        res = proc.before
        res += proc.read()
        # check to see if ffmpeg threw and error
        exitstatus = proc.wait()
        if exitstatus:
            raise ffmpeg.Error('ffmpeg', '', res)