import gradio as gr import whisper import moviepy.editor as mp import tempfile import os # Load Whisper model (tiny = fast, small = accurate) model = whisper.load_model("tiny") def generate_subtitles(video_path): try: # Create temporary directory temp_dir = tempfile.mkdtemp() input_path = os.path.join(temp_dir, "input.mp4") os.rename(video_path, input_path) # Extract audio clip = mp.VideoFileClip(input_path) audio_path = os.path.join(temp_dir, "audio.wav") clip.audio.write_audiofile(audio_path, logger=None) # Transcribe audio using Whisper result = model.transcribe(audio_path) text = result["text"] lang = result["language"] # Make green background video w, h = clip.size bg = mp.ColorClip(size=(w, h), color=(0, 255, 0), duration=clip.duration) # Combine background + video final = mp.CompositeVideoClip([bg, clip.set_position("center")]) # Save final video output_path = os.path.join(temp_dir, "output.mp4") final.write_videofile(output_path, codec="libx264", audio_codec="aac", logger=None) return output_path, lang, text except Exception as e: return None, "Error", str(e) # ----------- UI (VOZO Blink Style) ----------- with gr.Blocks(title="VOZO-style Auto Subtitle Generator") as demo: gr.Markdown( """ # 🎬 **Auto Subtitle Generator (VOZO Blink Style)** Upload any short Hindi, English, Hinglish, or Indian English video.
This AI auto-detects the language and generates subtitles with a green background overlay.
_(Inspired by Blink Captions / VOZO)_ """ ) with gr.Row(): input_video = gr.Video(label="🎥 Upload your video", interactive=True) output_video = gr.Video(label="📺 Subtitled Output") with gr.Row(): detected_lang = gr.Textbox(label="🌐 Detected Language") subtitle_text = gr.Textbox(label="📝 Generated Subtitles") run_btn = gr.Button("🚀 Generate Subtitles", variant="primary") run_btn.click(fn=generate_subtitles, inputs=[input_video], outputs=[output_video, detected_lang, subtitle_text]) demo.launch()