Yt-dlp is the best way to download videos and audio
Yt-dlp is the best way to download videos and audio

You can use yt-dlp on to save and convert media from YouTube, SoundCloud, TikTok, Reddit, and many other sites.

Yt-dlp is the best way to download videos and audio
You can use yt-dlp on to save and convert media from YouTube, SoundCloud, TikTok, Reddit, and many other sites.
One of my favourite applications. I stopped paying for spotify and just use this to get music these days. Everything gets uploaded to youtube anyways.
Downloading music from YouTube will get you MP3s, but they will have gone through the YT compression algorithms.
Use Deemix instead. Downloads MP3s straight from the Deezer servers with all metadata and album art.
Lucida.to would also be a pretty good choice, you can choose to download from either Deezer, Qobuz, Tidal, Spotify, Deezer or Amazon Music.
Discontinued in 2022 https://archive.org/details/deemix
Does it automatically grab things like metadata (author, cover art, etc.) for you? And if it requires a flag, do you know it?
I don't bother personally for the most part but it seems like you can do it via --embed-metadata, --parse-metadata, and --embed-thumbnail.
It’s very automatic with just pointing it at the media’s URL, but also highly configurable if you want.
May I suggest SpotDL specifically for Spotify: https://github.com/spotDL/spotify-downloader
For songs with metadata I recommend ytmdl
Absolutely. Bar none. Here's my config for downloading best quality YT videos (but works for other sites too) if anyone wants to base theirs on it: https://pastebin.com/ba9sFURT
Maybe a little bit shameless plug from me, but I want point to my Bash script for Linux to make the daily yt-dlp life easier: https://github.com/thingsiplay/yt-dlp-lemon yt-dlp-lemon -h
will show only a few options and yt-dlp-lemon -H
shows everything the script supports.
Oh hey i saw you in the comments of a brodie robertson video
Haha, hello there. World is small sometimes. :p
I wrote my own web app in Python, using pytube-fix and its lightning fast. Great library. I found a recent screenshot that's a bit behind in commits but you get the idea.
Edit: I published the source code, please note there is a LOT of work left to do, but it works. https://codeberg.org/ArtisanByteCrafter/pytube-gui
I didn't see anything like this image in the pytube-fix repo. Do you have a repo of the web interface somewhere? That looks really handy.
Will do! Edit: done: https://codeberg.org/ArtisanByteCrafter/pytube-gui
Please publish the source code
Happy to, I'll do it tonight. Just be aware this is only "good enough for myself doing some testing" level yet. I do plan on doing a lot more work. EDIT: here goes nothing: https://codeberg.org/ArtisanByteCrafter/pytube-gui
It's the main way I watch youtube now. After Piped and Newpipe stopped working for me across all devices, I only use 2 methods of watching Youtube now. Open in mpv (which is configured to use yt-dlp in the backend to make things faster), and download using yt-dlp. So it's key to me keeping on watching Youtube. Recently, I've started getting ads showing up even on Mobile Vivaldi, so no more YT on my phone.
So my new workflow is to use Piped to find a video, then copy the end of the link and type "yt-dlp
<C-S-v>
" in a terminal, wait for the video(s) to download, and open in mpv.OR
In some cases, use Qutebrowser, with a custom keybind to open a video in mpv.
Try FreeTube.
Newpipe works fine for me. They always fix it almost immediately.
Yeah, but I use a fork called tubular so I can get SponsorBlock and ReturnYoutubeDislike.
Edit: Turns out I just missed that there was an update. Phone playback is back!
So my new workflow is to use Piped to find a video, then copy the end of the link and type “yt-dlp
<C-S-v>
” in a terminal, wait for the video(s) to download, and open in mpv.
Why not just pass the YouTube link to mpv so you don't have to wait for the video to download?
I still have to wait a long time for the video to load in the Mpv cache, and sometimes I want a bunch of videos to watch later (or watch multiple times if they're educational). In which case, I either open up a bunch of videos in their own mpv windows and they all load while I'm watching the first one, or I download them while I'm doing something else.
But loading a bunch of mpv windows is heavier than a bunch of terminals running yt-dlp (and I could also just switch to using tmux.... which I probably should get around to at some point).
How often does that break?
Yt-dlp or mpv? Never.
Newpipe and piped? Newpipe takes about a week or two, to rebreak after a fix. Piped has been broken and not updated yet, for a while.
Maybe just pay for YouTube Premium at at that point? It pays the video creators, and you don't have to have a janky playback setup.
yt-dlp is great, but if you need to archive playlists automatically, want a repository, or otherwise prefer a gui I would recommend TubeArchivist.
(Which itself uses yt-dlp)
I use parabolic on PC and Seal (on F-Driod) to download yt videos. Both are just YTDLP with a GUI because I'm not an arch user
I have been using Jdownloader2 for years.. I don’t know what the differences are, but might be an option for people who want something GUI based
If you need a gui or are trying to monitor playlists I would recommend TubeArchivist.
If you use it frequently, I suggest getting a GUI that have profiles or remember options so you don't have to mess with commands all the time. I wrote my own little command line wrspper which is Windows only since I don't have Linux to test on. Though it shouldn't take much effort to add support.
Makes it much more convenient when you don't have to specify things like archive (ignore duplicates), filename to be "artist - title" (where possible), download destination, etc. Just alt-tab, Ctrl-v, Enter. And the download is running. And mine also has parallel downloads and queue for when you got many slow downloads.
I tried a few times, but the video and audio are often out of sync. Anyone have this issue?
Strange. I downloaded thousands of videos with this tool (but just watched a handful of them) and never noticed an out of sync. Can you point me to a video I can download and test where you have this issue? Is it a new issue? Maybe Google is trolling us or you or your region.
https://m.youtube.com/watch?v=zeDwH44xTIU
This one was real bad
No
Sorry but no. I have never had this issue.
This is something I cant live without
Really?
What nutrients does it provide?
no not really. I can also live without it, id does not provide any nutrients just saves me time
Salt from the seawater
Does it work for movies that "require you to sign in to verify your age"?
I tried to download some videos from Reddit using YT-DLP and it didn't work, I think maybe because Reddit limited access
I made a script for grabbing reddit videos that's been working pretty well for me, needs Babashka to run https://babashka.org/
#!/usr/bin/env bb (require '[clojure.java.shell :refer [sh]] '[clojure.string :as string] '[cheshire.core :as cheshire] '[org.httpkit.client :as http] '[clojure.walk :as walk]) (defn http-get [url] (-> @(http/get url {}) :body)) (defn find-base-url [data] (let [results (atom [])] (walk/postwalk (fn [node] (when (and (string? node) (.contains node "DASH")) (swap! results conj node)) node) data) (some-> @results first (string/replace #"DASH_[0-9]+\.mp4" "")))) (defn find-best-quality [names audio?] (->> ((if audio? filter remove) #(.contains (.toLowerCase %) "audio") names) (sort-by (fn [n] (-> n (string/replace #"\.mp4" "") (string/replace #"[a-zA-Z_]" "") (Integer/parseInt)))) (last))) (defn find-parts [base-url data] (let [url (atom nil) _ (walk/prewalk (fn [node] (when (and (map? node) (contains? node :dash_url)) (reset! url (:dash_url node))) node) data) xml (http-get @url) parts (->> (re-seq #"<BaseURL>(.*?)</BaseURL>" xml) (map second)) best-video (find-best-quality parts false) best-audio (find-best-quality parts true)] [(str base-url best-video) (str base-url best-audio)])) (defn filename [url] (let [idx (inc (.lastIndexOf url "/"))] (subs url idx))) (defn tsname [] (str "video-" (System/currentTimeMillis) ".mp4")) (let [data (-> (first *command-line-args*) (str ".json") http-get (cheshire/decode true)) base-url (find-base-url data) [video-url audio-url] (find-parts base-url data) video-file (filename video-url) audio-file (filename audio-url)] (sh "wget" video-url) (sh "wget" audio-url) (sh "ffmpeg" "-i" video-file "-stream_loop" "-1" "-i" audio-file "-shortest" "-map" "0:v:0" "-map" "1:a:0" "-y" (tsname)) (sh "rm" audio-file video-file))
You might also look at gallery-dl
Make sure yt-dlp is up to date. I’ve been able to download reddit, YouTube shorts, TikTok, videos etc just fine
I don't think I've had issues with reddit, as long as you use the link to the reddit comment thread, not one of the shortlinks or the video link or something else.
https://github.com/yt-dlp/yt-dlp/blob/master/supportedsites.md
Reddit is listed in the list of supported sites. I just tested it with a random post video post on Reddit, and it downloaded the file perfectly fine (played in local player). My theory you either did a user error and gave a link that is not a video post, I'm not sure if posts that link to a video would work, I think the post itself must be a video post. Or you tested it when Reddit blocked yt-dlp. The yt-dlp team needs to update it first, then it functions again. YouTube does the same.
This is wonderful, I've been struggling with piped for some time now, it's always asking me to sign in to confirm that I'm not a bot. Also it's showing me videos in very low quality and often it stops loading halfway through the video. With this I get to see good quality videos once more, without unwanted pauses and without financing yt in any way. Great!
If you like this article, please consider following the site on Mastodon/Fedi, email, or RSS. It helps me get information like this out to a wider audience :)
Your email link doesn't work. Try it in Tor Browser with js disabled.
The email signup and user management panel needs JavaScript, yeah.
Used to DL a bunch of Peloton videos during a free trial then self-host on Plex.
agreed 💪