Just wanted to share my yt-dlp alias

I'm sure some of you already using it like this but if not, this could be useful for you.

It creates a directory with the channel's name, create sub-directories with the playlist name, it gives them a number and put them in an order, it can continue to download if you have to cancel it midway.

You can modify it to your needs.

Add this to your ~/.bashrc or your favourite shell config.

alias yt='yt-dlp --yes-playlist --no-overwrites --download-archive ~/Downloads/yt-dlp/archive.txt -f "bestvideo[height<=1080]+bestaudio/best[height<=1080]" -o "~/Downloads/yt-dlp/%(uploader)s/%(playlist_title,single_playlist)s/%(playlist_index,00)s - %(title)s - [%(id)s].%(ext)s"'

You can even limit the download speed by adding this parameter: --limit-rate 640K This example is for 5 Mb/s.

65 points · 17 comments · view on lemmy.world

17 Comments

catloaf@lemm.ee · 20 pts · 1y (2 replies)

You know you can just put your options in a config file, right? https://github.com/yt-dlp/yt-dlp?tab=readme-ov-file#configuration

three@lemmy.zip · 6 pts · 1y

oooo someone didn't read the documentation

LeninOnAPrayer@lemm.ee · 6 pts · 1y

Eh sometimes you just want "download_shit" and "download_shit_but_slow".

Remembering that there is a config and where the fuck it is is half the battle for me sometimes.

bradfrank@programming.dev · 9 pts · 1y (1 reply)

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
muhyb@programming.dev · 3 pts · 1y

It's totally cool! I like to see others' scripts. I agree, there is always something new to learn. I also liked how human readable is this. Thanks for sharing.

anotherandrew@mbin.mixdown.ca · 5 pts · 1y (3 replies)

I have two depending on what I'm grabbing is part of a playlist (where I want to maintain order) or not:

--download-archive archive.txt --write-auto-subs --sub-langs en --embed-subs -o "%(upload_date)s_%(title)s_%(id)s.%(ext)s" -S res,vcodec:h264,acodec:m4a

or

--download-archive archive.txt --write-auto-subs --sub-langs en --embed-subs -o "%(playlist_title)s/%(playlist_index)s_%(upload_date)s_%(title)s_%(id)s.%(ext)s" -S res,vcodec:h264,acodec:m4a

that --download-archive archive.txt is a godsend for when I rediscover something I've already grabbed. I often move the files to better locations after, but archive.txt doesn't care. Embedding the subtitles, forcing h264/m4a (because more and more things are webp it seems), and renaming the file to the title + youtube ID are what make up the rest.

muhyb@programming.dev · 2 pts · 1y (2 replies)

I used to force formats too but sometimes it fails because it cannot find the corresponding format. upload_date seems useful, I should update mine.

Also, didn't know it can also download subs. Good to know. Thanks for your version.

anotherandrew@mbin.mixdown.ca · 2 pts · 1y (1 reply)

I've been lucky I guess -- haven't had a failure with force formats before, I always thought if it couldn't download the format I wanted it was spinning the conversion over to ffmpeg. I haven't really paid that close attention to the output. :-)

muhyb@programming.dev · 1 pts · 1y

Well, it's generally fine for relatively new stuff but now to think I guess I had this problem with the older videos, older than this webm era. Other than that, it's great to be able to even pick a format. :)

dessalines@lemmy.ml · 4 pts · 1y (4 replies)

You really shouldn't build these from scratch, but use existing time-tested configs, like

https://github.com/TheFrenchGhosty/TheFrenchGhostys-Ultimate-YouTube-DL-Scripts-Collection/

Appoxo@lemmy.dbzer0.com · 5 pts · 1y (2 replies)

Why not? Why not learn how to use a tool??

dessalines@lemmy.ml · 0 pts · 1y (1 reply)

Because other people in the datahoarding community already spent a lot of time collaborating and finding the best config.

Appoxo@lemmy.dbzer0.com · 2 pts · 1y

And now you think we have enough and don't need more?
Strange way of thinking.

muhyb@programming.dev · 4 pts · 1y

Actually I'm quite proud of my version but didn't know about these at all. If I knew about this prior, I most likely wouldn't try to build from scratch. Thanks for sharing.

Zachariah@lemmy.world · 4 pts · 1y

nice

Tim_Bisley@piefed.social · 2 pts · 1y (1 reply)

Damn I've been doing this all manually. I downloaded multiple playlists, user power rename to remove the [garbagetexhere] and then manually numbered them. All I ever do is yt-dlp url. I'm lazy but maybe I should do some reading or check these configs.

muhyb@programming.dev · 2 pts · 1y

Funny thing, I had to do this because I'm lazy too. Now I just download. :)