File size: 4,461 Bytes
eaa4026 841092b eaa4026 841092b eaa4026 e33204c 841092b eaa4026 a468187 841092b a468187 841092b a468187 841092b 2569351 a468187 7c46046 2569351 eaa4026 a468187 eaa4026 a468187 eaa4026 a468187 eaa4026 a468187 eaa4026 a468187 eaa4026 a468187 eaa4026 a468187 eaa4026 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
import streamlit as st
from pytube import YouTube
from phi.agent import Agent
from phi.model.google import Gemini
from phi.tools.duckduckgo import DuckDuckGo
from google.generativeai import upload_file, get_file
import google.generativeai as genai
import time
from pathlib import Path
from dotenv import load_dotenv
import os
import tempfile
# Load environment variables
load_dotenv()
API_KEY = os.getenv("GOOGLE_API_KEY")
if API_KEY:
genai.configure(api_key=API_KEY)
# Page configuration
st.set_page_config(
page_title="YouTube Video Summarizer",
page_icon="π₯",
layout="wide"
)
st.title("Phidata YouTube Video Summarizer Agent π₯π€π¬")
st.header("Powered by Gemini 2.0 Flash Exp")
@st.cache_resource
def initialize_agent():
return Agent(
name="YouTube Video Summarizer",
model=Gemini(id="gemini-2.0-flash-exp"),
tools=[DuckDuckGo()],
markdown=True,
)
# Initialize the agent
multimodal_Agent = initialize_agent()
# Function to get YouTube video captions using pytube
def get_youtube_captions(youtube_url):
"""
Retrieves YouTube video captions using pytube.
Parameters:
- youtube_url: The URL of the YouTube video.
Returns:
- The captions of the video in SRT format, or a message if captions are not available.
"""
yt = YouTube(youtube_url)
# List available caption tracks
caption_tracks = yt.caption_tracks
available_languages = [track.language_code for track in caption_tracks]
if available_languages:
st.write(f"Available caption languages: {', '.join(available_languages)}")
# You can set a fallback language or prompt the user to select
language = 'en' # Change this to any available language from the list
# Check if the chosen language exists in the video
if language in yt.captions:
caption = yt.captions[language]
return caption.generate_srt_captions() # Return captions in SRT format
else:
return f"Captions not available in the selected language ({language})."
else:
return "No captions available for this video."
# YouTube video URL input
youtube_url = st.text_input(
"Enter the YouTube video link",
placeholder="Paste the YouTube video URL here",
help="Provide the link to the YouTube video you want to summarize."
)
if youtube_url:
try:
with st.spinner("Fetching captions from the YouTube video..."):
# Get captions for the video
captions = get_youtube_captions(youtube_url)
# Display captions
st.subheader("Video Captions (SRT format)")
st.text(captions)
# User query input
user_query = st.text_area(
"What insights are you seeking from the video?",
placeholder="Ask anything about the video content. The AI agent will analyze and gather additional context if needed.",
help="Provide specific questions or insights you want from the video."
)
if st.button("π Analyze Video", key="analyze_video_button"):
if not user_query:
st.warning("Please enter a question or insight to analyze the video.")
else:
try:
with st.spinner("Analyzing captions and gathering insights..."):
# Generate the analysis prompt using captions
analysis_prompt = (
f"""
Analyze the content of the following YouTube video captions.
Respond to the following query using the video captions and supplementary web research:
{user_query}
Provide a detailed, user-friendly, and actionable response.
"""
)
# AI agent processing
response = multimodal_Agent.run(analysis_prompt, video_captions=captions)
# Display the result
st.subheader("Analysis Result")
st.markdown(response.content)
except Exception as error:
st.error(f"An error occurred during analysis: {error}")
except Exception as e:
st.error(f"An error occurred while fetching captions: {e}")
else:
st.info("Enter a YouTube video link to begin analysis.")
|