hivecorp commited on
Commit
501e57f
·
verified ·
1 Parent(s): f1779f5

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +22 -6
app.py CHANGED
@@ -4,6 +4,7 @@ import asyncio
4
  import tempfile
5
  import os
6
  from moviepy.editor import AudioFileClip
 
7
 
8
  # Get all available voices
9
  async def get_voices():
@@ -26,16 +27,28 @@ async def text_to_speech(text, voice, rate, pitch):
26
  await communicate.save(tmp_path)
27
  return tmp_path, None
28
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
  # Generate SRT file based on user preferences
30
  def generate_srt(words, audio_duration, srt_path, words_per_line, lines_per_paragraph):
31
- total_words = len(words)
32
-
33
- # Calculate how long each segment will be displayed
34
- segment_duration = audio_duration / (total_words // words_per_line // lines_per_paragraph) # Calculate duration based on total segments
35
-
36
  current_time = 0
37
  with open(srt_path, 'w', encoding='utf-8') as srt_file:
38
- for i in range(0, total_words, words_per_line):
39
  # Gather lines based on the defined words per line
40
  lines = words[i:i + words_per_line]
41
  line_text = ' '.join(lines)
@@ -73,6 +86,9 @@ async def text_to_audio_and_srt(text, voice, rate, pitch, words_per_line, lines_
73
  audio_clip = AudioFileClip(audio_path)
74
  audio_duration = audio_clip.duration
75
 
 
 
 
76
  # Generate SRT file based on the entire text
77
  base_name = os.path.splitext(audio_path)[0]
78
  srt_path = f"{base_name}_subtitle.srt"
 
4
  import tempfile
5
  import os
6
  from moviepy.editor import AudioFileClip
7
+ import speech_recognition as sr
8
 
9
  # Get all available voices
10
  async def get_voices():
 
27
  await communicate.save(tmp_path)
28
  return tmp_path, None
29
 
30
+ # Function to analyze audio and get speech timing
31
+ def analyze_audio(audio_path):
32
+ recognizer = sr.Recognizer()
33
+ with sr.AudioFile(audio_path) as source:
34
+ audio_data = recognizer.record(source)
35
+ # Recognize speech using Google Web Speech API
36
+ try:
37
+ text = recognizer.recognize_google(audio_data)
38
+ return text
39
+ except sr.UnknownValueError:
40
+ return ""
41
+ except sr.RequestError:
42
+ return ""
43
+
44
  # Generate SRT file based on user preferences
45
  def generate_srt(words, audio_duration, srt_path, words_per_line, lines_per_paragraph):
46
+ total_segments = (len(words) // words_per_line) // lines_per_paragraph + 1
47
+ segment_duration = audio_duration / total_segments # Calculate duration for each segment
48
+
 
 
49
  current_time = 0
50
  with open(srt_path, 'w', encoding='utf-8') as srt_file:
51
+ for i in range(0, len(words), words_per_line):
52
  # Gather lines based on the defined words per line
53
  lines = words[i:i + words_per_line]
54
  line_text = ' '.join(lines)
 
86
  audio_clip = AudioFileClip(audio_path)
87
  audio_duration = audio_clip.duration
88
 
89
+ # Analyze audio to get the actual spoken text
90
+ spoken_text = analyze_audio(audio_path)
91
+
92
  # Generate SRT file based on the entire text
93
  base_name = os.path.splitext(audio_path)[0]
94
  srt_path = f"{base_name}_subtitle.srt"