import argparse from pathlib import Path from subprocess import run from directories import Directories dirs = Directories() project_home = dirs.get_home() audio_dir = dirs.get_audio_dir() video_dir = dirs.get_video_dir() audio_title = Path.joinpath(audio_dir, '%(title)s.%(ext)s') video_title = Path.joinpath(video_dir, '%(title)s.%(ext)s') batch_dl_file = Path.joinpath(project_home, 'batch_dl.txt') requirements = Path.joinpath(project_home, 'requirements.txt') parser = argparse.ArgumentParser(description='A wrapper script to yt-dlp') parser.add_argument('--batch', '-b', type=bool, help='Perform batch download') args = parser.parse_args() def batch_convert(): format = str(input('Audio or Video?: ')).lower() match format: case "audio": run(['yt-dlp', '-x', '-f', '"ba"', '--audio-format', 'mp3', '-o', f'{audio_title}', '-a', f'{batch_dl_file}']) case "video": run(['yt-dlp', '-f', '"bv*[ext=mp4]+ba[ext=m4a]/b[ext=mp4] / bv*+ba/b"', '--sponsorblock-remove', 'sponsor,selfpromo,interaction', '-o', f'{video_title}', '-a', f'{batch_dl_file}']) case _: print("Response must be 'Audio' or 'Video'!") def normal_convert(): downloads_complete = False while downloads_complete != True: # type: ignore format = str(input('Audio or Video?: ')).lower() url = str(input('Enter URL here: ')) val = False match format: case "audio": run(['yt-dlp', '-x', '-f', '"ba"', '--audio-format', 'mp3', '-o', f'{audio_title}', f'{url}']) while val != True: do_continue = str(input("Do you want to convert another file? (y/n): ")).lower() match do_continue: case "y": val = True case "n": downloads_complete = True val = True case _: print("Answer must be Y or N!") case "video": run(['yt-dlp', '-f', '"bv*[ext=mkv]+ba[ext=m4a]/b[ext=mkv] / bv*+ba/b"', '--sponsorblock-remove', 'sponsor,selfpromo,interaction', '-o', f'{video_title}', f'{url}']) while val != True: do_continue = str(input("Do you want to convert another file? (y/n): ")).lower() match do_continue: case "y": val = True case "n": downloads_complete = True val = True case _: print("Answer must be Y or N!") case _: print("Response must be 'Audio' or 'Video'!") run(['pip', 'install', '-r', f'{requirements}']) if not audio_dir.exists(): audio_dir.mkdir() if not video_dir.exists(): video_dir.mkdir() if args.batch == True: batch_convert() else: normal_convert()