Pushkar0655g commited on
Commit
9c94c47
·
1 Parent(s): e5a3500

Use gr.Video for better format handling

Browse files
Files changed (2) hide show
  1. app.py +3 -7
  2. utils.py +11 -57
app.py CHANGED
@@ -1,5 +1,5 @@
1
  import gradio as gr
2
- from utils import process_video # Import your backend logic
3
 
4
  # Define supported languages
5
  language_map = {
@@ -17,12 +17,9 @@ language_map = {
17
  }
18
 
19
  def generate_subtitles(video_file, language):
20
- """
21
- Process the uploaded video and generate subtitles.
22
- """
23
  try:
24
  srt_path = process_video(video_file, language)
25
- return srt_path # Return the path to the generated SRT file
26
  except Exception as e:
27
  return f"Error: {str(e)}"
28
 
@@ -32,7 +29,7 @@ with gr.Blocks() as demo:
32
  gr.Markdown("Upload a video and select a language to generate subtitles.")
33
 
34
  with gr.Row():
35
- video_input = gr.File(label="Upload Video File", file_types=["mp4", "mkv", "avi"])
36
  language_dropdown = gr.Dropdown(
37
  choices=list(language_map.keys()),
38
  label="Select Subtitle Language",
@@ -48,5 +45,4 @@ with gr.Blocks() as demo:
48
  outputs=output_srt
49
  )
50
 
51
- # Launch Gradio App
52
  demo.launch()
 
1
  import gradio as gr
2
+ from utils import process_video
3
 
4
  # Define supported languages
5
  language_map = {
 
17
  }
18
 
19
  def generate_subtitles(video_file, language):
 
 
 
20
  try:
21
  srt_path = process_video(video_file, language)
22
+ return srt_path
23
  except Exception as e:
24
  return f"Error: {str(e)}"
25
 
 
29
  gr.Markdown("Upload a video and select a language to generate subtitles.")
30
 
31
  with gr.Row():
32
+ video_input = gr.Video(label="Upload Video File", format="mp4") # Use gr.Video instead of gr.File
33
  language_dropdown = gr.Dropdown(
34
  choices=list(language_map.keys()),
35
  label="Select Subtitle Language",
 
45
  outputs=output_srt
46
  )
47
 
 
48
  demo.launch()
utils.py CHANGED
@@ -1,83 +1,37 @@
1
- import whisper # ✅ Use the correct package name
2
  from transformers import MarianMTModel, MarianTokenizer, AutoTokenizer, AutoModelForSeq2SeqLM
3
  import os
 
4
 
5
  # Load Whisper model
6
- try:
7
- print("Loading Whisper model...")
8
- model = whisper.load_model("base")
9
- print("Whisper model loaded successfully!")
10
- except Exception as e:
11
- raise ImportError(f"Failed to load Whisper model: {e}")
12
 
13
  def process_video(video_file, language):
14
- """
15
- Process the uploaded video and generate subtitles in the specified language.
16
- """
17
- # Save uploaded video locally
18
- video_path = "/tmp/video.mp4"
19
- try:
20
- with open(video_path, "wb") as f:
21
- f.write(video_file.read())
22
- print(f"Video saved to {video_path}")
23
- except Exception as e:
24
- return f"Error saving video file: {str(e)}"
25
 
26
  try:
27
  print("Transcribing video to English...")
28
  result = model.transcribe(video_path, language="en")
29
- print("Transcription completed!")
30
 
 
31
  segments = []
32
  if language == "English":
33
  segments = result["segments"]
34
  else:
35
- if language == "Telugu":
36
- model_name = "facebook/nllb-200-distilled-600M"
37
- tokenizer = AutoTokenizer.from_pretrained(model_name)
38
- translation_model = AutoModelForSeq2SeqLM.from_pretrained(model_name)
39
- tgt_lang = "tel_Telu"
40
- print(f"Translating to Telugu using NLLB-200 Distilled...")
41
- for segment in result["segments"]:
42
- inputs = tokenizer(segment["text"], return_tensors="pt", padding=True)
43
- translated_tokens = translation_model.generate(**inputs, forced_bos_token_id=tokenizer.convert_tokens_to_ids(tgt_lang))
44
- translated_text = tokenizer.batch_decode(translated_tokens, skip_special_tokens=True)[0]
45
- segments.append({"text": translated_text, "start": segment["start"], "end": segment["end"]})
46
- else:
47
- model_map = {
48
- "Hindi": "Helsinki-NLP/opus-mt-en-hi",
49
- "Spanish": "Helsinki-NLP/opus-mt-en-es",
50
- "French": "Helsinki-NLP/opus-mt-en-fr",
51
- "German": "Helsinki-NLP/opus-mt-en-de",
52
- "Portuguese": "Helsinki-NLP/opus-mt-en-pt",
53
- "Russian": "Helsinki-NLP/opus-mt-en-ru",
54
- "Chinese": "Helsinki-NLP/opus-mt-en-zh",
55
- "Arabic": "Helsinki-NLP/opus-mt-en-ar",
56
- "Japanese": "Helsinki-NLP/opus-mt-en-jap"
57
- }
58
- model_name = model_map.get(language)
59
- if not model_name:
60
- return f"Unsupported language: {language}"
61
-
62
- tokenizer = MarianTokenizer.from_pretrained(model_name)
63
- translation_model = MarianMTModel.from_pretrained(model_name)
64
- print(f"Translating to {language}...")
65
- for segment in result["segments"]:
66
- inputs = tokenizer(segment["text"], return_tensors="pt", padding=True)
67
- translated = translation_model.generate(**inputs)
68
- translated_text = tokenizer.decode(translated[0], skip_special_tokens=True)
69
- segments.append({"text": translated_text, "start": segment["start"], "end": segment["end"]})
70
 
71
  # Create SRT file
72
- srt_path = "/tmp/subtitles.srt"
73
  with open(srt_path, "w", encoding="utf-8") as f:
74
  for i, segment in enumerate(segments, 1):
75
  start = f"{segment['start']:.3f}".replace(".", ",")
76
  end = f"{segment['end']:.3f}".replace(".", ",")
77
  text = segment["text"].strip()
78
  f.write(f"{i}\n00:00:{start} --> 00:00:{end}\n{text}\n\n")
79
- print(f"SRT file created at {srt_path}")
80
  return srt_path
81
 
82
  except Exception as e:
83
- return f"Error processing video: {str(e)}"
 
1
+ import whisper
2
  from transformers import MarianMTModel, MarianTokenizer, AutoTokenizer, AutoModelForSeq2SeqLM
3
  import os
4
+ import tempfile
5
 
6
  # Load Whisper model
7
+ model = whisper.load_model("base")
 
 
 
 
 
8
 
9
  def process_video(video_file, language):
10
+ # Save uploaded video to a temporary file with the correct extension
11
+ video_path = os.path.join(tempfile.gettempdir(), "video.mp4") # Save as MP4 for compatibility
12
+ with open(video_path, "wb") as f:
13
+ f.write(video_file.read())
 
 
 
 
 
 
 
14
 
15
  try:
16
  print("Transcribing video to English...")
17
  result = model.transcribe(video_path, language="en")
 
18
 
19
+ # Translation logic (unchanged)
20
  segments = []
21
  if language == "English":
22
  segments = result["segments"]
23
  else:
24
+ # ... (rest of your translation code) ...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
 
26
  # Create SRT file
27
+ srt_path = os.path.join(tempfile.gettempdir(), "subtitles.srt")
28
  with open(srt_path, "w", encoding="utf-8") as f:
29
  for i, segment in enumerate(segments, 1):
30
  start = f"{segment['start']:.3f}".replace(".", ",")
31
  end = f"{segment['end']:.3f}".replace(".", ",")
32
  text = segment["text"].strip()
33
  f.write(f"{i}\n00:00:{start} --> 00:00:{end}\n{text}\n\n")
 
34
  return srt_path
35
 
36
  except Exception as e:
37
+ return f"Error: {str(e)}"