#!/usr/bin/python3 """Download audio using youtube-dl. Dependencies: ============= * youtube-dl """ import argparse import pathlib import shutil import subprocess # =========== Constants ========== YOUTUBE_DL_BIN = shutil.which("youtube-dl") DEFAULT_FILENAME = f"{pathlib.Path.home()}/Music/%(title)s.%(ext)s" # ========== Error Codes ========== E_NOURLS = 2 # ========== Main Script ========== parser = argparse.ArgumentParser() parser.add_argument("-b", "--batchfile", help="provide the links from a text file") parser.add_argument( "-f", "--format", type=str, default="opus", help="the format to use" ) parser.add_argument( "-n", "--filename", type=str, help="downloaded filename (without extension)" ) parser.add_argument("urls", nargs="*", help="video URLs") args = parser.parse_args() dl_opts = [ YOUTUBE_DL_BIN, "--no-part", "--no-continue", "--extract-audio", f"--audio-format={args.format}", ] # filename handling # if -b is used, DEFAULT_FILENAME must take precedence if args.filename is not None and args.batchfile is None: dl_opts.append(f"--output={args.filename}") else: dl_opts.append(f"--output={DEFAULT_FILENAME}") # URL handling if args.batchfile is not None: dl_opts.append(f"--batch-file={args.batchfile}") elif args.urls is not None: dl_opts.extend(args.urls) else: print("URLs are required") exit(E_NOURLS) subprocess.run(dl_opts)