|
|
|
from youtube_transcript_api import YouTubeTranscriptApi |
|
from youtube_transcript_api.formatters import TextFormatter |
|
import re |
|
import torch |
|
import gradio as gr |
|
from transformers import pipeline |
|
|
|
|
|
text_summary = pipeline("summarization", model="sshleifer/distilbart-cnn-12-6", |
|
torch_dtype=torch.bfloat16, device=-1) |
|
|
|
def summarize_text(input_text): |
|
"""Summarizes the given text.""" |
|
if not input_text.strip(): |
|
return "No transcript available to summarize." |
|
output = text_summary(input_text, max_length=200, min_length=30, do_sample=False) |
|
return output[0]['summary_text'] |
|
|
|
def get_video_id(url): |
|
"""Extracts video ID from a YouTube URL.""" |
|
match = re.search(r"(?:v=|\/)([0-9A-Za-z_-]{11})", url) |
|
if not match: |
|
raise ValueError("Invalid YouTube URL") |
|
return match.group(1) |
|
|
|
def fetch_transcript(video_id): |
|
""" |
|
Fetches the transcript of the YouTube video in English or Hindi. |
|
Returns the transcript text and the language. |
|
""" |
|
languages_to_try = [["en"], ["hi"]] |
|
for language_codes in languages_to_try: |
|
try: |
|
transcript = YouTubeTranscriptApi.get_transcript(video_id, languages=language_codes) |
|
formatter = TextFormatter() |
|
return formatter.format_transcript(transcript), language_codes[0] |
|
except Exception as e: |
|
continue |
|
raise ValueError("Transcript not available in English or Hindi.") |
|
|
|
def process_youtube_url(url): |
|
"""Fetches the transcript from the YouTube URL and summarizes it.""" |
|
try: |
|
video_id = get_video_id(url) |
|
transcript, language = fetch_transcript(video_id) |
|
language_name = "English" if language == "en" else "Hindi" |
|
summary = summarize_text(transcript) |
|
return f"Transcript Language: {language_name}\n\nSummary:\n{summary}" |
|
except ValueError as e: |
|
return str(e) |
|
except Exception as e: |
|
return f"An unexpected error occurred: {e}" |
|
|
|
|
|
demo = gr.Interface( |
|
fn=process_youtube_url, |
|
inputs=[gr.Textbox(label="Enter YouTube URL", placeholder="https://www.youtube.com/watch?v=example")], |
|
outputs=[gr.Textbox(label="Summary")], |
|
title="YouTube Video Transcript Summarizer", |
|
description="Enter a YouTube video URL to generate it's summary. The system will first attempt to fetch the transcript in English, then Hindi if English is unavailable." |
|
) |
|
|
|
if __name__ == "__main__": |
|
demo.launch() |