( # pylint: disable=too-many-locals,too-many-arguments
        source_path,
        output=None,
        concurrency=DEFAULT_CONCURRENCY,
        src_language=DEFAULT_SRC_LANGUAGE,
        dst_language=DEFAULT_DST_LANGUAGE,
        subtitle_file_format=DEFAULT_SUBTITLE_FORMAT,
        api_key=None,
    )
return dest
Given an input audio/video file, generate subtitles in the specified language and format.
Given an input audio/video file, generate subtitles in the specified language and format.
Given an input audio / video file generate subtitles in the specified language and format .
def generate_subtitles( # pylint: disable=too-many-locals,too-many-arguments
        source_path,
        output=None,
        concurrency=DEFAULT_CONCURRENCY,
        src_language=DEFAULT_SRC_LANGUAGE,
        dst_language=DEFAULT_DST_LANGUAGE,
        subtitle_file_format=DEFAULT_SUBTITLE_FORMAT,
        api_key=None,
    ):
    """
    Given an input audio/video file, generate subtitles in the specified language and format.
    """
    audio_filename, audio_rate = extract_audio(source_path)

    regions = find_speech_regions(audio_filename)

    pool = multiprocessing.Pool(concurrency)
    converter = FLACConverter(source_path=audio_filename)
    recognizer = SpeechRecognizer(language=src_language, rate=audio_rate,
                                  api_key=GOOGLE_SPEECH_API_KEY)

    transcripts = []
    if regions:
        try:
            widgets = ["Converting speech regions to FLAC files: ", Percentage(), ' ', Bar(), ' ',
                       ETA()]
            pbar = ProgressBar(widgets=widgets, maxval=len(regions)).start()
            extracted_regions = []
            for i, extracted_region in enumerate(pool.imap(converter, regions)):
                extracted_regions.append(extracted_region)
                pbar.update(i)
            pbar.finish()

            widgets = ["Performing speech recognition: ", Percentage(), ' ', Bar(), ' ', ETA()]
            pbar = ProgressBar(widgets=widgets, maxval=len(regions)).start()

            for i, transcript in enumerate(pool.imap(recognizer, extracted_regions)):
                transcripts.append(transcript)
                pbar.update(i)
            pbar.finish()

            if src_language.split("-")[0] != dst_language.split("-")[0]:
                if api_key:
                    google_translate_api_key = api_key
                    translator = Translator(dst_language, google_translate_api_key,
                                            dst=dst_language,
                                            src=src_language)
                    prompt = "Translating from {0} to {1}: ".format(src_language, dst_language)
                    widgets = [prompt, Percentage(), ' ', Bar(), ' ', ETA()]
                    pbar = ProgressBar(widgets=widgets, maxval=len(regions)).start()
                    translated_transcripts = []
                    for i, transcript in enumerate(pool.imap(translator, transcripts)):
                        translated_transcripts.append(transcript)
                        pbar.update(i)
                    pbar.finish()
                    transcripts = translated_transcripts
                else:
                    print(
                        "Error: Subtitle translation requires specified Google Translate API key. "
                        "See --help for further information."
                    )
                    return 1

        except KeyboardInterrupt:
            pbar.finish()
            pool.terminate()
            pool.join()
            print("Cancelling transcription")
            raise

    timed_subtitles = [(r, t) for r, t in zip(regions, transcripts) if t]
    formatter = FORMATTERS.get(subtitle_file_format)
    formatted_subtitles = formatter(timed_subtitles)

    dest = output

    if not dest:
        base = os.path.splitext(source_path)[0]
        dest = "{base}.{format}".format(base=base, format=subtitle_file_format)

    with open(dest, 'wb') as output_file:
        output_file.write(formatted_subtitles.encode("utf-8"))

    os.remove(audio_filename)

    return dest
def generate_subtitles ( # pylint: disable=too-many-locals,too-many-arguments source_path , output = None , concurrency = DEFAULT_CONCURRENCY , src_language = DEFAULT_SRC_LANGUAGE , dst_language = DEFAULT_DST_LANGUAGE , subtitle_file_format = DEFAULT_SUBTITLE_FORMAT , api_key = None , ) : audio_filename , audio_rate = extract_audio ( source_path ) regions = find_speech_regions ( audio_filename ) pool = multiprocessing . Pool ( concurrency ) converter = FLACConverter ( source_path = audio_filename ) recognizer = SpeechRecognizer ( language = src_language , rate = audio_rate , api_key = GOOGLE_SPEECH_API_KEY ) transcripts = [ ] if regions : try : widgets = [ "Converting speech regions to FLAC files: " , Percentage ( ) , ' ' , Bar ( ) , ' ' , ETA ( ) ] pbar = ProgressBar ( widgets = widgets , maxval = len ( regions ) ) . start ( ) extracted_regions = [ ] for i , extracted_region in enumerate ( pool . imap ( converter , regions ) ) : extracted_regions . append ( extracted_region ) pbar . update ( i ) pbar . finish ( ) widgets = [ "Performing speech recognition: " , Percentage ( ) , ' ' , Bar ( ) , ' ' , ETA ( ) ] pbar = ProgressBar ( widgets = widgets , maxval = len ( regions ) ) . start ( ) for i , transcript in enumerate ( pool . imap ( recognizer , extracted_regions ) ) : transcripts . append ( transcript ) pbar . update ( i ) pbar . finish ( ) if src_language . split ( "-" ) [ 0 ] != dst_language . split ( "-" ) [ 0 ] : if api_key : google_translate_api_key = api_key translator = Translator ( dst_language , google_translate_api_key , dst = dst_language , src = src_language ) prompt = "Translating from {0} to {1}: " . format ( src_language , dst_language ) widgets = [ prompt , Percentage ( ) , ' ' , Bar ( ) , ' ' , ETA ( ) ] pbar = ProgressBar ( widgets = widgets , maxval = len ( regions ) ) . start ( ) translated_transcripts = [ ] for i , transcript in enumerate ( pool . imap ( translator , transcripts ) ) : translated_transcripts . append ( transcript ) pbar . update ( i ) pbar . finish ( ) transcripts = translated_transcripts else : print ( "Error: Subtitle translation requires specified Google Translate API key. " "See --help for further information." ) return 1 except KeyboardInterrupt : pbar . finish ( ) pool . terminate ( ) pool . join ( ) print ( "Cancelling transcription" ) raise timed_subtitles = [ ( r , t ) for r , t in zip ( regions , transcripts ) if t ] formatter = FORMATTERS . get ( subtitle_file_format ) formatted_subtitles = formatter ( timed_subtitles ) dest = output if not dest : base = os . path . splitext ( source_path ) [ 0 ] dest = "{base}.{format}" . format ( base = base , format = subtitle_file_format ) with open ( dest , 'wb' ) as output_file : output_file . write ( formatted_subtitles . encode ( "utf-8" ) ) os . remove ( audio_filename ) return dest