From c23523f7d8b5dd4ba9bfe9af1b0a33d1fefe252d Mon Sep 17 00:00:00 2001 From: Skullheadx <94652084+Skullheadx@users.noreply.github.com> Date: Sun, 13 Oct 2024 21:48:57 -0400 Subject: [PATCH] stuff --- dependencies.txt | 2 -- requirements.txt | 2 ++ thumbnail.jpg | Bin 0 -> 29281 bytes ytdl/funcmodule.py | 65 +++++++++++++++++++++++++++++++++------------ 4 files changed, 50 insertions(+), 19 deletions(-) delete mode 100644 dependencies.txt create mode 100644 requirements.txt create mode 100644 thumbnail.jpg diff --git a/dependencies.txt b/dependencies.txt deleted file mode 100644 index 2fd322a..0000000 --- a/dependencies.txt +++ /dev/null @@ -1,2 +0,0 @@ -pytube -ffmpeg-python \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..4b5e95b --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +pytubefix~=8.0.0 +ffmpeg-python diff --git a/thumbnail.jpg b/thumbnail.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8f57b991e690ed851ab2f6d8c17ee924c1a4434b GIT binary patch literal 29281 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 LgER>2|K9`vi)|>S literal 0 HcmV?d00001 diff --git a/ytdl/funcmodule.py b/ytdl/funcmodule.py index 35b4cc3..856ed9a 100644 --- a/ytdl/funcmodule.py +++ b/ytdl/funcmodule.py @@ -1,8 +1,9 @@ +import pytubefix.extract + from .__init__ import * -from pytube import YouTube, Playlist -from pytube.exceptions import VideoUnavailable +from pytubefix import YouTube, Playlist, extract import ffmpeg - +import requests def check_playlist(links): @@ -14,29 +15,60 @@ def check_playlist(links): links.remove(link) return links + def links_work(links): for link in links: YouTube(link).check_availability() return True -def download_audio(links, target_abr="160kbps"): - print(links, ABR) - print('a') +def get_audio_streams(links): + audio_streams = [] for link in links: yt = YouTube(link) - # assert yt.includes_audio_track() - print(yt.streams.filter(only_audio=True)) - print(yt.streams) - - - - - - - + assert len(yt.streams.filter(only_audio=True)) > 0, "No available audio streams" + audio_streams.append(yt.streams.filter(only_audio=True).order_by("abr").last()) + return audio_streams +def get_metadata(links): + metadata = [] + for link in links: + yt = YouTube(link) + metadata.append( + { + "title": yt.title, + "author": yt.author, + "thumbnail_url": yt.thumbnail_url, + "description": yt.description, + "publish_date": yt.publish_date, + "rating": yt.rating, + "views": yt.views + } + ) + return metadata + + +def download_audio_streams(audio_streams, metadata): + for audio_stream, md in zip(audio_streams, metadata): + audio_stream.download() + data = requests.get(md["thumbnail_url"]).content + f = open('thumbnail.jpg', 'wb') + f.write(data) + f.close() + + audio = ffmpeg.input(audio_stream.default_filename) + thumb = ffmpeg.input("thumbnail.jpg") + ( + ffmpeg + .output( + audio, thumb, + audio_stream.title + ".mp4", + author=md["author"], year=md["publish_date"], description=md["description"] + ) + .overwrite_output() + .run() + ) # RES = ["1440p", "1080p", "720p", "480p", "360p", "240p", "144p"] # ABR = ["160kbps", "128kbps", "70kbps", "50kbps", "48kbps"] @@ -52,7 +84,6 @@ def download_audio(links, target_abr="160kbps"): # print(links) - # # download links one by one # for link in links: # target_res = 0 -- 2.54.0