Pushkar0655g commited on
Commit
11a77dd
Β·
1 Parent(s): 1f596d8

Resolved merge conflicts and updated app

Browse files
Files changed (2) hide show
  1. app.py +3 -51
  2. utils.py +0 -32
app.py CHANGED
@@ -1,5 +1,5 @@
1
  import gradio as gr
2
- from utils import process_video # Ensure this points to the updated utils.py
3
 
4
  # Define supported languages
5
  language_map = {
@@ -16,43 +16,17 @@ language_map = {
16
  "Japanese": "Helsinki-NLP/opus-mt-en-jap"
17
  }
18
 
19
- <<<<<<< HEAD
20
- # Custom CSS for dark mode and animations
21
- css = """
22
- body {
23
- background-color: #1a1a1a;
24
- color: #e0e0e0;
25
- font-family: 'Arial', sans-serif;
26
- =======
27
- # Custom CSS for a Windows-like professional look
28
  css = """
29
  body {
30
  background-color: #1a1a1a;
31
  color: #e0e0e0;
32
  font-family: 'Segoe UI', sans-serif;
33
- >>>>>>> e219dd283e6bfab4f30d250a687e17c1cc380d47
34
  }
35
  .gradio-container {
36
  max-width: 1200px;
37
  margin: 0 auto;
38
  padding: 20px;
39
- <<<<<<< HEAD
40
- border-radius: 10px;
41
- box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
42
- }
43
- .file-preview {
44
- border: 2px dashed #6c757d;
45
- padding: 20px;
46
- border-radius: 10px;
47
- }
48
- .progress-text {
49
- font-size: 16px;
50
- color: #28a745;
51
- animation: blink 1s infinite;
52
- }
53
- @keyframes blink {
54
- 50% { opacity: 0.5; }
55
- =======
56
  border-radius: 8px;
57
  background: #2d2d2d;
58
  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
@@ -66,7 +40,6 @@ body {
66
  color: #00ff00;
67
  font-weight: bold;
68
  margin-top: 10px;
69
- >>>>>>> e219dd283e6bfab4f30d250a687e17c1cc380d47
70
  }
71
  """
72
 
@@ -79,7 +52,7 @@ with gr.Blocks(theme=gr.themes.Monochrome(), css=css) as demo:
79
  with gr.Column(scale=2):
80
  video_input = gr.File(
81
  label="Upload Video File",
82
- file_types=["mp4", "mkv", "avi"],
83
  elem_classes=["file-preview"]
84
  )
85
  with gr.Column(scale=1):
@@ -89,15 +62,9 @@ with gr.Blocks(theme=gr.themes.Monochrome(), css=css) as demo:
89
  value="English"
90
  )
91
 
92
- <<<<<<< HEAD
93
- generate_button = gr.Button("Generate Subtitles πŸš€")
94
- progress_text = gr.Textbox(
95
- label="Progress",
96
- =======
97
  generate_button = gr.Button("Generate Subtitles πŸš€", elem_classes=["btn-primary"])
98
  progress_text = gr.Textbox(
99
  label="Status",
100
- >>>>>>> e219dd283e6bfab4f30d250a687e17c1cc380d47
101
  interactive=False,
102
  elem_classes=["progress-text"]
103
  )
@@ -109,20 +76,6 @@ with gr.Blocks(theme=gr.themes.Monochrome(), css=css) as demo:
109
  if not video_file.name.lower().endswith(('.mp4', '.mkv', '.avi')):
110
  return None, "❌ Invalid file type. Please upload an MP4, MKV, or AVI file."
111
 
112
- <<<<<<< HEAD
113
- # Update progress
114
- progress = "πŸ”„ Processing video..."
115
- yield None, progress # Initial progress update
116
-
117
- # Process video
118
- srt_path = process_video(video_file.name, language)
119
- if srt_path:
120
- yield gr.File(srt_path), "βœ… Subtitles generated successfully!"
121
- else:
122
- yield None, "❌ Error during processing. Check logs."
123
- except Exception as e:
124
- yield None, f"❌ Error: {str(e)}"
125
- =======
126
  # Initialize progress tracking
127
  progress = gr.Progress(track_tqdm=True)
128
 
@@ -139,7 +92,6 @@ with gr.Blocks(theme=gr.themes.Monochrome(), css=css) as demo:
139
  except Exception as e:
140
  progress(0, desc="❌ Error encountered.")
141
  return None, f"❌ Error: {str(e)}"
142
- >>>>>>> e219dd283e6bfab4f30d250a687e17c1cc380d47
143
 
144
  generate_button.click(
145
  generate_subtitles,
 
1
  import gradio as gr
2
+ from utils import process_video
3
 
4
  # Define supported languages
5
  language_map = {
 
16
  "Japanese": "Helsinki-NLP/opus-mt-en-jap"
17
  }
18
 
19
+ # Custom CSS for a professional look
 
 
 
 
 
 
 
 
20
  css = """
21
  body {
22
  background-color: #1a1a1a;
23
  color: #e0e0e0;
24
  font-family: 'Segoe UI', sans-serif;
 
25
  }
26
  .gradio-container {
27
  max-width: 1200px;
28
  margin: 0 auto;
29
  padding: 20px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
  border-radius: 8px;
31
  background: #2d2d2d;
32
  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
 
40
  color: #00ff00;
41
  font-weight: bold;
42
  margin-top: 10px;
 
43
  }
44
  """
45
 
 
52
  with gr.Column(scale=2):
53
  video_input = gr.File(
54
  label="Upload Video File",
55
+ file_types=["mp4", "mkv", "avi"], # Extensions without leading dots
56
  elem_classes=["file-preview"]
57
  )
58
  with gr.Column(scale=1):
 
62
  value="English"
63
  )
64
 
 
 
 
 
 
65
  generate_button = gr.Button("Generate Subtitles πŸš€", elem_classes=["btn-primary"])
66
  progress_text = gr.Textbox(
67
  label="Status",
 
68
  interactive=False,
69
  elem_classes=["progress-text"]
70
  )
 
76
  if not video_file.name.lower().endswith(('.mp4', '.mkv', '.avi')):
77
  return None, "❌ Invalid file type. Please upload an MP4, MKV, or AVI file."
78
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
79
  # Initialize progress tracking
80
  progress = gr.Progress(track_tqdm=True)
81
 
 
92
  except Exception as e:
93
  progress(0, desc="❌ Error encountered.")
94
  return None, f"❌ Error: {str(e)}"
 
95
 
96
  generate_button.click(
97
  generate_subtitles,
utils.py CHANGED
@@ -7,17 +7,6 @@ import subprocess
7
  # Load Whisper model
8
  model = whisper.load_model("base")
9
 
10
- <<<<<<< HEAD
11
- def process_video(video_path, language):
12
- # Create a temporary directory
13
- temp_dir = tempfile.gettempdir()
14
- output_video_path = os.path.join(temp_dir, "converted_video.mp4")
15
- srt_path = os.path.join(temp_dir, "subtitles.srt")
16
-
17
- try:
18
- # Convert video to MP4 using ffmpeg
19
- print(f"Converting video: {video_path} to MP4...")
20
- =======
21
  def process_video(video_path, language, progress=None):
22
  output_video_path = os.path.join(tempfile.gettempdir(), "converted_video.mp4")
23
  srt_path = os.path.join(tempfile.gettempdir(), "subtitles.srt")
@@ -26,21 +15,12 @@ def process_video(video_path, language, progress=None):
26
  # Convert video to MP4 using ffmpeg
27
  if progress:
28
  progress(0.2, desc="πŸ”„ Converting video to MP4...")
29
- >>>>>>> e219dd283e6bfab4f30d250a687e17c1cc380d47
30
  subprocess.run(
31
  ["ffmpeg", "-i", video_path, "-c:v", "libx264", "-preset", "fast", output_video_path],
32
  check=True,
33
  stdout=subprocess.PIPE,
34
  stderr=subprocess.PIPE
35
  )
36
- <<<<<<< HEAD
37
- print("Video converted successfully!")
38
-
39
- # Transcribe video
40
- print("Transcribing video...")
41
- result = model.transcribe(output_video_path, language="en")
42
- print("Transcription completed!")
43
- =======
44
 
45
  # Transcribe video
46
  if progress:
@@ -48,7 +28,6 @@ def process_video(video_path, language, progress=None):
48
  result = model.transcribe(output_video_path, language="en")
49
  if progress:
50
  progress(0.6, desc="🌐 Translating subtitles...")
51
- >>>>>>> e219dd283e6bfab4f30d250a687e17c1cc380d47
52
 
53
  # Translation logic
54
  segments = []
@@ -72,10 +51,6 @@ def process_video(video_path, language, progress=None):
72
  return None
73
 
74
  # Load translation model
75
- <<<<<<< HEAD
76
- print(f"Loading translation model: {model_name}")
77
- =======
78
- >>>>>>> e219dd283e6bfab4f30d250a687e17c1cc380d47
79
  if language == "Telugu":
80
  tokenizer = AutoTokenizer.from_pretrained(model_name)
81
  translation_model = AutoModelForSeq2SeqLM.from_pretrained(model_name)
@@ -97,23 +72,16 @@ def process_video(video_path, language, progress=None):
97
  segments.append({"text": translated_text, "start": segment["start"], "end": segment["end"]})
98
 
99
  # Create SRT file
100
- <<<<<<< HEAD
101
- =======
102
  if progress:
103
  progress(0.8, desc="πŸ“ Generating SRT file...")
104
- >>>>>>> e219dd283e6bfab4f30d250a687e17c1cc380d47
105
  with open(srt_path, "w", encoding="utf-8") as f:
106
  for i, segment in enumerate(segments, 1):
107
  start = f"{segment['start']:.3f}".replace(".", ",")
108
  end = f"{segment['end']:.3f}".replace(".", ",")
109
  text = segment["text"].strip()
110
  f.write(f"{i}\n00:00:{start} --> 00:00:{end}\n{text}\n\n")
111
- <<<<<<< HEAD
112
- print(f"SRT file saved to {srt_path}")
113
- =======
114
  if progress:
115
  progress(1.0, desc="βœ… Done!")
116
- >>>>>>> e219dd283e6bfab4f30d250a687e17c1cc380d47
117
  return srt_path
118
 
119
  except subprocess.CalledProcessError as e:
 
7
  # Load Whisper model
8
  model = whisper.load_model("base")
9
 
 
 
 
 
 
 
 
 
 
 
 
10
  def process_video(video_path, language, progress=None):
11
  output_video_path = os.path.join(tempfile.gettempdir(), "converted_video.mp4")
12
  srt_path = os.path.join(tempfile.gettempdir(), "subtitles.srt")
 
15
  # Convert video to MP4 using ffmpeg
16
  if progress:
17
  progress(0.2, desc="πŸ”„ Converting video to MP4...")
 
18
  subprocess.run(
19
  ["ffmpeg", "-i", video_path, "-c:v", "libx264", "-preset", "fast", output_video_path],
20
  check=True,
21
  stdout=subprocess.PIPE,
22
  stderr=subprocess.PIPE
23
  )
 
 
 
 
 
 
 
 
24
 
25
  # Transcribe video
26
  if progress:
 
28
  result = model.transcribe(output_video_path, language="en")
29
  if progress:
30
  progress(0.6, desc="🌐 Translating subtitles...")
 
31
 
32
  # Translation logic
33
  segments = []
 
51
  return None
52
 
53
  # Load translation model
 
 
 
 
54
  if language == "Telugu":
55
  tokenizer = AutoTokenizer.from_pretrained(model_name)
56
  translation_model = AutoModelForSeq2SeqLM.from_pretrained(model_name)
 
72
  segments.append({"text": translated_text, "start": segment["start"], "end": segment["end"]})
73
 
74
  # Create SRT file
 
 
75
  if progress:
76
  progress(0.8, desc="πŸ“ Generating SRT file...")
 
77
  with open(srt_path, "w", encoding="utf-8") as f:
78
  for i, segment in enumerate(segments, 1):
79
  start = f"{segment['start']:.3f}".replace(".", ",")
80
  end = f"{segment['end']:.3f}".replace(".", ",")
81
  text = segment["text"].strip()
82
  f.write(f"{i}\n00:00:{start} --> 00:00:{end}\n{text}\n\n")
 
 
 
83
  if progress:
84
  progress(1.0, desc="βœ… Done!")
 
85
  return srt_path
86
 
87
  except subprocess.CalledProcessError as e: