made it so i just click file and paste YouTube url
Linux is amazing
#! /usr/bin/bash
echo "Enter a url"
read a
yt-dlp -x $a
Very happy you had fun making the little script! One thing that will become important pretty quick if you continue making these scripts is that it’s almost always better to wrap your variables in quotes - so it becomes
yt-dlp -x “$a”. It’s okay here but if you ever paste something that has a space in it, this will keep it together ‘as one’.If you want to expand your knowledge with this, some fruitful paths to go down are the following:
- can you find a way to download multiple urls one after the other if you paste them all at once? (Multiple arguments)
- can you find a way to ask the user for these multiple urls one after the other? (loops)
- and can you find a way to have it ask until you hit enter without a url pasted and only then it starts? (conditionals and test)
The last one is already quite a bit advanced but if you can do that you have enough of the ‘programming’ basics of the shell down to a degree that you can create many little helpers like this with ease.
Of course don’t feel forced to do any of that - if you’re happy with the improvement as-is, that’s all you need to enjoy the fun of Linux!
One thing that will become important pretty quick if you continue making these scripts is that it’s almost always better to wrap your variables in quotes - so it becomes
yt-dlp -x “$a”.Oh man, this reminds me of the joke that any program that’s more complex than Hello World has bugs – and folks still don’t even agree how to spell “Hello, World!”.
Of course, Bash is a particular minefield in this regard…
I once wrote a 2 line, 10 word script that had 9 bugs in it. I’m not overly proud of that one.
I think you might have a career as an accomplished entymologist ahead of you with so much success finding bugs!
Thanks might make it bigger now. The “$a” very helpful as I might copy url from web pages which may cause a error.
You’ll probably like this youtube channel then :)
Thanks looks good
One of us! One of us!
Here is a script I wrote:
~/bin 0s > cat vget #!/usr/bin/env fish yt-dlp --embed-metadata --write-subs --embed-subs --write-thumbnail --prefer-free-formats -f "[height<=1080]" $argvdoes --write-thumbnail save a jpg with the video? or is it something else?
You’re correct!
--write-thumbnail Write thumbnail image to diskThere is also this option:
--embed-thumbnail Embed thumbnail in the video as cover artmakes note of this since it will make tagging a lot easier and also cataloging for jellyfin
this isn’t perfect but i made one when i wanted to fetch a video for a specific resolution (because i prefer 480)
ytgrab() { local id="$1" local res="${2:-480}" # default to 480 local url="https://www.youtube.com/watch?v=%24id" # fetch formats local fmt fmt=$(yt-dlp -F --cookies-from-browser vivaldi "$url") # printing the format output echo "$fmt" # pick video format matching the requested resolution local vfmt vfmt=$(echo "$fmt" | awk -v r="${res}p" '$0 ~ r && /video/ {print $1}' | head -n1) # pick best m4a audio local afmt afmt=$(echo "$fmt" | awk '/m4a/ && /audio/ {print $1}' | head -n1) # safety check if [ -z "$vfmt" ] || [ -z "$afmt" ]; then echo "Could not find matching formats (video ${res}p or m4a audio)." return 1 fi echo fetching: yt-dlp -f ${vfmt}+${afmt} --cookies-from-browser vivaldi --write-subs --no-write-auto-subs --sub-lang "en.*" $url yt-dlp -f "${vfmt}+${afmt}" --write-subs --cookies-from-browser vivaldi --no-write-auto-subs --sub-lang "en.*" "$url" }Just curious, but why 480?
usually i just like older videos but in this case i was saving a bunch of wcw vault videos to my jellyfin library and i prefer 480 since it was as close to tv as can be (also i’ve never been a fan of hd and tv after 2000 because i felt that’s when it went downhill)
I have a similar scriptlet that I use to open YouTube URLs in mpv, using just and wl-clipboard… I just copy the URL and press my G1 key (it has a keybind of
just yt-pasteattached) which launches the yt-paste snippet below, reads the url from the clipboard, parses it and passes it to mpv.# Parse the clipboard for YouTube URLs and open them in mpv yt-paste: #!/usr/bin/env bash YOUTUBE_URL_REGEX="^https:\/\/(www\.youtube\.com\/watch\?v=|youtu\.be\/)[a-zA-Z0-9_-]{11}" YOUTUBE_PLAYLIST_URL_REGEX="^https:\/\/(www\.youtube\.com\/playlist\?list=)[a-zA-Z0-9_-]+" YOUTUBE_SHORTS_URL_REGEX="^https:\/\/(www\.youtube\.com\/shorts\/)[a-zA-Z0-9_-]{11}" # Youtube URL if [[ "$(wl-paste)" =~ $YOUTUBE_URL_REGEX ]]; then echo "Opening valid YouTube URL" >&2 notify-send --app-name="YT-Paste" --icon=mpv --transient "Opening YouTube URL" mpv "$(wl-paste)" # Youtube Playlist URL elif [[ "$(wl-paste)" =~ $YOUTUBE_PLAYLIST_URL_REGEX ]]; then echo "Opening valid YouTube Playlist URL" >&2 notify-send --app-name="YT-Paste" --icon=mpv --transient "Opening YouTube Playlist URL" mpv "$(wl-paste)" # Youtube Short URL elif [[ "$(wl-paste)" =~ $YOUTUBE_SHORTS_URL_REGEX ]]; then echo "Opening valid YouTube Shorts URL" >&2 notify-send --app-name="YT-Paste" --icon=mpv --transient "Opening YouTube Shorts URL" mpv "$(wl-paste)" # No Match else echo "Clipboard does not contain a valid YouTube URL" >&2 notify-send --app-name="YT-Paste" --icon=mpv --transient "Whoops!" "Clipboard does not contain a valid YouTube URL" exit 1 fiAmazing.
Injust switched a year ago and now I finally discovered bash scripts.
It is so mich easier, I also automated some manual tasks with Python scripts to name my PDFs, never would have done that with windows.
And the best part of it, it’s actually fun and I want to even do more.
As always I have to thank DJT, for make me switch. 🤣
awesome! I never would have thought to make something like that.
Well done, I never could use bash much but can’t deny its useful
I simply using local LLM for it
You could make it an alias and shorten the number of keystrokes
I prefer keeping my aliases in ~/.bash_aliases, which is sourced in my ~/.bashrc, ie
. ~/.bash_aliasesThen you would just need to source your bashrc to load it the first time.
Nice! I did mine as an alias:
alias yt='yt-dlp --remote-components ejs:github -f "bestvideo[ext=mp4]+bestaudio[ext=m4a]/mp4"'And then just
yt [URL]downloads the thing.





