import os import gradio as gr from moviepy.video.io.VideoFileClip import VideoFileClip from pydub import AudioSegment import whisper from transformers import pipeline, MarianMTModel, MarianTokenizer import yt_dlp as youtube_dl def download_youtube_video(url): try: os.system(f"yt-dlp -o video.mp4 {url}") return "video.mp4" except Exception as e: return str(e) def extract_audio(video_path): try: audio = AudioSegment.from_file(video_path) audio.export("extracted_audio.mp3", format="mp3") return "extracted_audio.mp3" except Exception as e: return str(e) def transcribe_audio(audio_path): try: model = whisper.load_model("base") result = model.transcribe(audio_path) return result['text'] except Exception as e: return str(e) def summarize_text(text): try: summarizer = pipeline("summarization", model="facebook/bart-large-cnn") summary = summarizer(text, max_length=150, min_length=30, do_sample=False) return summary[0]['summary_text'] except Exception as e: return str(e) def translate_text(text, tgt_lang="es"): try: model_name = f"Helsinki-NLP/opus-mt-en-{tgt_lang}" tokenizer = MarianTokenizer.from_pretrained(model_name) model = MarianMTModel.from_pretrained(model_name) translated = model.generate(**tokenizer(text, return_tensors="pt", padding=True)) return tokenizer.decode(translated[0], skip_special_tokens=True) except Exception as e: return str(e) def process_video(video_file, youtube_url, video_source): video_path = "" # Handle Video Selection Based on Radio Button if video_source == "Local Video" and video_file: video_path = video_file.name elif video_source == "YouTube" and youtube_url: video_path = download_youtube_video(youtube_url) else: return "No valid input provided.", None # Extract Audio and Transcribe audio_path = extract_audio(video_path) transcription = transcribe_audio(audio_path) return transcription, video_path def summarize_and_translate(text, lang): summary = summarize_text(text) translation = translate_text(summary, lang) return summary, translation with gr.Blocks(css=""" .glass-card { background: rgba(255, 255, 255, 0.1); backdrop-filter: blur(10px); border: 1px solid rgba(255, 255, 255, 0.2); border-radius: 20px; padding: 2rem; transition: transform 0.3s ease, box-shadow 0.3s ease; } .btn-blue { background-color: #007BFF; color: white; border-radius: 10px; } .btn-blue:hover { background-color: #0056b3; } .gradient-font { background: linear-gradient(90deg, #ff7f50, #ff6347); -webkit-background-clip: text; color: transparent; } .gradio-container { background-color: black; color: white; } """) as app: gr.Markdown("