-
Notifications
You must be signed in to change notification settings - Fork 0
/
streamlit_app.py
115 lines (68 loc) · 3.32 KB
/
streamlit_app.py
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
import openai
import streamlit as st
from youtube_transcript_api import YouTubeTranscriptApi
from youtube_transcript_api.formatters import TextFormatter
from urllib.parse import urlparse, parse_qs
import os
st.set_page_config(page_title="CapSum")
openai.api_key = st.secrets["OPENAIKEY"]
col1, col2, col3 = st.columns(3)
with col1:
st.write(' ')
with col2:
st.image("https://github.com/hiteshbandhu/st-youtube-summarizer/blob/main/img.png?raw=true", width=200)
with col3:
st.write(' ')
def extract_video_id(link):
"""
Extract the video id from a YouTube video link.
"""
# Parse the link using urlparse
parsed_url = urlparse(link)
if parsed_url.netloc == "www.youtube.com":
# Extract the video id from the query parameters for the www.youtube.com format
query_params = parse_qs(parsed_url.query)
if "v" in query_params:
return query_params["v"][0]
else:
return None
elif parsed_url.netloc == "youtu.be":
# Extract the video id from the path for the youtu.be format
path = parsed_url.path
if path.startswith("/"):
path = path[1:]
return path
else:
# Return None for all other link formats
return None
def BasicGeneration(userPrompt):
completion = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "user", "content": userPrompt}]
)
return completion.choices[0].message.content
def GetSubtitles(video_id):
op = YouTubeTranscriptApi.get_transcript(video_id)
op_use = TextFormatter.format_transcript(op,op)
return op_use
st.title('Youtube Summary Generator')
st.subheader(
'Summarize any video with captions. English, then better. Works well on videos having length ~14 mins')
video_link = st.text_area("Enter Youtube Link 😁")
video_id = extract_video_id(video_link)
if st.button('Generate Summary'):
with st.spinner('Getting Subtitles'):
subtitles = GetSubtitles(video_id)
st.success('Done !')
with st.spinner('Generating Summary.....'):
chatGPTPrompt = f"""if i write something inside curly braces, take them as instructions for that specific part. You are a professional summarizer, who watches youtube videos and summarizes them. You will be provided with subtitles of a youtube video, the video would be mostly educational one. What your work is to analyze the subtitles and provide me with detailed notes from the captions. The Notes Should be in Numbered points with a heading, then explanation, covering every point covered in the video. So that even if i don't watch the video, it is sufficient for me to get all the knowledge of the video. Remember to be extensive,provide full information and not to miss out on important info and use your intelligence also.You are not required to output anything except the notes. The notes should be in the format :
[Title]
[Summary in Bullet Points]
[Conclusion - Not more than two or three lines]
Here are the subtitles : {subtitles}
"""
analysis = BasicGeneration(chatGPTPrompt)
st.text_area("Analysis", analysis,
height=500)
st.success('Done!')