| | import gradio as gr |
| | from utils import process_video |
| |
|
| | |
| | language_map = { |
| | "English": None, |
| | "Hindi": "Helsinki-NLP/opus-mt-en-hi", |
| | "Spanish": "Helsinki-NLP/opus-mt-en-es", |
| | "French": "Helsinki-NLP/opus-mt-en-fr", |
| | "German": "Helsinki-NLP/opus-mt-en-de", |
| | "Telugu": "facebook/nllb-200-distilled-600M", |
| | "Portuguese": "Helsinki-NLP/opus-mt-en-pt", |
| | "Russian": "Helsinki-NLP/opus-mt-en-ru", |
| | "Chinese": "Helsinki-NLP/opus-mt-en-zh", |
| | "Arabic": "Helsinki-NLP/opus-mt-en-ar", |
| | "Japanese": "Helsinki-NLP/opus-mt-en-jap" |
| | } |
| |
|
| | |
| | css = """ |
| | body { |
| | background-color: #1a1a1a; |
| | color: #e0e0e0; |
| | font-family: 'Segoe UI', sans-serif; |
| | } |
| | .gradio-container { |
| | max-width: 1200px; |
| | margin: 0 auto; |
| | padding: 20px; |
| | border-radius: 8px; |
| | background: #2d2d2d; |
| | box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); |
| | } |
| | .file-preview { |
| | border: 2px dashed #007acc; |
| | padding: 20px; |
| | border-radius: 8px; |
| | } |
| | .progress-text { |
| | color: #00ff00; |
| | font-weight: bold; |
| | margin-top: 10px; |
| | } |
| | """ |
| |
|
| | |
| | with gr.Blocks(theme=gr.themes.Monochrome(), css=css) as demo: |
| | gr.Markdown("# π₯ AI-Powered Video Subtitling") |
| | gr.Markdown("Upload a video (MP4/MKV/AVI) and select a language to generate subtitles.") |
| |
|
| | with gr.Row(): |
| | with gr.Column(scale=2): |
| | video_input = gr.File( |
| | label="Upload Video File", |
| | file_types=["mp4", "mkv", "avi"], |
| | elem_classes=["file-preview"] |
| | ) |
| | with gr.Column(scale=1): |
| | language_dropdown = gr.Dropdown( |
| | choices=list(language_map.keys()), |
| | label="Select Subtitle Language", |
| | value="English" |
| | ) |
| |
|
| | generate_button = gr.Button("Generate Subtitles π", elem_classes=["btn-primary"]) |
| | progress_text = gr.Textbox( |
| | label="Status", |
| | interactive=False, |
| | elem_classes=["progress-text"] |
| | ) |
| | output_srt = gr.File(label="Download Subtitles") |
| |
|
| | def generate_subtitles(video_file, language): |
| | try: |
| | |
| | if not video_file.orig_name.lower().endswith(('.mp4', '.mkv', '.avi')): |
| | return None, "β Invalid file type. Please upload an MP4, MKV, or AVI file." |
| |
|
| | |
| | progress = gr.Progress(track_tqdm=True) |
| |
|
| | |
| | progress(0, desc="Initializing...") |
| | srt_path = process_video(video_file.name, language, progress=progress) |
| | if srt_path: |
| | progress(1, desc="β
Subtitles generated successfully!") |
| | return gr.File(srt_path), "β
Subtitles ready for download!" |
| | else: |
| | progress(0, desc="β Error during processing.") |
| | return None, "β Failed to generate subtitles. Check logs." |
| |
|
| | except Exception as e: |
| | progress(0, desc="β Error encountered.") |
| | return None, f"β Error: {str(e)}" |
| |
|
| | generate_button.click( |
| | generate_subtitles, |
| | inputs=[video_input, language_dropdown], |
| | outputs=[output_srt, progress_text] |
| | ) |
| |
|
| | demo.launch() |