Taizun's picture
Update app.py
56c5666 verified
import re
from youtube_transcript_api import YouTubeTranscriptApi
from youtube_transcript_api.formatters import TextFormatter
import torch
import gradio as gr
from transformers import pipeline
# Initialize the model for summarization
text_summary = pipeline("summarization", model="sshleifer/distilbart-cnn-12-6", torch_dtype=torch.bfloat16)
# Function to summarize text
def summary(input_text):
output = text_summary(input_text)
return output[0]['summary_text']
# Function to extract YouTube video ID from URL
def extract_video_id(url):
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
# Function to get YouTube transcript and summary
def get_youtube_transcript(video_url, summarize=True):
video_id = extract_video_id(video_url)
if not video_id:
return "Video ID could not be extracted."
try:
transcript = YouTubeTranscriptApi.get_transcript(video_id)
formatter = TextFormatter()
text_transcript = formatter.format_transcript(transcript)
if summarize:
return summary(text_transcript)
else:
return text_transcript
except Exception as e:
return f"An error occurred: {e}"
# Define the Gradio interface with customization
def create_gradio_interface():
with gr.Blocks() as demo:
gr.Markdown("# YouTube Script Summarizer πŸ€–")
gr.Markdown("""
Enter the video URL, and choose whether you'd like the full Script or just the summary.
### Credits:
Created by **Taizun** – Providing a simple solution for video summarization!
""")
# Input for YouTube URL
video_url_input = gr.Textbox(label="Input YouTube URL", lines=1)
# Radio button for choosing output type (summary or full transcript)
output_type = gr.Radio(choices=["Summary", "Full Transcript"], label="Choose Output Type", value="Summary")
# Output for summarized or full transcript text
output_text = gr.Textbox(label="Result", lines=6)
# Submit button
submit_button = gr.Button("Generate", variant="primary")
# Define the action for the button press
submit_button.click(fn=get_youtube_transcript,
inputs=[video_url_input, output_type],
outputs=[output_text])
return demo
# Launch the interface with user credit
demo = create_gradio_interface()
demo.launch(share=True)