bradfrank

joined 2 years ago
[–] bradfrank@programming.dev 6 points 20 hours ago (1 children)

I do something very similar. Thanks for sharing cause there's always something to learn by seeing how someone else solved a problem. I'll share mine here too if that's cool:

#!/usr/bin/env bash

music() {
  case $(uname -s) in
    Darwin)
      yt-dlp --format bestaudio --extract-audio --audio-format mp3 \
        --postprocessor-args "-strict experimental" "$1" ;;
    Linux)
      yt-dlp --format bestaudio --extract-audio --audio-format mp3 "$1" ;;
  esac
}

video() {
  yt-dlp \
    --format "bestvideo+bestaudio[ext=m4a]/bestvideo+bestaudio/best" \
    --merge-output-format mp4 \
    -o "%(title)s.%(ext)s" "$1"
}

while getopts ':hm:v:' flag; do
  case "$flag" in
    h) echo "Usage: youtube [-m(usic) <url> | -v(ideo) <url>]" ; exit 0 ;;
    m) music "$OPTARG" ;;
    v) video "$OPTARG" ;;
    *) echo "Invalid argument." >&2 ; exit 1 ;;
  esac
done
[–] bradfrank@programming.dev 3 points 22 hours ago

Seriously, what a PITA it would be to do this every 6 months (assuming you don’t use a LTS). I looked at this script and just decided to go with Debian.