whisper_transcribe / adjust.py
chompionsawelo's picture
adjust
683bbe8
raw
history blame
4.68 kB
from ui import *
from file_name import *
from pydub import AudioSegment
from utils import load_groups_json
from video_tool import add_subtitle_to_video
import gradio as gr
import os
import utils
min_duration_ms = 10000
current_pos = 0
speaker_to_name = {"Speaker": "Name"}
speaker_to_sample = {"Speaker": "File"}
sample_groups = []
def get_current():
global speaker_to_name
global speaker_to_sample
print(f"GET CURRENT speaker_to_name: {speaker_to_name}")
print(f"GET CURRENT speaker_to_sample: {speaker_to_sample}")
name = list(speaker_to_name.values())[current_pos]
sample = list(speaker_to_sample.values())[current_pos]
print(f"CURRENT: {name} {sample}")
return [name, sample]
def prepare_output(input_file):
if input_file is None or not os.path.exists(input_file):
return [None, None, None, None, None]
speakers = get_speakers()
adjust_speaker_update = adjust_speaker.update(
speakers[0], interactive=True)
adjust_audio_update = adjust_audio.update(speakers[1], interactive=True)
prev_button_update = prev_button.update(interactive=True)
next_button_update = next_button.update(interactive=True)
adjust_button_update = adjust_button.update(interactive=True)
# Return adjust speaker, adjust audio, previous, next, adjust button
return [adjust_speaker_update, adjust_audio_update, prev_button_update, next_button_update, adjust_button_update]
def get_speakers():
global sample_groups
global speaker_to_name
global speaker_to_sample
sample_groups, _ = load_groups_json()
print(f"SAMPLE GROUP: {sample_groups}")
speaker_to_name = {}
speaker_to_sample = {}
for speaker in sample_groups:
for suffix in range(1, 100):
file_path = f"{speaker}-{suffix}.wav"
if os.path.exists(file_path):
audio_segment = AudioSegment.from_file(file_path)
if len(audio_segment) > min_duration_ms:
print(f"Found file: {file_path}")
print(
f"File duration: {len(audio_segment) / 1000} seconds")
break
temp_file_name = f"{speaker}-sample.wav"
audio_segment[:10 * 1000].export(temp_file_name, format="wav")
speaker_to_sample[speaker] = temp_file_name
speaker_to_name[speaker] = speaker
print(f"speaker_to_name: {speaker_to_name}")
print(f"speaker_to_sample: {speaker_to_sample}")
return get_current()
def change_name(to_name):
global sample_groups
global speaker_to_name
global current_pos
current_speaker = sample_groups[current_pos]
speaker_to_name[current_speaker] = to_name
print(str(get_current()))
def get_speakers_next(to_name):
change_name(to_name)
global sample_groups
global current_pos
if (current_pos < len(sample_groups) - 1):
current_pos += 1
return get_current()
def get_speakers_previous(to_name):
change_name(to_name)
global current_pos
if (current_pos > 0):
current_pos -= 1
return get_current()
def start_adjust_subtitle(input_file, start_time, end_time, progress=gr.Progress()):
# Adding subtitle to video
progress(0.8, desc=ui_lang["progress_add_subtitle"])
add_subtitle_to_video(
input_file, base_subtitle_adjusted_file, video_subtitle_file, start_time, end_time)
return video_subtitle_file
def start_adjust(input_file, to_name, progress=gr.Progress()):
change_name(to_name)
# Replacing texts
progress(0.4, desc=ui_lang["progress_adjust_speaker"])
transcribe_txt_list, subtitle_txt_list = utils.read_transcribe_subtitle_file(input_file,
False)
modified_transcribe = replace_text(transcribe_txt_list)
modified_subtitle = replace_text(subtitle_txt_list)
utils.write_transcribe_subtitle_file(
input_file, modified_transcribe, modified_subtitle, True)
# Return video file link, transcribe string, transcribe.txt, subtitle.txt
transcribe_txt_list, _ = utils.read_transcribe_subtitle_file(
input_file, True)
print(line for line in transcribe_txt_list)
transcribe_txt = "\n".join(transcribe_txt_list)
return [
transcribe_txt,
[transcribe_adjusted_file, subtitle_adjusted_file]
]
def replace_text(lines):
modified_lines = []
for line in lines:
for key, value in speaker_to_name.items():
line = line.replace(key, value)
print(f"Replacing {key} with {value}")
modified_lines.append(line)
print(modified_lines)
return modified_lines