archivartaunik commited on
Commit
9dab23b
·
verified ·
1 Parent(s): 776e8e7

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +70 -41
app.py CHANGED
@@ -2,14 +2,13 @@ import os
2
  import gradio as gr
3
  import google.generativeai as genai
4
  import mimetypes
 
5
 
6
- # Атрымаем токен з асяроддзя (Secrets у Hugging Face)
7
  GEMINI_API_KEY = os.getenv("gemini2")
 
8
 
9
- # Ініцыялізуем кліент Google Generative AI
10
  genai.configure(api_key=GEMINI_API_KEY)
11
 
12
- # Функцыя для транскрыпцыі аўдыя з даданым промптам для стварэння субтытраў з часовымі меткамі
13
  def transcribe_audio(audio_file):
14
  try:
15
  mime_type, _ = mimetypes.guess_type(audio_file)
@@ -17,36 +16,31 @@ def transcribe_audio(audio_file):
17
  return "Немагчыма вызначыць тып файла. Падтрымліваюцца толькі аўдыяфайлы."
18
  with open(audio_file, "rb") as f:
19
  audio_data = f.read()
20
-
21
  prompt_text = (
22
  """зрабі транскрыпцыю аўдыяфайла для стварэння субтытрыў з часовымі меткамі srt
23
- не пішы нічога, акрамя транскрыпцыі ў зададзеным фармаце, вось прыклад фармату
24
- 1
25
- 00:00:00,659 --> 00:00:03,019
26
- Вольга Гапеева. Camel Travel.
27
-
28
- 2
29
- 00:00:03,699 --> 00:00:09,500
30
- Раман. Чытае Уладзімір Лісоўскі.Глава першая.
31
-
32
- 3
33
- 00:00:10,719 --> 00:00:15,079
34
- Ісык-Куль.Паважаныя пасажыры!
35
-
36
- 4
37
- 00:00:15,619 --> 00:00:19,100
38
- Наш самалёт прызямліўся ў
39
- горадзе-героі Фрунзэ.
40
-
41
-
42
- """
43
  )
44
-
45
- model = genai.GenerativeModel("gemini-2.0-pro-exp-02-05")
46
  response = model.generate_content(
47
  [prompt_text, {"mime_type": mime_type, "data": audio_data}]
48
  )
49
-
50
  if response.text:
51
  transcript = response.text.strip()
52
  else:
@@ -59,7 +53,6 @@ def transcribe_audio(audio_file):
59
  except Exception as e:
60
  return f"Нечаканая памылка: {str(e)}"
61
 
62
- # Функцыя для стварэння SRT-файла з субтытрамі
63
  def create_srt(transcript):
64
  srt_path = "subtitles.srt"
65
  try:
@@ -69,7 +62,6 @@ def create_srt(transcript):
69
  except Exception as e:
70
  return f"Памылка пры запісе SRT-файла: {str(e)}", None
71
 
72
- # Функцыя для апрацоўкі аўдыя
73
  def process_audio(audio):
74
  transcript = transcribe_audio(audio)
75
  if transcript.startswith("Памылка"):
@@ -77,22 +69,59 @@ def process_audio(audio):
77
  text, srt_file = create_srt(transcript)
78
  return text, srt_file
79
 
80
- # Выкарыстанне gr.Blocks для стварэння інтэрфейсу з вертыкальным размяшчэннем
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
81
  with gr.Blocks() as demo:
82
  gr.Markdown("# Транскрыпцыя аў��ыя для беларускай мовы")
83
- gr.Markdown("""
84
- ## Загрузіце аўдыёфайл, і субтытры будуць аўтаматычна згенераваны разам з файлам субтытраў.
85
- [Далучайцеся да беларускаймоўнай суполкі ў ТГ](https://t.me/belarusai)
86
- **Падтрымаць праект:** [Buy me a coffee](https://buymeacoffee.com/tuteishygpt)
87
- """)
88
-
89
- audio_input = gr.Audio(type="filepath", label="Аўдыёфайл")
90
-
 
 
 
 
 
91
  btn = gr.Button("Апрацаваць")
92
  transcript_output = gr.Textbox(label="Транскрыпцыя", lines=10)
93
  file_output = gr.File(label="SRT-файл")
94
-
95
-
96
- btn.click(process_audio, inputs=audio_input, outputs=[transcript_output, file_output])
97
 
98
  demo.launch()
 
2
  import gradio as gr
3
  import google.generativeai as genai
4
  import mimetypes
5
+ import moviepy.editor as mp
6
 
 
7
  GEMINI_API_KEY = os.getenv("gemini2")
8
+ MODEL_NAME = os.getenv("mod")
9
 
 
10
  genai.configure(api_key=GEMINI_API_KEY)
11
 
 
12
  def transcribe_audio(audio_file):
13
  try:
14
  mime_type, _ = mimetypes.guess_type(audio_file)
 
16
  return "Немагчыма вызначыць тып файла. Падтрымліваюцца толькі аўдыяфайлы."
17
  with open(audio_file, "rb") as f:
18
  audio_data = f.read()
 
19
  prompt_text = (
20
  """зрабі транскрыпцыю аўдыяфайла для стварэння субтытрыў з часовымі меткамі srt
21
+ не пішы нічога, акрамя транскрыпцыі ў зададзеным фармаце, вось прыклад фармату
22
+ 1
23
+ 00:00:00,659 --> 00:00:03,019
24
+ Вольга Гапеева. Camel Travel.
25
+
26
+ 2
27
+ 00:00:03,699 --> 00:00:09,500
28
+ Раман. Чытае Уладзімір Лісоўскі. Глава першая.
29
+
30
+ 3
31
+ 00:00:10,719 --> 00:00:15,079
32
+ Ісык-Куль. Паважаныя пасажыры!
33
+
34
+ 4
35
+ 00:00:15,619 --> 00:00:19,100
36
+ Наш самалёт прызямліўся ў
37
+ горадзе-героі Фрунзэ.
38
+ """
 
 
39
  )
40
+ model = genai.GenerativeModel(MODEL_NAME)
 
41
  response = model.generate_content(
42
  [prompt_text, {"mime_type": mime_type, "data": audio_data}]
43
  )
 
44
  if response.text:
45
  transcript = response.text.strip()
46
  else:
 
53
  except Exception as e:
54
  return f"Нечаканая памылка: {str(e)}"
55
 
 
56
  def create_srt(transcript):
57
  srt_path = "subtitles.srt"
58
  try:
 
62
  except Exception as e:
63
  return f"Памылка пры запісе SRT-файла: {str(e)}", None
64
 
 
65
  def process_audio(audio):
66
  transcript = transcribe_audio(audio)
67
  if transcript.startswith("Памылка"):
 
69
  text, srt_file = create_srt(transcript)
70
  return text, srt_file
71
 
72
+ def extract_audio_from_video(video_file):
73
+ try:
74
+ clip = mp.VideoFileClip(video_file)
75
+ audio_path = "extracted_audio.wav"
76
+ clip.audio.write_audiofile(audio_path, logger=None)
77
+ return audio_path, None
78
+ except Exception as e:
79
+ return None, f"Памылка пры выдзяленні аўдыі з відэафайла: {str(e)}"
80
+
81
+ def process_video(video):
82
+ audio_path, error = extract_audio_from_video(video)
83
+ if error:
84
+ return error, None
85
+ return process_audio(audio_path)
86
+
87
+ def process_file(audio, video):
88
+ if audio is not None:
89
+ return process_audio(audio)
90
+ elif video is not None:
91
+ return process_video(video)
92
+ else:
93
+ return "Няма файла для апрацоўкі.", None
94
+
95
+ def update_on_audio_change(audio):
96
+ if audio is not None:
97
+ return gr.update(value=None, interactive=False)
98
+ else:
99
+ return gr.update(interactive=True)
100
+
101
+ def update_on_video_change(video):
102
+ if video is not None:
103
+ return gr.update(value=None, interactive=False)
104
+ else:
105
+ return gr.update(interactive=True)
106
+
107
  with gr.Blocks() as demo:
108
  gr.Markdown("# Транскрыпцыя аў��ыя для беларускай мовы")
109
+ gr.Markdown(
110
+ """
111
+ ## Загрузіце аўдыёфайл або відэафайл. Калі загружаны аўдыёфайл, відэа неактыўна, і наадварот.
112
+ Субтытры будуць аўтаматычна згенераваны разам з файлам субтытраў.
113
+ [Далучайцеся да беларускаймоўнай суполкі ў ТГ](https://t.me/belarusai)
114
+ **Падтрымаць праект:** [Buy me a coffee](https://buymeacoffee.com/tuteishygpt)
115
+ """
116
+ )
117
+ with gr.Row():
118
+ audio_input = gr.Audio(type="filepath", label="Аўдыёфайл")
119
+ video_input = gr.Video(type="filepath", label="Відэафайл")
120
+ audio_input.change(fn=update_on_audio_change, inputs=audio_input, outputs=video_input)
121
+ video_input.change(fn=update_on_video_change, inputs=video_input, outputs=audio_input)
122
  btn = gr.Button("Апрацаваць")
123
  transcript_output = gr.Textbox(label="Транскрыпцыя", lines=10)
124
  file_output = gr.File(label="SRT-файл")
125
+ btn.click(fn=process_file, inputs=[audio_input, video_input], outputs=[transcript_output, file_output])
 
 
126
 
127
  demo.launch()