from ui import * from file_name import * from diarization import start_diarization from transcribe import start_transcribe from video_tool import convert_video_to_audio, add_subtitle_to_video import gradio as gr import re import os import utils def prepare_input(input_file, start_time, end_time, lang, model_size, use_summary, progress=gr.Progress()): gr.Info(ui_lang["progress_starting_process"]) if input_file is None or not os.path.exists(input_file): gr.Warning(ui_lang["input_video_warning"]) return [None, None, [None, None]] if validate_time_format(start_time) is False: gr.Warning(ui_lang["start_time_warning"]) return [None, None, [None, None]] if validate_time_format(end_time) is False: gr.Warning(ui_lang["end_time_warning"]) return [None, None, [None, None]] if lang is None: gr.Warning(ui_lang["lang_radio_warning"]) return [None, None, [None, None]] if model_size is None: gr.Warning(ui_lang["model_dropdown_warning"]) return [None, None, [None, None]] global current_input_file current_input_file = input_file global start_time_for_adjustment start_time_for_adjustment = start_time global end_time_for_adjustment end_time_for_adjustment = end_time print(f"SOURCE: {input_file}") print(f"VIDEO FILE: {current_input_file}") print(f"AUDIO FILE: {get_audio_file()}") # Convert video to audio progress(0.2, desc=ui_lang["progress_preparing_video"]) convert_video_to_audio( input_file, get_audio_file(), start_time, end_time) # Start diarization progress(0.4, desc=ui_lang["progress_acquiring_diarization"]) start_diarization(get_audio_file()) # Start transcribing progress(0.6, desc=ui_lang["progress_transcribing_audio"]) start_transcribe(lang, model_size, progress) # Add subtitle to video progress(0.8, desc=ui_lang["progress_add_subtitle"]) add_subtitle_to_video(input_file, get_subtitle_file(), get_video_subtitle_file(), start_time, end_time) # Return video file link, transcribe string, transcribe.txt, subtitle.txt transcribe_txt_list, _ = utils.read_transcribe_subtitle_file(False) transcribe_txt = "\n".join(transcribe_txt_list) return [ get_video_subtitle_file(), transcribe_txt, [get_transcribe_file(), get_subtitle_file()] ] def validate_time_format(input_string): pattern = re.compile(r'^\d{2}:\d{2}:\d{2}$') return pattern.match(input_string) is not None