chompionsawelo commited on
Commit
bef4887
·
1 Parent(s): 6c30d8b

Add google drive option

Browse files
Files changed (8) hide show
  1. adjust.py +1 -1
  2. app.py +5 -4
  3. file_name.py +5 -1
  4. lang_ui.py +14 -4
  5. requirements.txt +1 -0
  6. set_up.py +1 -1
  7. transcribe.py +2 -2
  8. 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, subtitle_adjusted_file, 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(
 
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
- # input_url.render()
16
- # url_download.render()
17
- # url_download.click(get_video_from_url, input_url, input_video)
 
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
- transcribe_adjusted_file = f"{current_working_directory}/transcribe_adjusted.txt"
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
- "download_button_value": "Download video",
 
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 link video",
73
- "download_button_value": "Unduh video",
 
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, subtitle_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 file_name
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="Transcribing")):
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 subprocess
5
- import re
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
- url_download = gr.Button(
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="01:00:00", label=ui_lang["end_time_label"], interactive=False)
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
- try:
73
- urllib.request.urlretrieve(url, file_name.download_file)
74
- print("Download finished")
75
- return file_name.download_file
76
- except:
77
- print("Download failed")
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
- result = subprocess.run(['ffprobe', '-v', 'error', '-show_entries', 'format=duration', '-of',
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
- # duration_seconds = float(info_json['format']['duration'])
98
- # duration_formatted = time_str(duration_seconds)
99
  return [
100
  start_time.update("00:00:00", interactive=True),
101
- end_time.update(duration, interactive=True)
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(label=ui_lang["adjust_speaker_value"]),
 
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(label=ui_lang["output_video_label"]),
146
- output_transcribe.update(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_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]
 
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]