pip install youtube-transcript-api nltk sumy
import tkinter as tk
from tkinter import messagebox
from youtube_transcript_api import YouTubeTranscriptApi
from sumy.parsers.plaintext import PlaintextParser
from sumy.nlp.tokenizers import Tokenizer
from sumy.summarizers.lsa import LsaSummarizer
# Function to extract video ID from URL
def extract_video_id(url):
if "youtube.com/watch?v=" in url:
return url.split("v=")[1].split("&")[0]
elif "youtu.be/" in url:
return url.split("youtu.be/")[1].split("?")[0]
else:
return None
# Function to fetch transcript
def get_transcript(video_url):
video_id = extract_video_id(video_url)
if not video_id:
messagebox.showerror("Error", "Invalid YouTube URL")
return None
try:
transcript = YouTubeTranscriptApi.get_transcript(video_id)
full_text = " ".join([entry["text"] for entry in transcript])
return full_text
except Exception as e:
messagebox.showerror("Error", f"Could not fetch transcript: {str(e)}")
return None
# Function to summarize text
def summarize_text(text, num_sentences=3):
parser = PlaintextParser.from_string(text, Tokenizer("english"))
summarizer = LsaSummarizer()
summary = summarizer(parser.document, num_sentences)
return " ".join(str(sentence) for sentence in summary)
# Function to fetch and summarize
def summarize_video():
video_url = url_entry.get()
transcript = get_transcript(video_url)
if transcript:
summary = summarize_text(transcript)
output_text.delete("1.0", tk.END)
output_text.insert(tk.END, summary)
# GUI
root = tk.Tk()
root.title("YouTube Video Summarizer")
tk.Label(root, text="Enter YouTube Video URL:").pack()
url_entry = tk.Entry(root, width=50)
url_entry.pack()
tk.Button(root, text="Summarize", command=summarize_video).pack()
output_text = tk.Text(root, height=10, width=60)
output_text.pack()
root.mainloop()