from lang_ui import get_ui_lang import gradio as gr import ffmpeg # Display available langauges and set default UI language ui_lang_index = 1 available_ui_lang = ["English", "Bahasa Indonesia"] ui_lang = get_ui_lang(ui_lang_index) lang_radio_choice = 1 model_dropdown_choice = 2 # Transcribe components ui_lang_radio = gr.Radio( available_ui_lang, type="index", value=available_ui_lang[ui_lang_index], interactive=True, show_label=False) top_markdown = gr.Markdown( ui_lang["top_markdown"]) # TODO Add video by link input_video = gr.Video( label=ui_lang["input_video_label"], interactive=True) start_time = gr.Textbox( max_lines=1, placeholder="00:00:00", label=ui_lang["start_time_label"], interactive=False) end_time = gr.Textbox( max_lines=1, placeholder="01:00:00", label=ui_lang["end_time_label"], interactive=False) # TODO Use custom language lang_radio = gr.Radio( ui_lang["lang_radio_choices"], label=ui_lang["lang_radio_label"], info=ui_lang["lang_radio_info"], type='index', interactive=True) model_dropdown = gr.Dropdown( ui_lang["model_dropdown_choices"], label=ui_lang["model_dropdown_label"], info=ui_lang["model_dropdown_info"], type='index', interactive=True) summary_checkbox = gr.Checkbox( label=ui_lang["summary_checkbox_label"], info=ui_lang["summary_checkbox_info"], interactive=False, visible=False) start_button = gr.Button( ui_lang["start_button_value"], variant="primary", interactive=True) # Adjust components middle_markdown = gr.Markdown( ui_lang["middle_markdown"]) adjust_audio = gr.Audio(interactive=False) adjust_speaker = gr.Textbox( label=ui_lang["adjust_speaker_value"], interactive=False) prev_button = gr.Button(ui_lang["prev_button_value"], interactive=False) next_button = gr.Button(ui_lang["next_button_value"], interactive=False) adjust_button = gr.Button( ui_lang["adjust_button_value"], variant="primary", interactive=False) # Result components bottom_markdown = gr.Markdown( ui_lang["bottom_markdown"] ) output_video = gr.Video(label=ui_lang["output_video_label"], interactive=False) output_file = gr.File(file_count="multiple", interactive=False) output_transcribe = gr.Textbox( label=ui_lang["output_transcribe_label"], interactive=False, show_copy_button=True) output_summary = gr.Textbox( interactive=False, show_copy_button=True, visible=False) def time_str(t): return '{0:02d}:{1:02d}:{2:02d}'.format(round(t // 3600), round(t % 3600 // 60), round(t % 60)) def get_duration(input_file): print("Checking file") if input_file is None: gr.Warning(ui_lang["input_video_warning"]) return [ start_time.update(None, interactive=False), end_time.update(None, interactive=False) ] print("Getting duration") info_json = ffmpeg.probe(input_file) print("Probing finished") duration_seconds = float(info_json['format']['duration']) duration_formatted = time_str(duration_seconds) return [ start_time.update("00:00:00", interactive=True), end_time.update(duration_formatted, interactive=True) ] # Change language function def change_lang(input): global ui_lang ui_lang = get_ui_lang(input) print(f"Change language to {available_ui_lang[input]}") return [ # Top top_markdown.update( ui_lang["top_markdown"]), input_video.update( label=ui_lang["input_video_label"]), start_time.update( label=ui_lang["start_time_label"]), end_time.update( label=ui_lang["end_time_label"]), lang_radio.update( choices=ui_lang["lang_radio_choices"], value=None, label=ui_lang["lang_radio_label"], info=ui_lang["lang_radio_info"],), model_dropdown.update( choices=ui_lang["model_dropdown_choices"], value=None, label=ui_lang["model_dropdown_label"], info=ui_lang["model_dropdown_info"]), summary_checkbox.update( label=ui_lang["summary_checkbox_label"], info=ui_lang["summary_checkbox_info"]), start_button.update( ui_lang["start_button_value"]), # Middle middle_markdown.update( ui_lang["middle_markdown"]), adjust_speaker.update(label=ui_lang["adjust_speaker_value"]), prev_button.update( ui_lang["prev_button_value"]), next_button.update( ui_lang["next_button_value"]), adjust_button.update( ui_lang["adjust_button_value"]), # Bottom bottom_markdown.update( ui_lang["bottom_markdown"]), output_video.update(label=ui_lang["output_video_label"]), output_transcribe.update(label=ui_lang["output_transcribe_label"]), ] # comp_to_update and change_lang return must always be in equal number comp_to_update = [ top_markdown, input_video, start_time, end_time, lang_radio, model_dropdown, summary_checkbox, start_button, middle_markdown, adjust_speaker, prev_button, next_button, adjust_button, bottom_markdown, output_video, output_transcribe]