salomonsky commited on
Commit
0b137ef
·
1 Parent(s): 1b332f4

Update dub.py

Browse files
Files changed (1) hide show
  1. dub.py +26 -20
dub.py CHANGED
@@ -7,38 +7,44 @@ import speech_recognition as sr
7
 
8
  def text_to_speech(text, lang='es'):
9
  tts = gTTS(text=text, lang=lang, slow=False)
10
- temp_file = tempfile.NamedTemporaryFile(delete=False, suffix=".mp3")
11
- tts.save(temp_file.name)
12
- return temp_file.name
13
 
14
  def transcribe_and_dub(video_file):
15
  temp_folder = tempfile.mkdtemp()
16
-
17
  recognizer = sr.Recognizer()
18
 
19
- with mp.VideoFileClip(video_file) as video:
20
- audio_file = os.path.join(temp_folder, "audio.wav")
21
- video.audio.write_audiofile(audio_file)
22
-
 
23
  process = os.popen(f'ffmpeg -i "{audio_file}" -ar 16000 -ac 1 "{os.path.join(temp_folder, "audio16000.wav")}"')
24
  process.close()
25
-
26
  audio_file = os.path.join(temp_folder, "audio16000.wav")
27
 
28
  with sr.AudioFile(audio_file) as source:
29
  audio = recognizer.record(source)
30
 
31
- text = recognizer.recognize_google(audio, language='es')
32
 
33
- dubbed_audio_file = text_to_speech(text)
34
- dubbed_video_file = os.path.join(temp_folder, "dubbed_video.mp4")
35
 
36
- with mp.VideoFileClip(video_file) as original_video:
37
  dubbed_audio = AudioSegment.from_mp3(dubbed_audio_file)
38
- dubbed_audio = dubbed_audio[:len(original_video.audio)]
39
- dubbed_audio.export(os.path.join(temp_folder, "dubbed_audio.wav"), format="wav")
40
-
41
- process = os.popen(f'ffmpeg -i "{video_file}" -i "{os.path.join(temp_folder, "dubbed_audio.wav")}" -c:v copy -c:a aac -strict experimental -map 0:v:0 -map 1:a:0 "{dubbed_video_file}"')
42
- process.close()
43
-
44
- return dubbed_video_file
 
 
 
 
 
 
 
7
 
8
  def text_to_speech(text, lang='es'):
9
  tts = gTTS(text=text, lang=lang, slow=False)
10
+ with tempfile.NamedTemporaryFile(delete=False, suffix=".mp3") as temp_file:
11
+ tts.save(temp_file.name)
12
+ return temp_file.name
13
 
14
  def transcribe_and_dub(video_file):
15
  temp_folder = tempfile.mkdtemp()
16
+
17
  recognizer = sr.Recognizer()
18
 
19
+ try:
20
+ with mp.VideoFileClip(video_file) as video:
21
+ audio_file = os.path.join(temp_folder, "audio.wav")
22
+ video.audio.write_audiofile(audio_file)
23
+
24
  process = os.popen(f'ffmpeg -i "{audio_file}" -ar 16000 -ac 1 "{os.path.join(temp_folder, "audio16000.wav")}"')
25
  process.close()
26
+
27
  audio_file = os.path.join(temp_folder, "audio16000.wav")
28
 
29
  with sr.AudioFile(audio_file) as source:
30
  audio = recognizer.record(source)
31
 
32
+ text = recognizer.recognize_google(audio, language='es')
33
 
34
+ dubbed_audio_file = text_to_speech(text)
 
35
 
36
+ original_audio = AudioSegment.from_file(audio_file, format="wav")
37
  dubbed_audio = AudioSegment.from_mp3(dubbed_audio_file)
38
+
39
+ final_audio = original_audio.overlay(dubbed_audio)
40
+
41
+ video_with_dubbed_audio = mp.VideoFileClip(video_file).set_audio(final_audio)
42
+
43
+ dubbed_video_file = os.path.join(temp_folder, "dubbed_video.mp4")
44
+ video_with_dubbed_audio.write_videofile(dubbed_video_file, codec="libx264", audio_codec="aac", verbose=False)
45
+
46
+ return dubbed_video_file
47
+
48
+ except Exception as e:
49
+ print(f"Error during transcription and dubbing: {str(e)}")
50
+ return None