def processFile(inputfile, mp, info=None, relativePath=None, silent=False, tag=True, tmdbid=None, tvdbid=None, imdbid=None, season=None, episode=None, original=None, processedList=None, processedArchive=None):
    if checkAlreadyProcessed(inputfile, processedList):
        log.debug("%s is already processed and will be skipped based on archive %s." % (inputfile, processedArchive))
        return

    # Process
    info = info or mp.isValidSource(inputfile)
    if not info:
        log.debug("Invalid file %s." % inputfile)
        return

    language = mp.settings.taglanguage or None
    tagdata = getInfo(inputfile, mp.settings, silent=silent, tag=tag, tmdbid=tmdbid, tvdbid=tvdbid, imdbid=imdbid, season=season, episode=episode, language=language, original=original)

    if not tagdata:
        log.info("Processing file %s" % inputfile)
    elif tagdata.mediatype == MediaType.Movie:
        log.info("Processing %s" % (tagdata.title))
    elif tagdata.mediatype == MediaType.TV:
        log.info("Processing %s Season %02d Episode %02d - %s" % (tagdata.showname, int(tagdata.season), int(tagdata.episode), tagdata.title))

    output = mp.process(inputfile, True, info=info, original=original, tagdata=tagdata)
    if output:
        if not language:
            language = mp.getDefaultAudioLanguage(output["options"]) or None
            if language and tagdata:
                tagdata = Metadata(tagdata.mediatype, tmdbid=tagdata.tmdbid, imdbid=tagdata.imdbid, tvdbid=tagdata.tvdbid, season=tagdata.season, episode=tagdata.episode, original=original, language=language, logger=log)
        log.debug("Tag language setting is %s, using language %s for tagging." % (mp.settings.taglanguage or None, language))
        tagfailed = False
        if tagdata:
            try:
                tagdata.writeTags(output['output'], mp.converter, mp.settings.artwork, mp.settings.thumbnail, width=output['x'], height=output['y'], streaming=output['rsi'])
            except KeyboardInterrupt:
                raise
            except:
                log.exception("There was an error tagging the file")
                tagfailed = True
        if mp.settings.relocate_moov and not tagfailed:
            mp.QTFS(output['output'])
        output_files = mp.replicate(output['output'], relativePath=relativePath)
        print(json.dumps(output, indent=4))
        for sub in output['external_subs']:
            output_files.extend(mp.replicate(sub, relativePath=relativePath))
        for file in output_files:
            mp.setPermissions(file)
        if mp.settings.postprocess:
            postprocessor = PostProcessor(output_files, wait=mp.settings.waitpostprocess)
            if tagdata:
                if tagdata.mediatype == MediaType.Movie:
                    postprocessor.setMovie(tagdata.tmdbid)
                elif tagdata.mediatype == MediaType.TV:
                    postprocessor.setTV(tagdata.tmdbid, tagdata.season, tagdata.episode)
            postprocessor.run_scripts()
        addtoProcessedArchive(output_files + [output['input']] if not output['input_deleted'] else output_files, processedList, processedArchive)
    else:
        log.error("There was an error processing file %s, no output data received" % inputfile)
def processFile(inputfile,
                mp,
                info=None,
                relativePath=None,
                silent=False,
                tag=True,
                tmdbid=None,
                tvdbid=None,
                imdbid=None,
                season=None,
                episode=None,
                original=None):
    # Process
    info = info or mp.isValidSource(inputfile)
    if not info:
        log.debug("Invalid file %s." % inputfile)
        return

    language = settings.taglanguage or None
    tagdata = getInfo(inputfile,
                      silent,
                      tag=tag,
                      tmdbid=tmdbid,
                      tvdbid=tvdbid,
                      imdbid=imdbid,
                      season=season,
                      episode=episode,
                      language=language,
                      original=original)

    if not tagdata:
        log.info("Processing file %s" % inputfile)
    elif tagdata.mediatype == MediaType.Movie:
        log.info("Processing %s" % (tagdata.title))
    elif tagdata.mediatype == MediaType.TV:
        log.info("Processing %s Season %02d Episode %02d - %s" %
                 (tagdata.showname, int(tagdata.season), int(
                     tagdata.episode), tagdata.title))

    output = mp.process(inputfile,
                        True,
                        info=info,
                        original=original,
                        tagdata=tagdata)
    if output:
        if not language:
            language = mp.getDefaultAudioLanguage(output["options"]) or None
            if language and tagdata:
                tagdata = Metadata(tagdata.mediatype,
                                   tmdbid=tagdata.tmdbid,
                                   imdbid=tagdata.imdbid,
                                   tvdbid=tagdata.tvdbid,
                                   season=tagdata.season,
                                   episode=tagdata.episode,
                                   original=original,
                                   language=language,
                                   logger=log)
        log.debug(
            "Tag language setting is %s, using language %s for tagging." %
            (settings.taglanguage or None, language))
        tagfailed = False
        if tagdata:
            try:
                tagdata.writeTags(output['output'],
                                  mp.converter,
                                  settings.artwork,
                                  settings.thumbnail,
                                  width=output['x'],
                                  height=output['y'])
            except:
                log.exception("There was an error tagging the file")
                tagfailed = True
        if settings.relocate_moov and not tagfailed:
            mp.QTFS(output['output'])
        output_files = mp.replicate(output['output'],
                                    relativePath=relativePath)
        for file in output_files:
            mp.setPermissions(file)
        if settings.postprocess:
            postprocessor = PostProcessor(output_files,
                                          wait=settings.waitpostprocess)
            if tagdata:
                if tagdata.mediatype == MediaType.Movie:
                    postprocessor.setMovie(tagdata.tmdbid)
                elif tagdata.mediatype == MediaType.TV:
                    postprocessor.setTV(tagdata.tmdbid, tagdata.season,
                                        tagdata.episode)
            postprocessor.run_scripts()
    else:
        log.error(
            "There was an error processing file %s, no output data received" %
            inputfile)