aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authornathansmith117 <thenathansmithsmith@gmail.com>2024-03-17 23:59:20 +0000
committernathansmith117 <thenathansmithsmith@gmail.com>2024-03-17 23:59:20 +0000
commit01a5453f50852f488b13be5f3faf567611a1a60a (patch)
treec9b66f44f2167db25278030a305baa0046dd4309 /src
parent563499ce3d39be5e906a62260e3098c14994f698 (diff)
downloadyouload-01a5453f50852f488b13be5f3faf567611a1a60a.tar.gz
youload-01a5453f50852f488b13be5f3faf567611a1a60a.tar.bz2
youload-01a5453f50852f488b13be5f3faf567611a1a60a.zip
Get mp3 working
Diffstat (limited to 'src')
-rw-r--r--src/model/youload_playlist.py25
-rw-r--r--src/view/app.py22
2 files changed, 33 insertions, 14 deletions
diff --git a/src/model/youload_playlist.py b/src/model/youload_playlist.py
index a021b83..51f8758 100644
--- a/src/model/youload_playlist.py
+++ b/src/model/youload_playlist.py
@@ -1,4 +1,5 @@
from pytube import Playlist
+from moviepy.editor import VideoFileClip
import os
def make_alpha_numeric(string: str) -> str:
@@ -7,8 +8,8 @@ def make_alpha_numeric(string: str) -> str:
class YouLoadPlayList:
"""A class for download and handling youtube playlists"""
- DOWNLOAD_TYPES = ["highest", "lowest", "audio", "720p", "480p", "360p", "240p", "144p"]
- DEFAULT_DOWNLOAD_TYPE = "highest"
+ DOWNLOAD_TYPES = ["default", "highest", "lowest", "mp3", "720p", "480p", "360p", "240p", "144p"]
+ DEFAULT_DOWNLOAD_TYPE = "default"
def __init__(self, link: str):
self.yt_playlist = Playlist(link)
@@ -34,7 +35,6 @@ class YouLoadPlayList:
def download_video(self, video_num: int, use_prefix: bool) -> str:
"""Download video at 'video_num'"""
video = self.yt_playlist.videos[video_num]
- video_size = video.streams.get_highest_resolution().filesize
# Create prefix.
filename_prefix = ""
@@ -43,14 +43,25 @@ class YouLoadPlayList:
filename_prefix = str(video_num + 1) + " "
# Download this fucker.
- if self.download_type == "highest":
+ if self.download_type == "default":
+ video.streams.first().download(output_path=self.folder_name, filename_prefix=filename_prefix)
+ elif self.download_type == "highest":
video.streams.get_highest_resolution().download(output_path=self.folder_name, filename_prefix=filename_prefix)
elif self.download_type == "lowest":
video.streams.get_lowest_resolution().download(output_path=self.folder_name, filename_prefix=filename_prefix)
- elif self.download_type == "audio":
- video.streams.get_audio_only().download(output_path=self.folder_name, filename_prefix=filename_prefix)
+ elif self.download_type == "mp3":
+ file_path = video.streams.first().download(output_path=self.folder_name, filename_prefix=filename_prefix)
+
+ # Get video from mp4.
+ video_audio = VideoFileClip(file_path)
+
+ # Get mp3.
+ file_path_mp3 = file_path[:-4] + ".mp3"
+ video_audio.audio.write_audiofile(file_path_mp3)
+
+ os.remove(file_path)
else:
video.streams.get_by_resolution(self.download_type).download(output_path=self.folder_name, filename_prefix=filename_prefix)
- return f"Title: {video.title}, Size: {video_size // (1024 ** 2)} MB"
+ return f"Title: {video.title}"
diff --git a/src/view/app.py b/src/view/app.py
index 3639de3..79a73ae 100644
--- a/src/view/app.py
+++ b/src/view/app.py
@@ -19,7 +19,7 @@ class YouloadApp(App):
layout = BoxLayout(orientation='vertical')
# Data members
- self.url = "https://youtube.com/playlist?list=PLXbRgJ9vx_KuA5CljV3BpiV58qx6znmRk&si=JFaVyspkeoMWUDNL"
+ self.url = ""
self.is_downloading = False
self.should_stop_download = False
@@ -32,8 +32,12 @@ class YouloadApp(App):
self.download_type_chooser.set_app(self)
# Url input.
- url_input = TextInput(text=self.url, multiline=False, size_hint=(0.8, 1.0))
- url_input.bind(text=self.uid_url_input)
+ self.url_input = TextInput(text=self.url, multiline=False, size_hint=(0.6, 1.0))
+ self.url_input.bind(text=self.uid_url_input)
+
+ # Clear button.
+ clear_button = Button(text="Clear", size_hint=(0.2, 1.0))
+ #clear_button.bind(on_press=lambda: self.url_inpu)
# Submit button.
self.submit = Button(text="Download", size_hint=(0.2, 1.0))
@@ -41,7 +45,8 @@ class YouloadApp(App):
# Url and submit layout.
url_and_submit = BoxLayout(size_hint=(1.0, 0.1))
- url_and_submit.add_widget(url_input)
+ url_and_submit.add_widget(self.url_input)
+ url_and_submit.add_widget(clear_button)
url_and_submit.add_widget(self.submit)
# Download status.
@@ -124,12 +129,15 @@ class YouloadApp(App):
# Complete download.
self.download_status.text = "Download complete"
- except FileExistsError:
+ except FileExistsError as e:
self.download_status.text = "Folder already exists"
- except KeyError:
+ self.downloads_display.text = repr(e)
+ except KeyError as e:
self.download_status.text = "Error getting playlist"
- except AttributeError:
+ self.downloads_display.text = repr(e)
+ except AttributeError as e:
self.download_status.text = "Download type not supported"
+ self.downloads_display.text = repr(e)
except Exception as e:
self.downloads_display.text = repr(e)