qqwjq1981 commited on
Commit
10fc6a1
·
verified ·
1 Parent(s): a742df8

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +35 -10
app.py CHANGED
@@ -199,8 +199,29 @@ def update_translations(file, edited_table):
199
  except Exception as e:
200
  raise ValueError(f"Error updating translations: {e}")
201
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
202
 
203
- def upload_and_manage(file, language):
204
  if file is None:
205
  return None, [], None, "No file uploaded. Please upload a video/audio file."
206
 
@@ -210,19 +231,25 @@ def upload_and_manage(file, language):
210
  # Define paths for audio and output files
211
  audio_path = "audio.wav"
212
  output_video_path = "output_video.mp4"
 
213
 
214
  list_available_fonts()
215
 
216
- # Transcribe audio from uploaded media file and get timestamps
217
- transcrption_json = transcribe_video(file.name)
218
 
219
- # Translate the transcription
220
- translated_json = translate_text(transcrption_json, language)
221
-
222
- # Add transcript to video based on timestamps
223
  add_transcript_to_video(file.name, translated_json, output_video_path)
224
 
225
- # Convert the translated JSON into a format for the editable table
 
 
 
 
 
226
  editable_table = [
227
  [float(entry["start"]), entry["original"], entry["translated"], float(entry["end"])]
228
  for entry in translated_json
@@ -235,10 +262,8 @@ def upload_and_manage(file, language):
235
  return translated_json, editable_table, output_video_path, elapsed_time_display
236
 
237
  except Exception as e:
238
- # Handle errors gracefully
239
  return None, [], None, f"An error occurred: {str(e)}"
240
 
241
-
242
  # Gradio Interface with Tabs
243
  def build_interface():
244
  css = """
 
199
  except Exception as e:
200
  raise ValueError(f"Error updating translations: {e}")
201
 
202
+ def generate_voiceover(translated_json, language, output_audio_path):
203
+ from gtts import gTTS
204
+
205
+ # Concatenate translated text into a single string
206
+ full_text = " ".join(entry["translated"] for entry in translated_json)
207
+
208
+ # Generate speech
209
+ tts = gTTS(text=full_text, lang=language)
210
+ tts.save(output_audio_path)
211
+
212
+ def replace_audio_in_video(video_path, new_audio_path, final_video_path):
213
+ import moviepy.editor as mp
214
+
215
+ video = mp.VideoFileClip(video_path)
216
+ new_audio = mp.AudioFileClip(new_audio_path)
217
+
218
+ # Set the new audio
219
+ video = video.set_audio(new_audio)
220
+
221
+ # Save the final output
222
+ video.write_videofile(final_video_path, codec="libx264", audio_codec="aac")
223
 
224
+ def upload_and_manage(file, language, mode="transcription"):
225
  if file is None:
226
  return None, [], None, "No file uploaded. Please upload a video/audio file."
227
 
 
231
  # Define paths for audio and output files
232
  audio_path = "audio.wav"
233
  output_video_path = "output_video.mp4"
234
+ voiceover_path = "voiceover.wav"
235
 
236
  list_available_fonts()
237
 
238
+ # Step 1: Transcribe audio from uploaded media file and get timestamps
239
+ transcription_json = transcribe_video(file.name)
240
 
241
+ # Step 2: Translate the transcription
242
+ translated_json = translate_text(transcription_json, language)
243
+
244
+ # Step 3: Add transcript to video based on timestamps
245
  add_transcript_to_video(file.name, translated_json, output_video_path)
246
 
247
+ # Step 4 (Optional): Generate voiceover if mode is "transcription_voiceover"
248
+ if mode == "transcription_voiceover":
249
+ generate_voiceover(translated_json, language, voiceover_path)
250
+ replace_audio_in_video(output_video_path, voiceover_path, output_video_path)
251
+
252
+ # Convert translated JSON into a format for the editable table
253
  editable_table = [
254
  [float(entry["start"]), entry["original"], entry["translated"], float(entry["end"])]
255
  for entry in translated_json
 
262
  return translated_json, editable_table, output_video_path, elapsed_time_display
263
 
264
  except Exception as e:
 
265
  return None, [], None, f"An error occurred: {str(e)}"
266
 
 
267
  # Gradio Interface with Tabs
268
  def build_interface():
269
  css = """