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]] print(f"SOURCE: {input_file}") print(f"AUDIO FILE: {audio_file}") # Convert video to audio progress(0.2, desc=ui_lang["progress_preparing_video"]) convert_video_to_audio( input_file, audio_file, start_time, end_time) # Start diarization progress(0.4, desc=ui_lang["progress_acquiring_diarization"]) start_diarization(audio_file) # Start transcribing progress(0.6, desc=ui_lang["progress_transcribing_audio"]) start_transcribe(input_file, lang, model_size, progress) # Add subtitle to video progress(0.8, desc=ui_lang["progress_add_subtitle"]) add_subtitle_to_video(input_file, subtitle_file, 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( input_file, False) transcribe_txt = "\n".join(transcribe_txt_list) return [ video_subtitle_file, transcribe_txt, [transcribe_file, 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