Maximofn commited on
Commit
a21793c
1 Parent(s): 2b5d662

Download video and audio of youtube

Browse files
Files changed (1) hide show
  1. 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, type):
64
- # yt = YouTube(url)
65
- # yt.streams.filter(only_audio=True).first().download()
66
- pass
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
- download_youtube_video(url)
 
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