Backing Up YouTube for Fun and Profit
Offline archiving of YouTube videos is possible with this "feature-rich command line tool" called yt-dlp. Maybe you suffered a local data loss and you want to recover your uploads
Or maybe you just don't trust companies anymore and want to have a local copy of everything you love before it's all taken away from you. You do you 👍🏻, I won't judge.
Here's a command I've cooked up that helped me archive a channels worth of content in a date-sortable list.
$ yt-dlp -S vcodec:h264,res,acodec:m4a -N 4 --cookies-from-browser firefox --output "%(uploader)s - %(upload_date>%Y-%m-%d)s - %(title)s [%(id)s].%(ext)s" https://www.youtube.com/@TimBielawa/videos
Extracting cookies from firefox
Extracted 574 cookies from firefox
[youtube:tab] Extracting URL: https://www.youtube.com/@TimBielawa/videos
Why those option flags though?
.webm
doesn't integrate well with my current tech stack
Using -S vcodec:h264,res,acodec:m4a
is one
way to
get yt-dlp
to avoid leaving webm
files on your disk. I have no personal
issues with that AV container, it just doesn't integrate well into my stack.
MP4s are seamless, so I am archiving in that format.
- Archive faster, maybe
Attempt concurrent downloading with -N 4
to download 4 video fragments
simultaneously. Anecdotally I think this has got me throttled before, but that
could be a false memory. tl;dr - try turning this option off, or changing the
number to see what you can get away with.
- Save the archive sortably
I would like my archive stored in a way that is easy to sort chronologically (by
date uploaded). The default yt-dlp
behavior will save videos with file names
like <video title> [<video id>].<ext>
, and that doesn't sort very well. That
is why I use this format instead: --output "%(uploader)s -
%(upload_date>%Y-%m-%d)s - %(title)s [%(id)s].%(ext)s"
. Thanks to this
post for saving me the time to learn the
output template variables
myself.
- Authenticate as myself
By passing in --cookies-from-browser firefox
I can interact with the YouTube
API as myself and save my private unlisted videos. If you see a message like
ERROR: unable to download video data: HTTP Error 403: Forbidden
then that's
probably what you're running into.