How to download private videos from YouTube with youtube-dl
2020-07-30 Feedback Update
The extension cookies.txt can also be used, instead of EditThisCookie. It may no longer be necessary to add cookies from multiple domains, YouTube.com should be the only domain cookies are needed from.
As an alternative to using cookies, Google now allows for application specific passwords to bypass 2FA for attempting username/password authentication when downloading a private video.
I am now getting a DRM related error when trying to download protected content from YouTube now when trying to download some videos. YMMV
youtube-dl is a wonderful tool for downloading videos so they can be watched offline. Most of the time I only want to store a publicly accessible video. Sometimes I want to access a video that is only accessible when I am logged into my YouTube account. To do this was more challenging than I thought it would be, partly because youtube-dl is working through some issues. The specific issues I ran into dealt with two factor authentication and reading cookie formats.
Summary
Here is what eventually worked for me.
- Install EditThisCookie plugin for Chrome (Chromium in my case)
- Set the cookie export format to
Netscape HTTP Cookie File
- Log into YouTube
- Export the cookies into a file for the domains
https://youtube.com
,https://accounts.google.com
andhttps://www.google.com
- Make sure the cookies are properly formatted with the curl tool
- Download your video using the
--cookies
flag
Why cookies?
I had to use cookies because I couldn’t get the --username
flag to work due to an issue with 2FA in youtube-dl. If 2FA authentication is not turned on then maybe --username
will work. Because of this I needed to export my cookies with EditThisCookie plugin. I couldn’t find a plugin for my version of Firefox (version 60.0.2).
EditThisCookie
The first issue I had with EditThisCookie is it exported in JSON format, but youtube-dl only takes Netscape format.
In EditThisCookie the format can be changed to Netscape HTTP Cookie File
.
YouTube cookies
In order to get the cookies you need to first log into YouTube.
You could then inspect the page and see all the cookies loaded.
If you really wanted to you could then manually copy over all of the cookies manually into a cookies file.
I don’t know how to do this so that the format is right, that is why I am using EditThisCookie and curl
.
However, you will notice that YouTube uses cookies from different domains which are needed for youtube-dl to work.
Unfortunatly, EditThisCookie will not download all the cookies from several domains for a web page.
You will need to manually export the cookies into a file for each of the domains https://youtube.com
, https://acounts.google.com
and https://www.google.com
.
You should finally get a file that looks something like this:
# Netscape HTTP Cookie File
# http://curl.haxx.se/rfc/cookie_spec.html
# This file was generated by EditThisCookie
.youtube.com FALSE / FALSE 1592746624.181169 APISID xxxxxxxxx
.youtube.com FALSE / FALSE 1529675666.4735 GPS 1
.youtube.com FALSE / FALSE 1592746624.181027 HSID xxxxx
.youtube.com FALSE / FALSE 1592746624.956381 LOGIN_INFO xxxxx
.youtube.com FALSE / FALSE 1550712605.073926 PREF xxxxx
.youtube.com FALSE / TRUE 1592746624.181263 SAPISID xxxxx
.youtube.com FALSE / FALSE 1592746624.180932 SID xxxxx
.youtube.com FALSE / TRUE 1592746624.181105 SSID xxxxxx
.youtube.com FALSE / FALSE 1531743283.040211 VISITOR_INFO1_LIVE xxxxx
.youtube.com FALSE / FALSE 0 YSC xxxxx
# Netscape HTTP Cookie File
# http://curl.haxx.se/rfc/cookie_spec.html
# This file was generated by EditThisCookie
.google.com FALSE / FALSE 1592746624.009486 APISID xxxxx
.google.com FALSE / FALSE 1592746624.009335 HSID xxxxx
.google.com FALSE / FALSE 1545488676.021505 NID xxxxxx
.google.com FALSE / TRUE 1592746624.009559 SAPISID xxxxx
.google.com FALSE / FALSE 1592746624.009103 SID xxxxxx
.google.com FALSE / FALSE 1537454702.826293 SIDCC xxxxxx
.google.com FALSE / TRUE 1592746624.009422 SSID xxxxxx
accounts.google.com TRUE / TRUE 1592746624.009627 xxxxx
accounts.google.com TRUE / TRUE 1592746624.106059 GAPS xxxxx
accounts.google.com TRUE / TRUE 1592746624.009204 LSID xxxxx
accounts.google.com TRUE / TRUE 1801458753.849165 SMSV xxxxxx
# Netscape HTTP Cookie File
# http://curl.haxx.se/rfc/cookie_spec.html
# This file was generated by EditThisCookie
.google.com FALSE / FALSE 1592746624.009486 APISID xxxxx
.google.com FALSE / FALSE 1592746624.009335 HSID xxxxx
.google.com FALSE / FALSE 1545488676.021505 NID xxxxx
.google.com FALSE / TRUE 1592746624.009559 SAPISID xxxxx
.google.com FALSE / FALSE 1592746624.009103 SID xxxxx
.google.com FALSE / FALSE 1537454702.826293 SIDCC xxxxxx
.google.com FALSE / TRUE 1592746624.009422 SSID xxxxxx
youtube-dl cookie parser
There is still more work to be done on the cookies file in order for it to work with youtube-dl.
Because youtube-dl cannot parse the format exported from EditThisCookie, the cookie file needs to be run through curl
like this:
curl -b cookiefile.txt --cookie-jar newcookiefile.txt 'https://youtube.com'
That will create a new newcookiefile.txt
which can be used with youtube-dl.
Finally
youtube-dl can now be used to download the private videos by using the --cookies
flag like so:
youtube-dl --cookies=newcookiefile.txt https://youtu.be/Q-xxxx-xxxx
Yay! 🍪
Modified: July 30, 2020 - 02:09:08 PM