def validate(args): """ Check that the CLI arguments passed to autosub are valid. """ if args.format not in FORMATTERS: print("Subtitle format not supported. " "Run with --list-formats to see all supported formats.") return False if args.src_language not in LANGUAGE_CODES.keys(): print("Source language not supported. " "Run with --list-languages to see all supported languages.") return False if args.dst_language not in LANGUAGE_CODES.keys(): print("Destination language not supported. " "Run with --list-languages to see all supported languages.") return False if not args.source_path: print("Error: You need to specify a source path.") return False source_file_name, source_file_extension = os.path.splitext( args.source_path) if os.path.isfile(source_file_name + '.srt'): print("Error: Subtitle is existing") return False return True
def validate(args): """ Check that the CLI arguments passed to autosub are valid. """ if args.format not in FORMATTERS: print( "Subtitle format not supported. " "Run with --list-formats to see all supported formats." ) return False if args.src_language not in list(LANGUAGE_CODES.keys()): print( "Source language not supported. " "Run with --list-languages to see all supported languages." ) return False if args.dst_language not in list(LANGUAGE_CODES.keys()): print( "Destination language not supported. " "Run with --list-languages to see all supported languages." ) return False if not args.source_path: print("Error: You need to specify a source path.") return False return True
def start(args): if args.format not in FORMATTERS.keys(): print("Subtitle format not supported. " "Run with --list-formats to see all supported formats.") return 1 if args.src_language not in LANGUAGE_CODES.keys(): print("Source language not supported. " "Run with --list-languages to see all supported languages.") return 1 if args.dst_language not in LANGUAGE_CODES.keys(): print("Destination language not supported. " "Run with --list-languages to see all supported languages.") return 1 if not args.source_path: print("Error: You need to specify a source path.") return 1 try: subtitle_file_path = generate_subtitles( source_path=args.source_path, concurrency=args.concurrency, src_language=args.src_language, dst_language=args.dst_language, api_key=args.api_key, subtitle_file_format=args.format, output=args.output, ) print("Subtitles file created at {}".format(subtitle_file_path)) except KeyboardInterrupt: return 1 return 0
def main(): parser = argparse.ArgumentParser() parser.add_argument( 'source_path', help="Path to the video or audio file to subtitle", nargs='?') parser.add_argument( '-C', '--concurrency', help="Number of concurrent API requests to make", type=int, default=10) parser.add_argument( '-o', '--output', help= "Output path for subtitles (by default, subtitles are saved in \ the same directory and name as the source path)" ) parser.add_argument('-F', '--format', help="Destination subtitle format", default="srt") parser.add_argument('-S', '--src-language', help="Language spoken in source file", default="en") parser.add_argument('-D', '--dst-language', help="Desired language for the subtitles", default="en") parser.add_argument( '-K', '--api-key', help= "The Google Translate API key to be used. (Required for subtitle translation)" ) parser.add_argument('--list-formats', help="List all available subtitle formats", action='store_true') parser.add_argument( '--list-languages', help="List all available source/destination languages", action='store_true') args = parser.parse_args() print args if (os.name == "posix"): args.source_path = str(self.filename) else: args.source_path = (str(self.filename)).replace("/", "\\") pas = (args.source_path).replace("/", "\\") args.source_path = pas print " Printing pas >>>", pas print args path = args.source_path[:-3] srt_path = path + "srt" if args.list_formats: print("List of formats:") for subtitle_format in FORMATTERS.keys(): print("{format}".format(format=subtitle_format)) return 0 if args.list_languages: print("List of all languages:") for code, language in sorted(LANGUAGE_CODES.items()): print("{code}\t{language}".format(code=code, language=languages)) return 0 if args.format not in FORMATTERS.keys(): print( "Subtitle format not supported. Run with --list-formats to see all supported formats." ) return 1 if args.src_language not in LANGUAGE_CODES.keys(): print( "Source language not supported. Run with --list-languages to see all supported languages." ) return 1 if args.dst_language not in LANGUAGE_CODES.keys(): print( "Destination language not supported. Run with --list-languages to see all supported languages." ) return 1 if not args.source_path: print("Error: You need to specify a source path.") return 1 audio_filename, audio_rate = extract_audio(args.source_path) regions = find_speech_regions(audio_filename) pool = ProcessingPool(args.concurrency) converter = FLACConverter(source_path=audio_filename) recognizer = SpeechRecognizer(language=args.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) self.progress1.setValue(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) self.progress2.setValue(i) pbar.finish() QMessageBox.about(self, "Subtitles created", "Created at " + srt_path) if not is_same_language(args.src_language, args.dst_language): if args.api_key: google_translate_api_key = args.api_key translator = Translator(args.dst_language, google_translate_api_key, dst=args.dst_language, src=args.src_language) prompt = "Translating from {0} to {1}: ".format( args.src_language, args.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) self.progress2.setValue(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" return 1 timed_subtitles = [(r, t) for r, t in zip(regions, transcripts) if t] formatter = FORMATTERS.get(args.format) formatted_subtitles = formatter(timed_subtitles) dest = args.output if not dest: base, ext = os.path.splitext(args.source_path) dest = "{base}.{format}".format(base=base, format=args.format) with open(dest, 'wb') as f: f.write(formatted_subtitles.encode("utf-8")) print "Subtitles file created at {}".format(dest) os.remove(audio_filename) return 0
def main(): parser = argparse.ArgumentParser() parser.add_argument('source_path', help="Path to the video or audio file to subtitle", nargs='?') parser.add_argument('-C', '--concurrency', help="Number of concurrent API requests to make", type=int, default=DEFAULT_CONCURRENCY) parser.add_argument( '-o', '--output', help="Output path for subtitles (by default, subtitles are saved in \ the same directory and name as the source path)") parser.add_argument('-F', '--format', help="Destination subtitle format", default=DEFAULT_SUBTITLE_FORMAT) parser.add_argument('-S', '--src-language', help="Language spoken in source file", default=DEFAULT_SRC_LANGUAGE) parser.add_argument('-D', '--dst-language', help="Desired language for the subtitles", default=DEFAULT_DST_LANGUAGE) parser.add_argument( '-K', '--api-key', help= "The Google Translate API key to be used. (Required for subtitle translation)" ) parser.add_argument('--list-formats', help="List all available subtitle formats", action='store_true') parser.add_argument('--list-languages', help="List all available source/destination languages", action='store_true') args = parser.parse_args() if args.list_formats: print("List of formats:") for subtitle_format in FORMATTERS.keys(): print("{format}".format(format=subtitle_format)) return 0 if args.list_languages: print("List of all languages:") for code, language in sorted(LANGUAGE_CODES.items()): print("{code}\t{language}".format(code=code, language=language)) return 0 if args.format not in FORMATTERS.keys(): print("Subtitle format not supported. " "Run with --list-formats to see all supported formats.") return 1 if args.src_language not in LANGUAGE_CODES.keys(): print("Source language not supported. " "Run with --list-languages to see all supported languages.") return 1 if "," in args.dst_language: dst_language_list = args.dst_language.split(",") unsupport_lang_list = [ x for x in dst_language_list if x not in LANGUAGE_CODES.keys() ] if len(unsupport_lang_list) > 0: print("Destination language %s not supported. " "Run with --list-languages to see all supported languages." ) % unsupport_lang_list return 1 else: dst_language_list = [args.dst_language] if args.dst_language not in LANGUAGE_CODES.keys(): print("Destination language not supported. " "Run with --list-languages to see all supported languages.") return 1 if not args.source_path: print("Error: You need to specify a source path.") return 1 try: subtitle_file_path = generate_subtitles( source_path=args.source_path, concurrency=args.concurrency, src_language=args.src_language, dst_language_list=dst_language_list, api_key=args.api_key, subtitle_file_format=args.format, output=args.output, ) print("Subtitles file created at {}".format(subtitle_file_path)) except KeyboardInterrupt: return 1 return 0
def main(): parser = argparse.ArgumentParser() parser.add_argument('source_path', help="Path to the video or audio file to subtitle", nargs='?') parser.add_argument('-C', '--concurrency', help="Number of concurrent API requests to make", type=int, default=DEFAULT_CONCURRENCY) parser.add_argument( '-o', '--output', help="Output path for subtitles (by default, subtitles are saved in \ the same directory and name as the source path)") parser.add_argument('-F', '--format', help="Destination subtitle format", default=DEFAULT_SUBTITLE_FORMAT) parser.add_argument('-S', '--src-language', help="Language spoken in source file", default=DEFAULT_SRC_LANGUAGE) parser.add_argument('-D', '--dst-language', help="Desired language for the subtitles", default=DEFAULT_DST_LANGUAGE) parser.add_argument( '-K', '--api-key', help= "The Google Translate API key to be used. (Required for subtitle translation)" ) parser.add_argument('-L', '--min-length', help="Minimum length of a speech sample.", type=float, default=DEFAULT_MIN_LENGTH) parser.add_argument('-U', '--max-length', help="Maximum length of a speech sample.", type=float, default=DEFAULT_MAX_LENGTH) parser.add_argument( '-P', '--silent-percentile', help="Percentile of speech which is considered silent.", type=float, default=DEFAULT_PERCENTILE) parser.add_argument('-SF', '--silent-frame-cut', help="Amount of silent frames till cut.", type=int, default=DEFAULT_FRAME_CUT) parser.add_argument('-I', '--interval', help="Interval in which the percentile will be taken.", type=int, default=DEFAULT_INTERVAL) parser.add_argument('--list-formats', help="List all available subtitle formats", action='store_true') parser.add_argument('--list-languages', help="List all available source/destination languages", action='store_true') args = parser.parse_args() if args.list_formats: print("List of formats:") for subtitle_format in FORMATTERS.keys(): print("{format}".format(format=subtitle_format)) return 0 if args.list_languages: print("List of all languages:") for code, language in sorted(LANGUAGE_CODES.items()): print("{code}\t{language}".format(code=code, language=language)) return 0 if args.format not in FORMATTERS.keys(): print("Subtitle format not supported. " "Run with --list-formats to see all supported formats.") return 1 if args.src_language not in LANGUAGE_CODES.keys(): print("Source language not supported. " "Run with --list-languages to see all supported languages.") return 1 if args.dst_language not in LANGUAGE_CODES.keys(): print("Destination language not supported. " "Run with --list-languages to see all supported languages.") return 1 if not args.source_path: print("Error: You need to specify a source path.") return 1 try: subtitle_file_path = generate_subtitles( source_path=args.source_path, concurrency=args.concurrency, src_language=args.src_language, dst_language=args.dst_language, api_key=args.api_key, subtitle_file_format=args.format, output=args.output, min_sample_length=args.min_length, max_sample_length=args.max_length, silent_percentile=args.silent_percentile, silent_frame_cut=args.silent_frame_cut, interval=args.interval) print("Subtitles file created at {}".format(subtitle_file_path)) except KeyboardInterrupt: return 1 return 0
def main(): parser = argparse.ArgumentParser() parser.add_argument('source_path', help="Path to the video or audio file to subtitle", nargs='?') parser.add_argument('-C', '--concurrency', help="Number of concurrent API requests to make", type=int, default=10) parser.add_argument( '-o', '--output', help="Output path for subtitles (by default, subtitles are saved in \ the same directory and name as the source path)") parser.add_argument('-F', '--format', help="Destination subtitle format", default="srt") parser.add_argument('-S', '--src-language', help="Language spoken in source file", default="en") parser.add_argument('-D', '--dst-language', help="Desired language for the subtitles", default="en") parser.add_argument( '-K', '--api-key', help= "The Google Translate API key to be used. (Required for subtitle translation)" ) parser.add_argument('--list-formats', help="List all available subtitle formats", action='store_true') parser.add_argument('--list-languages', help="List all available source/destination languages", action='store_true') args = parser.parse_args() if args.list_formats: print("List of formats:") for subtitle_format in FORMATTERS.keys(): print("{format}".format(format=subtitle_format)) return 0 if args.list_languages: print("List of all languages:") for code, language in sorted(LANGUAGE_CODES.items()): print("{code}\t{language}".format(code=code, language=language)) return 0 if args.format not in FORMATTERS.keys(): print( "Subtitle format not supported. Run with --list-formats to see all supported formats." ) return 1 if args.src_language not in LANGUAGE_CODES.keys(): print( "Source language not supported. Run with --list-languages to see all supported languages." ) return 1 if args.dst_language not in LANGUAGE_CODES.keys(): print( "Destination language not supported. Run with --list-languages to see all supported languages." ) return 1 #if not args.source_path: # print("Error: You need to specify a source path.") # return 1 config = get_config("apikey.conf") args.api_key = config['apikey'] args.src_language = config['source_lang'] args.dst_language = config['dest_lang'] transpath = config['path'] entries = os.listdir(transpath) for fp in entries: # Split the extension from the path and normalise it to lowercase. ext = os.path.splitext(fp)[-1].lower() rpath = os.path.normpath(os.path.join(transpath, fp)) #rpath = os.path.abspath(fp) print(rpath) rightf = ext.endswith(('.mp4', '.mp3', '.m4a', '.wav', 'mov', '.3gp', '.avi', '.ogg', '.webm', 'mkv', 'flv')) if rightf: #command = ["python.exe Scripts/autosub", "-S", "en", "-D", "zh-TW", "-K", "AIzaSyCEPufSi1M0SD-dcmfAnDZNw6tUwHcsLzM", rpath] #print(command) #subprocess.check_output(command, stdin=open(os.devnull)) #else: # print fp, "is an unknown file format. audio_filename, audio_rate = extract_audio(rpath) regions = find_speech_regions(audio_filename) pool = multiprocessing.Pool(args.concurrency) converter = FLACConverter(source_path=audio_filename) recognizer = SpeechRecognizer(language=args.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 not is_same_language(args.src_language, args.dst_language): if args.api_key: google_translate_api_key = args.api_key translator = Translator(args.dst_language, google_translate_api_key, dst=args.dst_language, src=args.src_language) prompt = "Translating from {0} to {1}: ".format( args.src_language, args.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") return 1 timed_subtitles = [(r, t) for r, t in zip(regions, transcripts) if t] formatter = FORMATTERS.get(args.format) formatted_subtitles = formatter(timed_subtitles) dest = args.output if not dest: base, ext = os.path.splitext(rpath) dest = "{base}.{format}".format(base=base, format=args.format) with open(dest, 'wb') as f: f.write(formatted_subtitles.encode("utf-8")) print("Subtitles file created at {}".format(dest)) os.remove(audio_filename) return 0
def main(): parser = argparse.ArgumentParser() parser.add_argument('source_path', help="Path to the video or audio file to subtitle", nargs='?') parser.add_argument('-C', '--concurrency', help="Number of concurrent API requests to make", type=int, default=DEFAULT_CONCURRENCY) parser.add_argument( '-o', '--output', help="Output path for subtitles (by default, subtitles are saved in \ the same directory and name as the source path)") parser.add_argument('-F', '--format', help="Destination subtitle format", default=DEFAULT_SUBTITLE_FORMAT) parser.add_argument('-S', '--src-language', help="Language spoken in source file", default=DEFAULT_SRC_LANGUAGE) parser.add_argument('-D', '--dst-language', help="Desired language for the subtitles", default=DEFAULT_DST_LANGUAGE) parser.add_argument( '-K', '--api-key', help= "The Google Translate API key to be used. (Required for subtitle translation)" ) parser.add_argument('--list-formats', help="List all available subtitle formats", action='store_true') parser.add_argument('--list-languages', help="List all available source/destination languages", action='store_true') parser.add_argument('-d', '--dir', help="check for files in subdirectories recursively", action='store_true') parser.add_argument('-i', '--input-format', help="Input video or audio file format to subtitle") args = parser.parse_args() if args.list_formats: print("List of formats:") for subtitle_format in FORMATTERS.keys(): print("{format}".format(format=subtitle_format)) return 0 if args.list_languages: print("List of all languages:") for code, language in sorted(LANGUAGE_CODES.items()): print("{code}\t{language}".format(code=code, language=language)) return 0 if args.format not in FORMATTERS.keys(): print("Subtitle format not supported. " "Run with --list-formats to see all supported formats.") return 1 if args.src_language not in LANGUAGE_CODES.keys(): print("Source language not supported. " "Run with --list-languages to see all supported languages.") return 1 if args.dst_language not in LANGUAGE_CODES.keys(): print("Destination language not supported. " "Run with --list-languages to see all supported languages.") return 1 if not args.source_path: print("Error: You need to specify a source path.") return 1 if args.dir and not args.input_format: print( "Error: You need to specify an input format when you specify a directory." ) return 1 if args.dir and os.path.isfile(args.source_path): print( "Error: You must not select a file when you specify a directory.") return 1 if not args.dir and not os.path.isfile(args.source_path): print("Error: You must use the --dir for directories.") return 1 try: if args.dir: for root, dirs, files in os.walk(args.source_path): for name in files: mediaFile = os.path.join(root, name).decode("utf8") is_right_format = mediaFile.split( '.')[-1] == args.input_format subtitle_extension = args.format or DEFAULT_SUBTITLE_FORMAT if not check_exists_subtitle( mediaFile, subtitle_extension) and is_right_format: print( "Generating subtitles for '{}'".format(mediaFile)) subtitle_file_path = generate_subtitles( source_path=mediaFile, concurrency=args.concurrency, src_language=args.src_language, dst_language=args.dst_language, api_key=args.api_key, subtitle_file_format=args.format, output=args.output, ) elif check_exists_subtitle( mediaFile, subtitle_extension) and is_right_format: print("There is already a subtitle for '{}'".format( mediaFile)) else: subtitle_file_path = generate_subtitles( source_path=args.source_path, concurrency=args.concurrency, src_language=args.src_language, dst_language=args.dst_language, api_key=args.api_key, subtitle_file_format=args.format, output=args.output, ) print("Subtitles file created at {}".format(subtitle_file_path)) except KeyboardInterrupt: return 1 return 0
def argparser(): parser = argparse.ArgumentParser(description='auto sub video or audios') parser.add_argument('-i', '--input_path', help="Path to the video or audio file to subtitle") parser.add_argument('-c', '--concurrency', help="Number of concurrent Google API requests", type=int, default=10) parser.add_argument('-o', '--output', help="output for path of subtitle") parser.add_argument('-f', '--format', help="subtitle format", default="srt") parser.add_argument('-sl', '--src-language', help="source language", default="en") parser.add_argument('-dl', '--dst-language', help="dest language", default="en") parser.add_argument('--list-formats', help="List all available subtitle formats", action='store_true') parser.add_argument('--list-languages', help="List all available source/destination languages", action='store_true') parser.add_argument('-k', '--api-key', help="The google translate API key") parser.add_argument('-ts', '--timed_subtitle', help="timed subtitle to replace auto-generated") args = parser.parse_args() if args.list_formats: print("List of formats:") for subtitle_format in FORMATTERS.keys(): print("{format}".format(format=subtitle_format)) return 0 if args.list_languages: print("List of all languages:") for code, language in sorted(LANGUAGE_CODES.items()): print("{code}\t{language}".format(code=code, language=language)) return 0 if args.format not in FORMATTERS.keys(): print("Subtitle format not supported. \ Run with --list-formats to see all supported formats.") return 1 if args.src_language not in LANGUAGE_CODES.keys(): print("Source language not supported. \ Run with --list-languages to see all supported languages.") return 1 if args.dst_language not in LANGUAGE_CODES.keys(): print("Destination language not supported. \ Run with --list-languages to see all supported languages.") return 1 if not args.input_path: print("Error: You need to specify a source path.") return 1 return args