Download video and audio of youtube
Browse files- download.py +51 -5
download.py
CHANGED
|
@@ -60,10 +60,55 @@ def download_twitch(url, type):
|
|
| 60 |
os.system(f'ffmpeg -i {AUDIO_FOLDER}/{DOWNLOAD_AUDIO_NAME}.{args.format} -c:a libmp3lame -b:a 192k -stats -loglevel warning {AUDIO_FOLDER}/{DOWNLOAD_AUDIO_NAME}.{DOWNLOAD_AUDIO_FORMAT}')
|
| 61 |
os.system(f'rm {AUDIO_FOLDER}/{DOWNLOAD_AUDIO_NAME}.{args.format}')
|
| 62 |
|
| 63 |
-
def download_youtube_video(url
|
| 64 |
-
|
| 65 |
-
|
| 66 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 67 |
|
| 68 |
def main(args):
|
| 69 |
url = args.url
|
|
@@ -71,7 +116,8 @@ def main(args):
|
|
| 71 |
download_twitch(url, DOWNLOAD_VIDEO)
|
| 72 |
download_twitch(url, DOWNLOAD_AUDIO)
|
| 73 |
elif 'youtube' in url.lower() or 'youtu.be' in url.lower():
|
| 74 |
-
|
|
|
|
| 75 |
else:
|
| 76 |
print('Unknown video source')
|
| 77 |
|
|
|
|
| 60 |
os.system(f'ffmpeg -i {AUDIO_FOLDER}/{DOWNLOAD_AUDIO_NAME}.{args.format} -c:a libmp3lame -b:a 192k -stats -loglevel warning {AUDIO_FOLDER}/{DOWNLOAD_AUDIO_NAME}.{DOWNLOAD_AUDIO_FORMAT}')
|
| 61 |
os.system(f'rm {AUDIO_FOLDER}/{DOWNLOAD_AUDIO_NAME}.{args.format}')
|
| 62 |
|
| 63 |
+
def download_youtube_video(url):
|
| 64 |
+
yt = YouTube(url)
|
| 65 |
+
|
| 66 |
+
# Get all video streams
|
| 67 |
+
video_streams = yt.streams.filter(mime_type="video/mp4")
|
| 68 |
+
|
| 69 |
+
# Get max resolution of video streams
|
| 70 |
+
max_resolution = 0
|
| 71 |
+
for stream in video_streams:
|
| 72 |
+
if stream.audio_codec is not None:
|
| 73 |
+
resolution = int(stream.resolution[:-1])
|
| 74 |
+
if resolution > max_resolution:
|
| 75 |
+
max_resolution = resolution
|
| 76 |
+
max_resolution = f"{max_resolution}p"
|
| 77 |
+
|
| 78 |
+
# Get stream with max resolution
|
| 79 |
+
video_streams_max_resolution = video_streams.filter(resolution=max_resolution)
|
| 80 |
+
for stream in video_streams_max_resolution:
|
| 81 |
+
if stream.audio_codec is not None:
|
| 82 |
+
video_stream = stream
|
| 83 |
+
|
| 84 |
+
# Download video
|
| 85 |
+
video_stream.download(filename=f'{VIDEO_FOLDER}/{DOWNLOAD_VIDEO_NAME}.{DOWNLOAD_VIDEO_FORMAT}')
|
| 86 |
+
|
| 87 |
+
def download_youtube_audio(url):
|
| 88 |
+
yt = YouTube(url)
|
| 89 |
+
|
| 90 |
+
# Get all audio streams
|
| 91 |
+
audio_streams = yt.streams.filter(mime_type="audio/mp4")
|
| 92 |
+
|
| 93 |
+
# Get sorted list of audio bitrates
|
| 94 |
+
abr_list = []
|
| 95 |
+
for stream in audio_streams:
|
| 96 |
+
abr_list.append(stream.abr)
|
| 97 |
+
abr_list = sorted(set(abr_list))
|
| 98 |
+
|
| 99 |
+
# Get stream with max audio bitrate
|
| 100 |
+
audio_stream = audio_streams.filter(abr=abr_list[0]).first()
|
| 101 |
+
|
| 102 |
+
# Download audio
|
| 103 |
+
audio_stream.download(filename=f'{AUDIO_FOLDER}/{DOWNLOAD_AUDIO_NAME}.{DOWNLOAD_AUDIO_FORMAT}')
|
| 104 |
+
|
| 105 |
+
def download_youtube(url, type):
|
| 106 |
+
if type == DOWNLOAD_VIDEO:
|
| 107 |
+
download_youtube_video(url)
|
| 108 |
+
elif type == DOWNLOAD_AUDIO:
|
| 109 |
+
download_youtube_audio(url)
|
| 110 |
+
else:
|
| 111 |
+
print('Unknown youtube download type')
|
| 112 |
|
| 113 |
def main(args):
|
| 114 |
url = args.url
|
|
|
|
| 116 |
download_twitch(url, DOWNLOAD_VIDEO)
|
| 117 |
download_twitch(url, DOWNLOAD_AUDIO)
|
| 118 |
elif 'youtube' in url.lower() or 'youtu.be' in url.lower():
|
| 119 |
+
download_youtube(url, DOWNLOAD_VIDEO)
|
| 120 |
+
download_youtube(url, DOWNLOAD_AUDIO)
|
| 121 |
else:
|
| 122 |
print('Unknown video source')
|
| 123 |
|