Spaces:
Runtime error
Runtime error
Commit
·
bef4887
1
Parent(s):
6c30d8b
Add google drive option
Browse files- adjust.py +1 -1
- app.py +5 -4
- file_name.py +5 -1
- lang_ui.py +14 -4
- requirements.txt +1 -0
- set_up.py +1 -1
- transcribe.py +2 -2
- ui.py +30 -30
adjust.py
CHANGED
@@ -116,7 +116,7 @@ def start_adjust(input_file, to_name, start_time, end_time, progress=gr.Progress
|
|
116 |
# Adding subtitle to video
|
117 |
progress(0.8, desc=ui_lang["progress_add_subtitle"])
|
118 |
add_subtitle_to_video(
|
119 |
-
input_file,
|
120 |
|
121 |
# Return video file link, transcribe string, transcribe.txt, subtitle.txt
|
122 |
transcribe_txt_list, _ = utils.read_transcribe_subtitle_file(
|
|
|
116 |
# Adding subtitle to video
|
117 |
progress(0.8, desc=ui_lang["progress_add_subtitle"])
|
118 |
add_subtitle_to_video(
|
119 |
+
input_file, subtitle_adjusted_file_parsed, video_subtitle_file, start_time, end_time)
|
120 |
|
121 |
# Return video file link, transcribe string, transcribe.txt, subtitle.txt
|
122 |
transcribe_txt_list, _ = utils.read_transcribe_subtitle_file(
|
app.py
CHANGED
@@ -12,16 +12,17 @@ with gr.Blocks() as demo:
|
|
12 |
with gr.Column():
|
13 |
with gr.Row():
|
14 |
with gr.Column():
|
15 |
-
|
16 |
-
|
17 |
-
|
|
|
18 |
input_video.render()
|
19 |
input_video.change(get_duration, input_video, [
|
20 |
start_time, end_time])
|
|
|
21 |
with gr.Row():
|
22 |
start_time.render()
|
23 |
end_time.render()
|
24 |
-
with gr.Column():
|
25 |
lang_radio.render()
|
26 |
model_dropdown.render()
|
27 |
# summary_checkbox.render()
|
|
|
12 |
with gr.Column():
|
13 |
with gr.Row():
|
14 |
with gr.Column():
|
15 |
+
input_url.render()
|
16 |
+
url_download_button.render()
|
17 |
+
url_download_button.click(
|
18 |
+
get_video_from_url, input_url, input_video)
|
19 |
input_video.render()
|
20 |
input_video.change(get_duration, input_video, [
|
21 |
start_time, end_time])
|
22 |
+
with gr.Column():
|
23 |
with gr.Row():
|
24 |
start_time.render()
|
25 |
end_time.render()
|
|
|
26 |
lang_radio.render()
|
27 |
model_dropdown.render()
|
28 |
# summary_checkbox.render()
|
file_name.py
CHANGED
@@ -6,9 +6,13 @@ current_working_directory = os.getcwd()
|
|
6 |
download_file = f"{current_working_directory}/download_video.mp4"
|
7 |
audio_file = f"{current_working_directory}/input.wav"
|
8 |
transcribe_file = f"{current_working_directory}/transcribe.txt"
|
|
|
9 |
subtitle_file = f"{current_working_directory}/subtitle.srt"
|
10 |
-
|
11 |
subtitle_adjusted_file = f"{current_working_directory}/subtitle_adjusted.srt"
|
|
|
|
|
|
|
12 |
video_subtitle_file = f"{current_working_directory}/output.mp4"
|
13 |
sample_groups_json = f"{current_working_directory}/sample_groups.json"
|
14 |
speaker_groups_json = f"{current_working_directory}/speaker_groups.json"
|
|
|
6 |
download_file = f"{current_working_directory}/download_video.mp4"
|
7 |
audio_file = f"{current_working_directory}/input.wav"
|
8 |
transcribe_file = f"{current_working_directory}/transcribe.txt"
|
9 |
+
|
10 |
subtitle_file = f"{current_working_directory}/subtitle.srt"
|
11 |
+
subtitle_file_parsed = "subtitle.srt"
|
12 |
subtitle_adjusted_file = f"{current_working_directory}/subtitle_adjusted.srt"
|
13 |
+
subtitle_adjusted_file_parsed = "subtitle_adjusted.srt"
|
14 |
+
|
15 |
+
transcribe_adjusted_file = f"{current_working_directory}/transcribe_adjusted.txt"
|
16 |
video_subtitle_file = f"{current_working_directory}/output.mp4"
|
17 |
sample_groups_json = f"{current_working_directory}/sample_groups.json"
|
18 |
speaker_groups_json = f"{current_working_directory}/speaker_groups.json"
|
lang_ui.py
CHANGED
@@ -12,14 +12,19 @@ english_ui = {
|
|
12 |
The following is the result of the transcribe
|
13 |
""",
|
14 |
|
|
|
|
|
|
|
|
|
15 |
"input_video_warning": "Please submit a video",
|
16 |
"start_time_warning": "Please provide a correct start time",
|
17 |
"end_time_warning": "Please provide a correct end time",
|
18 |
"lang_radio_warning": "Please choose a language for the video",
|
19 |
"model_dropdown_warning": "Please choose a model size for the video",
|
20 |
|
21 |
-
"input_url_label": "Insert video url",
|
22 |
-
"
|
|
|
23 |
"input_video_label": "Insert video",
|
24 |
"start_time_label": "Start time",
|
25 |
"end_time_label": "End time",
|
@@ -63,14 +68,19 @@ indonesia_ui = {
|
|
63 |
Berikut hasil akhir dari transkrip
|
64 |
""",
|
65 |
|
|
|
|
|
|
|
|
|
66 |
"input_video_warning": "Mohon masukkan video",
|
67 |
"start_time_warning": "Mohon berikan waktu mulai yang sesuai",
|
68 |
"end_time_warning": "Mohon berikan waktu selesai yang sesuai",
|
69 |
"lang_radio_warning": "Mohon pilih bahasa yang digunakan dalam video",
|
70 |
"model_dropdown_warning": "Mohon pilih ukuran model yang digunakan untuk video",
|
71 |
|
72 |
-
"input_url_label": "Masukkan
|
73 |
-
"
|
|
|
74 |
"input_video_label": "Masukkan video",
|
75 |
"start_time_label": "Waktu mulai",
|
76 |
"end_time_label": "Waktu selesai",
|
|
|
12 |
The following is the result of the transcribe
|
13 |
""",
|
14 |
|
15 |
+
"get_video_start_info": "Start downloading",
|
16 |
+
"get_video_fail_info": "Failed to download, please make sure the link can be accessed by 'Anyone with the link'",
|
17 |
+
"get_video_finished_info": "Finish downloading",
|
18 |
+
|
19 |
"input_video_warning": "Please submit a video",
|
20 |
"start_time_warning": "Please provide a correct start time",
|
21 |
"end_time_warning": "Please provide a correct end time",
|
22 |
"lang_radio_warning": "Please choose a language for the video",
|
23 |
"model_dropdown_warning": "Please choose a model size for the video",
|
24 |
|
25 |
+
"input_url_label": "Insert Google Drive video url (Optional)",
|
26 |
+
"input_url_info": "Instead of uploading your video directly, you can use Google Drive shareable link",
|
27 |
+
"download_button_value": "Download Google Drive Video",
|
28 |
"input_video_label": "Insert video",
|
29 |
"start_time_label": "Start time",
|
30 |
"end_time_label": "End time",
|
|
|
68 |
Berikut hasil akhir dari transkrip
|
69 |
""",
|
70 |
|
71 |
+
"get_video_start_info": "Mulai mengunduh",
|
72 |
+
"get_video_fail_info": "Gagal mengunduh, pastikan tautan dapat diakses oleh 'Siapa saja yang memiliki link'",
|
73 |
+
"get_video_finished_info": "Selesai mengunduh",
|
74 |
+
|
75 |
"input_video_warning": "Mohon masukkan video",
|
76 |
"start_time_warning": "Mohon berikan waktu mulai yang sesuai",
|
77 |
"end_time_warning": "Mohon berikan waktu selesai yang sesuai",
|
78 |
"lang_radio_warning": "Mohon pilih bahasa yang digunakan dalam video",
|
79 |
"model_dropdown_warning": "Mohon pilih ukuran model yang digunakan untuk video",
|
80 |
|
81 |
+
"input_url_label": "Masukkan tautan video Google Drive (Opsional)",
|
82 |
+
"input_url_info": "Jika anda terkendala untuk mengunggah video secara langsung, silahkan unggah video ke Google Drive dan gunakan tautan video terbuka dari Google Drive pada kolom berikut",
|
83 |
+
"download_button_value": "Unduh Video Google Drive",
|
84 |
"input_video_label": "Masukkan video",
|
85 |
"start_time_label": "Waktu mulai",
|
86 |
"end_time_label": "Waktu selesai",
|
requirements.txt
CHANGED
@@ -1,3 +1,4 @@
|
|
|
|
1 |
ffmpeg-python
|
2 |
pyannote-audio @ git+https://github.com/pyannote/pyannote-audio.git
|
3 |
pydub
|
|
|
1 |
+
gdown
|
2 |
ffmpeg-python
|
3 |
pyannote-audio @ git+https://github.com/pyannote/pyannote-audio.git
|
4 |
pydub
|
set_up.py
CHANGED
@@ -46,7 +46,7 @@ def prepare_input(input_file, start_time, end_time, lang, model_size, progress=g
|
|
46 |
|
47 |
# Add subtitle to video
|
48 |
progress(0.8, desc=ui_lang["progress_add_subtitle"])
|
49 |
-
add_subtitle_to_video(input_file,
|
50 |
video_subtitle_file, start_time, end_time)
|
51 |
|
52 |
# Return video file link, transcribe string, transcribe.txt, subtitle.txt
|
|
|
46 |
|
47 |
# Add subtitle to video
|
48 |
progress(0.8, desc=ui_lang["progress_add_subtitle"])
|
49 |
+
add_subtitle_to_video(input_file, subtitle_file_parsed,
|
50 |
video_subtitle_file, start_time, end_time)
|
51 |
|
52 |
# Return video file link, transcribe string, transcribe.txt, subtitle.txt
|
transcribe.py
CHANGED
@@ -2,7 +2,7 @@ from faster_whisper import WhisperModel
|
|
2 |
from utils import load_groups_json
|
3 |
import torch
|
4 |
import gc
|
5 |
-
import
|
6 |
import utils
|
7 |
|
8 |
gc.collect()
|
@@ -23,7 +23,7 @@ def start_transcribe(input_file, lang_choice: int, model_size_choice: int, progr
|
|
23 |
|
24 |
subtitle_txt_list = []
|
25 |
transcribe_txt_list = []
|
26 |
-
for speaker, _ in zip(speaker_groups, progress.tqdm(speaker_groups, desc="
|
27 |
# Transcribe and save temp file
|
28 |
audiof = f"{speaker}.wav"
|
29 |
print(f"Loading {audiof}")
|
|
|
2 |
from utils import load_groups_json
|
3 |
import torch
|
4 |
import gc
|
5 |
+
from ui import *
|
6 |
import utils
|
7 |
|
8 |
gc.collect()
|
|
|
23 |
|
24 |
subtitle_txt_list = []
|
25 |
transcribe_txt_list = []
|
26 |
+
for speaker, _ in zip(speaker_groups, progress.tqdm(speaker_groups, desc=ui_lang["progress_transcribing_audio"])):
|
27 |
# Transcribe and save temp file
|
28 |
audiof = f"{speaker}.wav"
|
29 |
print(f"Loading {audiof}")
|
ui.py
CHANGED
@@ -1,9 +1,8 @@
|
|
1 |
from lang_ui import get_ui_lang
|
2 |
import gradio as gr
|
3 |
import file_name
|
4 |
-
import
|
5 |
-
import
|
6 |
-
import urllib.request
|
7 |
|
8 |
# Display available langauges and set default UI language
|
9 |
ui_lang_index = 1
|
@@ -18,18 +17,16 @@ ui_lang_radio = gr.Radio(
|
|
18 |
available_ui_lang, type="index", value=available_ui_lang[ui_lang_index], interactive=True, show_label=False)
|
19 |
top_markdown = gr.Markdown(
|
20 |
ui_lang["top_markdown"])
|
21 |
-
# TODO Add video by link
|
22 |
input_url = gr.Textbox(
|
23 |
-
max_lines=1, label=ui_lang["input_url_label"], interactive=True)
|
24 |
-
|
25 |
-
ui_lang["download_button_value"], interactive=True)
|
26 |
input_video = gr.Video(
|
27 |
label=ui_lang["input_video_label"], interactive=True)
|
28 |
start_time = gr.Textbox(
|
29 |
max_lines=1, placeholder="00:00:00", label=ui_lang["start_time_label"], interactive=False)
|
30 |
end_time = gr.Textbox(
|
31 |
-
max_lines=1, placeholder="
|
32 |
-
# TODO Use custom language
|
33 |
lang_radio = gr.Radio(
|
34 |
ui_lang["lang_radio_choices"], label=ui_lang["lang_radio_label"], info=ui_lang["lang_radio_info"], type='index', interactive=True)
|
35 |
model_dropdown = gr.Dropdown(
|
@@ -69,15 +66,17 @@ def time_str(t):
|
|
69 |
|
70 |
|
71 |
def get_video_from_url(url):
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
gr.Warning(ui_lang["input_video_warning"])
|
79 |
return None
|
80 |
|
|
|
|
|
|
|
81 |
|
82 |
def get_duration(input_file):
|
83 |
print("Checking file")
|
@@ -88,17 +87,13 @@ def get_duration(input_file):
|
|
88 |
end_time.update(None, interactive=False)
|
89 |
]
|
90 |
print("Getting duration")
|
91 |
-
|
92 |
-
'default=noprint_wrappers=1:nokey=1', input_file], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
|
93 |
-
duration = float(result.stdout.strip())
|
94 |
-
print(f"Result: {duration}")
|
95 |
-
# info_json = ffmpeg.probe(input_file)
|
96 |
print("Probing finished")
|
97 |
-
|
98 |
-
|
99 |
return [
|
100 |
start_time.update("00:00:00", interactive=True),
|
101 |
-
end_time.update(
|
102 |
]
|
103 |
|
104 |
|
@@ -113,6 +108,10 @@ def change_lang(input):
|
|
113 |
# Top
|
114 |
top_markdown.update(
|
115 |
ui_lang["top_markdown"]),
|
|
|
|
|
|
|
|
|
116 |
input_video.update(
|
117 |
label=ui_lang["input_video_label"]),
|
118 |
start_time.update(
|
@@ -123,15 +122,14 @@ def change_lang(input):
|
|
123 |
choices=ui_lang["lang_radio_choices"], value=None, label=ui_lang["lang_radio_label"], info=ui_lang["lang_radio_info"],),
|
124 |
model_dropdown.update(
|
125 |
choices=ui_lang["model_dropdown_choices"], value=None, label=ui_lang["model_dropdown_label"], info=ui_lang["model_dropdown_info"]),
|
126 |
-
summary_checkbox.update(
|
127 |
-
label=ui_lang["summary_checkbox_label"], info=ui_lang["summary_checkbox_info"]),
|
128 |
start_button.update(
|
129 |
ui_lang["start_button_value"]),
|
130 |
|
131 |
# Middle
|
132 |
middle_markdown.update(
|
133 |
ui_lang["middle_markdown"]),
|
134 |
-
adjust_speaker.update(
|
|
|
135 |
prev_button.update(
|
136 |
ui_lang["prev_button_value"]),
|
137 |
next_button.update(
|
@@ -142,11 +140,13 @@ def change_lang(input):
|
|
142 |
# Bottom
|
143 |
bottom_markdown.update(
|
144 |
ui_lang["bottom_markdown"]),
|
145 |
-
output_video.update(
|
146 |
-
|
|
|
|
|
147 |
]
|
148 |
|
149 |
|
150 |
# comp_to_update and change_lang return must always be in equal number
|
151 |
comp_to_update = [
|
152 |
-
top_markdown, input_video, start_time, end_time, lang_radio, model_dropdown,
|
|
|
1 |
from lang_ui import get_ui_lang
|
2 |
import gradio as gr
|
3 |
import file_name
|
4 |
+
import ffmpeg
|
5 |
+
import gdown
|
|
|
6 |
|
7 |
# Display available langauges and set default UI language
|
8 |
ui_lang_index = 1
|
|
|
17 |
available_ui_lang, type="index", value=available_ui_lang[ui_lang_index], interactive=True, show_label=False)
|
18 |
top_markdown = gr.Markdown(
|
19 |
ui_lang["top_markdown"])
|
|
|
20 |
input_url = gr.Textbox(
|
21 |
+
max_lines=1, label=ui_lang["input_url_label"], info=ui_lang["input_url_info"], interactive=True)
|
22 |
+
url_download_button = gr.Button(
|
23 |
+
ui_lang["download_button_value"], size='sm', interactive=True)
|
24 |
input_video = gr.Video(
|
25 |
label=ui_lang["input_video_label"], interactive=True)
|
26 |
start_time = gr.Textbox(
|
27 |
max_lines=1, placeholder="00:00:00", label=ui_lang["start_time_label"], interactive=False)
|
28 |
end_time = gr.Textbox(
|
29 |
+
max_lines=1, placeholder="99:99:99", label=ui_lang["end_time_label"], interactive=False)
|
|
|
30 |
lang_radio = gr.Radio(
|
31 |
ui_lang["lang_radio_choices"], label=ui_lang["lang_radio_label"], info=ui_lang["lang_radio_info"], type='index', interactive=True)
|
32 |
model_dropdown = gr.Dropdown(
|
|
|
66 |
|
67 |
|
68 |
def get_video_from_url(url):
|
69 |
+
gr.Info(ui_lang["get_video_start_info"])
|
70 |
+
download_result = gdown.download(
|
71 |
+
url, file_name.download_file, quiet=False, fuzzy=True)
|
72 |
+
|
73 |
+
if (download_result is None):
|
74 |
+
gr.Warning(ui_lang["get_video_fail_info"])
|
|
|
75 |
return None
|
76 |
|
77 |
+
gr.Info(ui_lang["get_video_finished_info"])
|
78 |
+
return file_name.download_file
|
79 |
+
|
80 |
|
81 |
def get_duration(input_file):
|
82 |
print("Checking file")
|
|
|
87 |
end_time.update(None, interactive=False)
|
88 |
]
|
89 |
print("Getting duration")
|
90 |
+
info_json = ffmpeg.probe(input_file)
|
|
|
|
|
|
|
|
|
91 |
print("Probing finished")
|
92 |
+
duration_seconds = float(info_json['format']['duration'])
|
93 |
+
duration_formatted = time_str(duration_seconds)
|
94 |
return [
|
95 |
start_time.update("00:00:00", interactive=True),
|
96 |
+
end_time.update(duration_formatted, interactive=True)
|
97 |
]
|
98 |
|
99 |
|
|
|
108 |
# Top
|
109 |
top_markdown.update(
|
110 |
ui_lang["top_markdown"]),
|
111 |
+
input_url.update(
|
112 |
+
label=ui_lang["input_url_label"], info=ui_lang["input_url_info"]),
|
113 |
+
url_download_button.update(
|
114 |
+
ui_lang["download_button_value"]),
|
115 |
input_video.update(
|
116 |
label=ui_lang["input_video_label"]),
|
117 |
start_time.update(
|
|
|
122 |
choices=ui_lang["lang_radio_choices"], value=None, label=ui_lang["lang_radio_label"], info=ui_lang["lang_radio_info"],),
|
123 |
model_dropdown.update(
|
124 |
choices=ui_lang["model_dropdown_choices"], value=None, label=ui_lang["model_dropdown_label"], info=ui_lang["model_dropdown_info"]),
|
|
|
|
|
125 |
start_button.update(
|
126 |
ui_lang["start_button_value"]),
|
127 |
|
128 |
# Middle
|
129 |
middle_markdown.update(
|
130 |
ui_lang["middle_markdown"]),
|
131 |
+
adjust_speaker.update(
|
132 |
+
label=ui_lang["adjust_speaker_value"]),
|
133 |
prev_button.update(
|
134 |
ui_lang["prev_button_value"]),
|
135 |
next_button.update(
|
|
|
140 |
# Bottom
|
141 |
bottom_markdown.update(
|
142 |
ui_lang["bottom_markdown"]),
|
143 |
+
output_video.update(
|
144 |
+
label=ui_lang["output_video_label"]),
|
145 |
+
output_transcribe.update(
|
146 |
+
label=ui_lang["output_transcribe_label"]),
|
147 |
]
|
148 |
|
149 |
|
150 |
# comp_to_update and change_lang return must always be in equal number
|
151 |
comp_to_update = [
|
152 |
+
top_markdown, input_url, url_download_button, input_video, start_time, end_time, lang_radio, model_dropdown, start_button, middle_markdown, adjust_speaker, prev_button, next_button, adjust_button, bottom_markdown, output_video, output_transcribe]
|