lcjln commited on
Commit
d71c0ce
ยท
verified ยท
1 Parent(s): 7d1286f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +35 -42
app.py CHANGED
@@ -1,7 +1,6 @@
1
  import streamlit as st
2
- from pytube import YouTube
3
  import os
4
- import time
5
 
6
  # Streamlit ์ œ๋ชฉ
7
  st.title('YouTube Video Downloader')
@@ -12,12 +11,18 @@ youtube_url = st.text_input('Enter YouTube video URL')
12
  if 'confirmed' not in st.session_state:
13
  st.session_state.confirmed = False
14
 
 
 
 
 
 
 
15
  if st.button('ํ™•์ธ'):
16
  if youtube_url:
17
  try:
18
- yt = YouTube(youtube_url)
19
- st.session_state.yt = yt
20
- st.session_state.thumbnail_url = yt.thumbnail_url
21
  st.session_state.confirmed = True
22
  except Exception as e:
23
  st.error(f"An error occurred: {e}")
@@ -28,45 +33,33 @@ if st.session_state.confirmed:
28
  st.image(st.session_state.thumbnail_url, caption='Video Thumbnail', use_column_width=True)
29
 
30
  # ํ•ด์ƒ๋„ ์„ ํƒ
31
- resolution = st.selectbox('Select resolution', ['1080p', '1080p60', '1080pHD', '720p'])
32
-
33
- def fetch_video_stream(youtube_url, resolution):
34
- yt = st.session_state.yt
35
-
36
- # ๋”œ๋ ˆ์ด ์ถ”๊ฐ€
37
- time.sleep(2) # 2์ดˆ ๋”œ๋ ˆ์ด
38
-
39
- # ์„ ํƒ๋œ ํ•ด์ƒ๋„์˜ ๋น„๋””์˜ค ์ŠคํŠธ๋ฆผ ์„ ํƒ
40
- stream = yt.streams.filter(res=resolution.replace('pHD', 'p'), progressive=True, file_extension='mp4').first()
41
 
42
- # 1080p ๋ณ€ํ˜•๋“ค์ด ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด 720p ์ŠคํŠธ๋ฆผ ์„ ํƒ
43
- if '1080p' in resolution and stream is None:
44
- st.warning(f"{resolution}๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 720p๋ฅผ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.")
45
- stream = yt.streams.filter(res='720p', progressive=True, file_extension='mp4').first()
46
-
47
- return yt, stream
 
48
 
49
  # "์ถ”์ถœ" ๋ฒ„ํŠผ ์ถ”๊ฐ€
50
  if st.button('์ถ”์ถœ'):
51
- yt, stream = fetch_video_stream(youtube_url, resolution)
52
-
53
- if stream is None:
54
- st.error(f"{resolution} ํ•ด์ƒ๋„์˜ ์ŠคํŠธ๋ฆผ์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.")
55
- else:
56
- try:
57
- # ๋‹ค์šด๋กœ๋“œ
58
- download_path = stream.download()
59
- st.session_state.download_path = download_path
60
- st.success('Video downloaded successfully!')
61
- st.video(download_path)
62
 
63
- # ๋‹ค์šด๋กœ๋“œ๋œ ํŒŒ์ผ ์ œ๊ณต (optional)
64
- with open(download_path, 'rb') as file:
65
- st.download_button(
66
- label="Download Video File",
67
- data=file,
68
- file_name=os.path.basename(download_path),
69
- mime='video/mp4'
70
- )
71
- except Exception as e:
72
- st.error(f"An error occurred during download: {e}")
 
1
  import streamlit as st
2
+ import yt_dlp
3
  import os
 
4
 
5
  # Streamlit ์ œ๋ชฉ
6
  st.title('YouTube Video Downloader')
 
11
  if 'confirmed' not in st.session_state:
12
  st.session_state.confirmed = False
13
 
14
+ def fetch_video_info(youtube_url):
15
+ ydl_opts = {}
16
+ with yt_dlp.YoutubeDL(ydl_opts) as ydl:
17
+ info_dict = ydl.extract_info(youtube_url, download=False)
18
+ return info_dict
19
+
20
  if st.button('ํ™•์ธ'):
21
  if youtube_url:
22
  try:
23
+ info_dict = fetch_video_info(youtube_url)
24
+ st.session_state.info_dict = info_dict
25
+ st.session_state.thumbnail_url = info_dict.get('thumbnail')
26
  st.session_state.confirmed = True
27
  except Exception as e:
28
  st.error(f"An error occurred: {e}")
 
33
  st.image(st.session_state.thumbnail_url, caption='Video Thumbnail', use_column_width=True)
34
 
35
  # ํ•ด์ƒ๋„ ์„ ํƒ
36
+ resolutions = ['1080p', '1080p60', '1080pHD', '720p']
37
+ resolution = st.selectbox('Select resolution', resolutions)
 
 
 
 
 
 
 
 
38
 
39
+ def download_video(youtube_url, resolution):
40
+ ydl_opts = {
41
+ 'format': f'bestvideo[height={resolution[:-1]}]+bestaudio/best[height={resolution[:-1]}]',
42
+ 'outtmpl': 'downloaded_video.%(ext)s'
43
+ }
44
+ with yt_dlp.YoutubeDL(ydl_opts) as ydl:
45
+ ydl.download([youtube_url])
46
 
47
  # "์ถ”์ถœ" ๋ฒ„ํŠผ ์ถ”๊ฐ€
48
  if st.button('์ถ”์ถœ'):
49
+ try:
50
+ if resolution == '1080pHD':
51
+ resolution = '1080p' # yt-dlp์—์„œ '1080pHD'๋ฅผ '1080p'๋กœ ๋งคํ•‘
52
+ download_video(youtube_url, resolution)
53
+ st.success('Video downloaded successfully!')
54
+ st.video('downloaded_video.mp4')
 
 
 
 
 
55
 
56
+ # ๋‹ค์šด๋กœ๋“œ๋œ ํŒŒ์ผ ์ œ๊ณต (optional)
57
+ with open('downloaded_video.mp4', 'rb') as file:
58
+ st.download_button(
59
+ label="Download Video File",
60
+ data=file,
61
+ file_name='downloaded_video.mp4',
62
+ mime='video/mp4'
63
+ )
64
+ except Exception as e:
65
+ st.error(f"An error occurred during download: {e}")