younes21000 commited on
Commit
c9612c1
·
verified ·
1 Parent(s): 7d3fb86

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +45 -0
app.py ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import moviepy.editor as mp
3
+ from transformers import pipeline
4
+
5
+ # Load Whisper model for speech-to-text
6
+ asr = pipeline("automatic-speech-recognition", model="openai/whisper-large")
7
+
8
+ # MarianMT or M2M100 for translation (multi-language)
9
+ translator = pipeline("translation", model="facebook/m2m100_418M")
10
+
11
+ def generate_subtitles(video_path, target_language):
12
+ # Extract audio from video
13
+ video = mp.VideoFileClip(video_path)
14
+ audio = video.audio
15
+ audio.write_audiofile("temp_audio.wav", codec='pcm_s16le')
16
+
17
+ # Convert speech to text (ASR using Whisper)
18
+ with open("temp_audio.wav", "rb") as audio_file:
19
+ transcription = asr(audio_file)["text"]
20
+
21
+ # Translate transcription to the target language
22
+ translation_pipeline = pipeline('translation', model='facebook/m2m100_418M')
23
+ translated_subtitles = translation_pipeline(transcription, forced_bos_token_id=translation_pipeline.tokenizer.get_lang_id(target_language))[0]["translation_text"]
24
+
25
+ # Return subtitles (text for now)
26
+ subtitles = f"Original: {transcription}\nTranslated: {translated_subtitles}"
27
+ return subtitles
28
+
29
+ # Define Gradio interface
30
+ def subtitle_video(video_file, target_language):
31
+ video_path = video_file.name
32
+ return generate_subtitles(video_path, target_language)
33
+
34
+ # Gradio app layout
35
+ interface = gr.Interface(
36
+ fn=subtitle_video,
37
+ inputs=[
38
+ gr.Video(label="Upload Video"),
39
+ gr.Textbox(label="Target Language Code (e.g., 'fr' for French, 'es' for Spanish)"),
40
+ ],
41
+ outputs="text",
42
+ title="Automatic Video Subtitler & Translator"
43
+ )
44
+
45
+ interface.launch()