JaMugen commited on
Commit
bc89814
·
1 Parent(s): b3fda11

Update Milestone5API.py

Browse files
Files changed (1) hide show
  1. Milestone5API.py +43 -5
Milestone5API.py CHANGED
@@ -3,10 +3,49 @@ import re
3
  from pytube import YouTube
4
  from youtube_transcript_api import YouTubeTranscriptApi
5
  from transformers import MarianMTModel, MarianTokenizer
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6
  def translate_text_file(input_text_path, output_text_path, source_lang='en', target_lang='fr', model_name="Helsinki-NLP/opus-mt-en-fr", batch_size=8):
7
  model = MarianMTModel.from_pretrained(model_name)
8
  tokenizer = MarianTokenizer.from_pretrained(model_name)
9
-
10
  def translate_batch(model, tokenizer, sentences):
11
  sentences = [f"{source_lang}: {sentence}" for sentence in sentences]
12
  input_ids = tokenizer(sentences, return_tensors="pt", padding=True, truncation=True)["input_ids"]
@@ -75,10 +114,9 @@ def download_video_transcript(video_url, source_lang='en', target_lang='fr'):
75
  source_lang=source_lang,
76
  target_lang=target_lang)
77
 
78
- # Delete video file after captions are saved
79
- os.remove(video_file)
80
-
81
- return original_captions, translated_captions, original_filename, f'{captions_path}/{modified_title}_translated.txt'
82
  else:
83
  print("Video ID not found in URL.")
84
  return None, None, None, None
 
3
  from pytube import YouTube
4
  from youtube_transcript_api import YouTubeTranscriptApi
5
  from transformers import MarianMTModel, MarianTokenizer
6
+ import torch
7
+ from TTS.api import TTS
8
+ from moviepy.editor import VideoFileClip
9
+ from pydub import AudioSegment
10
+ def replace_video_audio(video_file_path, new_audio_file_path, output_video_file_path):
11
+
12
+ video = VideoFileClip(video_file_path)
13
+
14
+ new_audio = AudioSegment.from_wav(new_audio_file_path)
15
+
16
+ new_audio = new_audio[:int(video.duration * 1000)]
17
+
18
+ video = video.set_audio(new_audio)
19
+
20
+ video.write_videofile(output_video_file_path, codec="libx264", audio_codec="aac", temp_audiofile='temp_audio.mp3', remove_temp=True)
21
+ def text_to_speech(translated_text, video_path):
22
+ device = "cuda" if torch.cuda.is_available() else "gpu"
23
+ tts = TTS("tts_models/fr/mai/tacotron2-DDC").to(device)
24
+ text_files_dir = f'CS370_Milestone5/captions/{translated_text}'
25
+ output_audio_dir = 'CS370_Milestone5/audio'
26
+ os.makedirs(output_audio_dir, exist_ok=True)
27
+
28
+ for file_name in os.listdir(text_files_dir):
29
+ if file_name.endswith('.txt'):
30
+ file_path = os.path.join(text_files_dir, file_name)
31
+ file_name_only = os.path.splitext(file_name)[0]
32
+
33
+ with open(file_path, 'r', encoding='utf-8') as file:
34
+ translated_text = file.read()
35
+
36
+ output_file_path = os.path.join(output_audio_dir, f"{file_name_only}.wav")
37
+
38
+
39
+ tts.tts_to_file(text=translated_text, file_path=output_file_path)
40
+
41
+ output_video_path = f"CS370_Milestone5/videos/{translated_text.split('.')[0]}_new.mp4"
42
+
43
+ replace_video_audio(video_path, output_file_path, output_video_path)
44
+ return output_video_path
45
  def translate_text_file(input_text_path, output_text_path, source_lang='en', target_lang='fr', model_name="Helsinki-NLP/opus-mt-en-fr", batch_size=8):
46
  model = MarianMTModel.from_pretrained(model_name)
47
  tokenizer = MarianTokenizer.from_pretrained(model_name)
48
+
49
  def translate_batch(model, tokenizer, sentences):
50
  sentences = [f"{source_lang}: {sentence}" for sentence in sentences]
51
  input_ids = tokenizer(sentences, return_tensors="pt", padding=True, truncation=True)["input_ids"]
 
114
  source_lang=source_lang,
115
  target_lang=target_lang)
116
 
117
+ translated_text_filename = f'{captions_path}/{modified_title}_translated.txt'
118
+ new_video_path = text_to_speech(translated_text_filename, video_file)
119
+ return original_captions, translated_captions, original_filename, translated_text_filename, new_video_path
 
120
  else:
121
  print("Video ID not found in URL.")
122
  return None, None, None, None