def list_to_ass_str( # pylint: disable=too-many-arguments text_list, styles_list, subtitles_file_format=constants.DEFAULT_SUBTITLES_FORMAT): """ Give an input timed text list, format it to an ass string. """ if subtitles_file_format == 'ass' \ or subtitles_file_format == 'ssa'\ or subtitles_file_format == 'ass.json': pysubs2_obj = pysubs2.SSAFile() pysubs2_obj.styles = \ {styles_list[i]: styles_list[i + 1] for i in range(0, len(styles_list), 2)} if not isinstance(text_list[0], list): # text_list is [((start, end), text), ...] # text_list provides regions sub_utils.pysubs2_ssa_event_add(src_ssafile=None, dst_ssafile=pysubs2_obj, text_list=text_list, style_name=styles_list[0]) else: # text_list is [[src_list], [dst_list]] # src_list provides regions sub_utils.pysubs2_ssa_event_add(src_ssafile=None, dst_ssafile=pysubs2_obj, text_list=text_list[0], style_name=styles_list[0]) if len(styles_list) == 1: sub_utils.pysubs2_ssa_event_add(src_ssafile=None, dst_ssafile=pysubs2_obj, text_list=text_list[1], style_name=styles_list[0]) else: sub_utils.pysubs2_ssa_event_add(src_ssafile=None, dst_ssafile=pysubs2_obj, text_list=text_list[1], style_name=styles_list[2]) if subtitles_file_format != 'ass.json': formatted_subtitles = pysubs2_obj.to_string( format_=subtitles_file_format) else: formatted_subtitles = pysubs2_obj.to_string(format_='json') else: # fallback process print( _("Format \"{fmt}\" not supported. " "Using \"{default_fmt}\" instead.").format( fmt=subtitles_file_format, default_fmt=constants.DEFAULT_SUBTITLES_FORMAT)) pysubs2_obj = pysubs2.SSAFile() sub_utils.pysubs2_ssa_event_add(src_ssafile=None, dst_ssafile=pysubs2_obj, text_list=text_list, style_name=None) formatted_subtitles = pysubs2_obj.to_string( format_=constants.DEFAULT_SUBTITLES_FORMAT) return formatted_subtitles, subtitles_file_format
def list_to_ass_str( text_list, styles_list, subtitles_file_format=constants.DEFAULT_SUBTITLES_FORMAT, same_event_type=0): """ Give an input timed text list, format it to an ass string. """ pysubs2_obj = pysubs2.SSAFile() pysubs2_obj.styles = \ {styles_list[i]: styles_list[i + 1] for i in range(0, len(styles_list), 2)} if not isinstance(text_list[0], list): # text_list is [((start, end), text), ...] # text_list provides regions sub_utils.pysubs2_ssa_event_add( src_ssafile=None, dst_ssafile=pysubs2_obj, text_list=text_list, style_name=styles_list[0]) else: # text_list is [[src_list], [dst_list]] # src_list provides regions sub_utils.pysubs2_ssa_event_add( src_ssafile=None, dst_ssafile=pysubs2_obj, text_list=text_list[0], style_name=styles_list[0]) src_obj = pysubs2_obj pysubs2_obj = pysubs2.SSAFile() if len(styles_list) == 1: sub_utils.pysubs2_ssa_event_add( src_ssafile=src_obj, dst_ssafile=pysubs2_obj, text_list=text_list[1], style_name=styles_list[0], same_event_type=same_event_type) else: sub_utils.pysubs2_ssa_event_add( src_ssafile=src_obj, dst_ssafile=pysubs2_obj, text_list=text_list[1], style_name=styles_list[2], same_event_type=same_event_type) if subtitles_file_format != 'ass.json': formatted_subtitles = pysubs2_obj.to_string(format_=subtitles_file_format) else: formatted_subtitles = pysubs2_obj.to_string(format_='json') return formatted_subtitles
def list_to_sub_str( timed_text, fps=30.0, subtitles_file_format=constants.DEFAULT_SUBTITLES_FORMAT): """ Give an input timed text list, format it to a string. """ if subtitles_file_format in ('srt', 'tmp', 'ass', 'ssa'): pysubs2_obj = pysubs2.SSAFile() sub_utils.pysubs2_ssa_event_add( src_ssafile=None, dst_ssafile=pysubs2_obj, text_list=timed_text) formatted_subtitles = pysubs2_obj.to_string( format_=subtitles_file_format) elif subtitles_file_format == 'vtt': formatted_subtitles = sub_utils.list_to_vtt_str( subtitles=timed_text) elif subtitles_file_format == 'json': formatted_subtitles = sub_utils.list_to_json_str( subtitles=timed_text) elif subtitles_file_format == 'ass.json': pysubs2_obj = pysubs2.SSAFile() sub_utils.pysubs2_ssa_event_add( src_ssafile=None, dst_ssafile=pysubs2_obj, text_list=timed_text) formatted_subtitles = pysubs2_obj.to_string( format_='json') elif subtitles_file_format == 'txt': formatted_subtitles = sub_utils.list_to_txt_str( subtitles=timed_text) elif subtitles_file_format == 'sub': pysubs2_obj = pysubs2.SSAFile() sub_utils.pysubs2_ssa_event_add( src_ssafile=None, dst_ssafile=pysubs2_obj, text_list=timed_text) formatted_subtitles = pysubs2_obj.to_string( format_='microdvd', fps=fps) # sub format need fps # ref https://pysubs2.readthedocs.io/en/latest # /api-reference.html#supported-input-output-formats elif subtitles_file_format == 'mpl2.txt': pysubs2_obj = pysubs2.SSAFile() sub_utils.pysubs2_ssa_event_add( src_ssafile=None, dst_ssafile=pysubs2_obj, text_list=timed_text) formatted_subtitles = pysubs2_obj.to_string( format_='mpl2', fps=fps) else: # fallback process print(_("Format \"{fmt}\" not supported. " "Use \"{default_fmt}\" instead.").format( fmt=subtitles_file_format, default_fmt=constants.DEFAULT_SUBTITLES_FORMAT)) pysubs2_obj = pysubs2.SSAFile() sub_utils.pysubs2_ssa_event_add( src_ssafile=None, dst_ssafile=pysubs2_obj, text_list=timed_text) formatted_subtitles = pysubs2_obj.to_string( format_=constants.DEFAULT_SUBTITLES_FORMAT) return formatted_subtitles
def subs_trans( # pylint: disable=too-many-branches, too-many-statements, too-many-locals args, input_m=input, fps=30.0, styles_list=None): """ Give args and translate a subtitles file. """ if not args.output_files: raise exceptions.AutosubException( _("\nNo works done." " Check your \"-of\"/\"--output-files\" option.")) src_sub = pysubs2.SSAFile.load(args.input) text_list = [] if args.styles and \ (args.format == 'ass' or args.format == 'ssa' or args.format == 'ass.json'): src_sub.styles = \ {styles_list[i]: styles_list[i + 1] for i in range(0, len(styles_list), 2)} for event in src_sub.events: event.style = styles_list[0] text_list.append(event.text) else: styles_list = [ src_sub.events[0].style, ] for event in src_sub.events: text_list.append(event.text) # text translation if args.gtransv2: # use gtransv2 translated_text = core.list_to_gtv2( text_list=text_list, api_key=args.gtransv2, concurrency=args.trans_concurrency, src_language=args.src_language, dst_language=args.dst_language, lines_per_trans=args.lines_per_trans) else: # use googletrans translated_text = core.list_to_googletrans( text_list, src_language=args.src_language, dst_language=args.dst_language, sleep_seconds=args.sleep_seconds, user_agent=args.user_agent, service_urls=args.service_urls) if not translated_text or len(translated_text) != len(text_list): raise exceptions.AutosubException(_("Error: Translation failed.")) try: args.output_files.remove("bilingual") bilingual_sub = pysubs2.SSAFile() bilingual_sub.styles = src_sub.styles bilingual_sub.events = src_sub.events[:] if args.styles and \ len(styles_list) == 2 and \ (args.format == 'ass' or args.format == 'ssa' or args.format == 'ass.json'): sub_utils.pysubs2_ssa_event_add(src_ssafile=bilingual_sub, dst_ssafile=bilingual_sub, text_list=translated_text, style_name=styles_list[2]) else: sub_utils.pysubs2_ssa_event_add(src_ssafile=bilingual_sub, dst_ssafile=bilingual_sub, text_list=translated_text, style_name=styles_list[0]) if args.format != 'ass.json': bilingual_string = bilingual_sub.to_string(format_=args.format, fps=fps) else: bilingual_string = bilingual_sub.to_string(format_='json') if args.format == 'mpl2': extension = 'mpl2.txt' else: extension = args.format bilingual_name = "{base}.{nt}.{extension}".format( base=args.output, nt=args.src_language + '&' + args.dst_language, extension=extension) subtitles_file_path = core.str_to_file(str_=bilingual_string, output=bilingual_name, input_m=input_m) # subtitles string to file print( _("Bilingual subtitles file " "created at \"{}\".").format(subtitles_file_path)) if not args.output_files: raise exceptions.AutosubException(_("\nAll works done.")) except KeyError: pass try: args.output_files.remove("dst") dst_sub = pysubs2.SSAFile() dst_sub.styles = src_sub.styles if len(styles_list) == 2: sub_utils.pysubs2_ssa_event_add(src_ssafile=src_sub, dst_ssafile=dst_sub, text_list=translated_text, style_name=styles_list[2]) else: sub_utils.pysubs2_ssa_event_add(src_ssafile=src_sub, dst_ssafile=dst_sub, text_list=translated_text, style_name=styles_list[0]) if args.format != 'ass.json': dst_string = dst_sub.to_string(format_=args.format, fps=fps) else: dst_string = dst_sub.to_string(format_='json') if args.format == 'mpl2': extension = 'mpl2.txt' else: extension = args.format dst_name = "{base}.{nt}.{extension}".format(base=args.output, nt=args.dst_language, extension=extension) subtitles_file_path = core.str_to_file(str_=dst_string, output=dst_name, input_m=input_m) # subtitles string to file print( _("Destination language subtitles " "file created at \"{}\".").format(subtitles_file_path)) except KeyError: pass