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

Download video and audio of twitch

Browse files
Files changed (2) hide show
  1. download.py +82 -0
  2. requirements.txt +4 -0
download.py ADDED
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from pytube import YouTube
2
+ import os
3
+ import argparse
4
+ import twitchdl.commands as twitch_downloader
5
+ import twitchdl.twitch
6
+ from twitchdl.commands.download import _parse_playlists
7
+
8
+ VIDEO_FOLDER = 'videos'
9
+ AUDIO_FOLDER = 'audios'
10
+
11
+ DOWNLOAD_VIDEO_NAME = 'download_video'
12
+ DOWNLOAD_AUDIO_NAME = 'download_audio'
13
+
14
+ DOWNLOAD_VIDEO_FORMAT = 'mp4'
15
+ DOWNLOAD_AUDIO_FORMAT = 'mp3'
16
+
17
+ DOWNLOAD_VIDEO = 'video'
18
+ DOWNLOAD_AUDIO = 'audio'
19
+
20
+ def download_twitch(url, type):
21
+ # Create a new parser for the download command
22
+ argparser = argparse.ArgumentParser(description='Download twitch video from URL')
23
+ argparser.add_argument('--auth-token', default=None, help='Twitch auth token')
24
+ argparser.add_argument('--chapter', default=None, help='Chapter to download')
25
+ argparser.add_argument('--debug', default=False, help='Debug', action='store_true')
26
+ argparser.add_argument('--end', default=None, help='End')
27
+ argparser.add_argument('--format', default=f'{DOWNLOAD_VIDEO_FORMAT}', help='Format')
28
+ argparser.add_argument('--keep', default=False, help='Keep', action='store_true')
29
+ argparser.add_argument('--max_workers', default=5, help='Max workers')
30
+ argparser.add_argument('--no_color', default=False, help='No color', action='store_true')
31
+ argparser.add_argument('--no_join', default=False, help='No join', action='store_true')
32
+ argparser.add_argument('--output', default=f'{VIDEO_FOLDER}/{DOWNLOAD_VIDEO_NAME}.{format}', help='Output')
33
+ argparser.add_argument('--overwrite', default=False, help='Overwrite', action='store_true')
34
+ argparser.add_argument('--quality', default=None, help='Quality')
35
+ argparser.add_argument('--rate_limit', default=None, help='Rate limit')
36
+ argparser.add_argument('--start', default=None, help='Start')
37
+ argparser.add_argument('--version', default=False, help='Version', action='store_true')
38
+ argparser.add_argument('videos', default=[url], help='Videos', nargs='+')
39
+ args = argparser.parse_args()
40
+
41
+ # Get qualitys
42
+ access_token = twitchdl.twitch.get_access_token(1942562640, None)
43
+ playlists_m3u8 = twitchdl.twitch.get_playlists(1942562640, access_token)
44
+ playlists = list(_parse_playlists(playlists_m3u8))
45
+ qualitys = [name for (name, _, _) in playlists]
46
+
47
+ # Select quality
48
+ if type == DOWNLOAD_VIDEO:
49
+ args.quality = qualitys[0]
50
+ args.format = DOWNLOAD_VIDEO_FORMAT
51
+ args.output = f'{VIDEO_FOLDER}/{DOWNLOAD_VIDEO_NAME}.{args.format}'
52
+ elif type == DOWNLOAD_AUDIO:
53
+ args.quality = qualitys[-1]
54
+ args.format = "mkv"
55
+ args.output = f'{AUDIO_FOLDER}/{DOWNLOAD_AUDIO_NAME}.{args.format}'
56
+
57
+ # Download
58
+ twitch_downloader.download(args)
59
+ if type == DOWNLOAD_AUDIO:
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
70
+ if 'twitch' in url.lower():
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
+
78
+ if __name__ == "__main__":
79
+ argparser = argparse.ArgumentParser(description='Download video from URL')
80
+ argparser.add_argument('url', help='URL of video')
81
+ args = argparser.parse_args()
82
+ main(args)
requirements.txt CHANGED
@@ -1,6 +1,10 @@
1
  # gradio
2
  gradio
3
 
 
 
 
 
4
  # mossformer --> separate speech audios
5
  torch
6
  torchvision
 
1
  # gradio
2
  gradio
3
 
4
+ # Download youtube and twitch videos
5
+ pytube
6
+ twitch-dl
7
+
8
  # mossformer --> separate speech audios
9
  torch
10
  torchvision