def METHOD_NAME(args: typing.Optional[typing.List[str]] = None) -> None:
    """Execute main function for entry point."""
    argument_parser = build_argument_parser()
    args = args or sys.argv[1:]
    options = argument_parser.parse_args(args)
    if options.debug:
        logger.setLevel(logging.DEBUG)
        logging.getLogger('enzyme').setLevel(logging.INFO)
    else:
        logger.setLevel(logging.WARNING)
    paths = recurse_paths(options.videopath)
    if not paths:
        if options.version:
            console.info(api.debug_info())
        else:
            argument_parser.print_help()
        return
    report: typing.MutableMapping[str, str] = {}
    for i, video_path in enumerate(paths):
        try:
            context = {k: v for k, v in vars(options).items() if v is not None}
            if options.report:
                context['report'] = report
            else:
                del context['report']
            knowit(video_path, options, context)
        except ProviderError:
            logger.exception('Error when processing video')
        except OSError:
            logger.exception('OS error when processing video')
        except UnicodeError:
            logger.exception('Character encoding error when processing video')
        except api.KnowitException as e:
            logger.error(e)
        if options.report and i % 20 == 19 and report:
            console.info('Unknown values so far:')
            console.info(dumps(report, options, vars(options)))
    if options.report:
        if report:
            console.info('Knowit %s found unknown values:', __version__)
            console.info(dumps(report, options, vars(options)))
            console.info('Please report them at %s', __url__)
        else:
            console.info('Knowit %s knows everything. :-)', __version__)