import re import gradio as gr import torch from transformers import pipeline from youtube_transcript_api import YouTubeTranscriptApi from youtube_transcript_api.formatters import TextFormatter # Initialize the summarization pipeline text_summary = pipeline("summarization", model="sshleifer/distilbart-cnn-12-6", torch_dtype=torch.bfloat16) def summary(text_youtube): output = text_summary(text_youtube) return output[0]['summary_text'] # def extract_video_id(url): # # Regex to extract the video ID from various YouTube URL formats # regex = r"(?:youtube\.com\/(?:[^\/\n\s]+\/\S+\/|(?:v|e(?:mbed)?)\/|\S*?[?&]v=)|youtu\.be\/)([a-zA-Z0-9_-]{11})" # match = re.search(regex, url) # if match: # return match.group(1) # return None def extract_video_id(url): # Updated regex to extract the video ID from various YouTube URL formats, including /shorts/ and others with parameters regex = r"(?:youtube\.com\/(?:[^\/\n\s]+\/\S+\/|(?:v|e(?:mbed)?)\/|\S*?[?&]v=|shorts\/)|youtu\.be\/)([a-zA-Z0-9_-]{11})" match = re.search(regex, url) if match: return match.group(1) return None def get_youtube_transcript(video_url): video_id = extract_video_id(video_url) if not video_id: return "Video ID could not be extracted.", "" try: # Fetch the transcript transcript = YouTubeTranscriptApi.get_transcript(video_id) # Format the transcript into plain text formatter = TextFormatter() text_transcript = formatter.format_transcript(transcript) summary_text = summary(text_transcript) return text_transcript, summary_text except Exception as e: return f"An error occurred: {e}", "" # Remove any existing Gradio interfaces gr.close_all() # Define the Gradio interface demo = gr.Interface( fn=get_youtube_transcript, inputs=[gr.Textbox(label="Input YouTube URL to summarize", lines=1)], outputs=[ gr.Textbox(label="Text extracted from video", lines=4), gr.Textbox(label="Summarized text", lines=4) ], title="YouTube Script for Text Extract & Summarizer" ) # Launch the Gradio interface demo.launch(auth=('youtube','test@123'))