How can youtube-dl download videos that require user authentication and 2FA?

6

2

When I try to download on of my private videos I get the following:

youtube-dl https://youtu.be/Q-xxxx-xxxx
[youtube] Q-xxxx-xxxx: Downloading webpage
[youtube] Q-xxxx-xxxx: Downloading video info webpage
WARNING: Unable to extract video title
ERROR: This video is unavailable.

When I try to use username and password it fails on my 2FA.

youtube-dl --username=me@gmail.com  https://youtu.be/Q-xxxx-xxxx
Type account password and press [Return]: 
[youtube] Downloading login page
[youtube] Looking up account info
[youtube] Logging in
Type 2-step verification code and press [Return]: 
[youtube] Submitting TFA code
WARNING: Unable to submit TFA code: HTTP Error 400: Bad Request
[youtube] Q-xxxx-xxxx: Downloading webpage
[youtube] Q-xxxx-xxxx: Downloading video info webpage
WARNING: Unable to extract video title
ERROR: This video is unavailable.

If I try to use --cookies exported with EditThisCookie in Chrome then it also fails. I exported by going to the video in Chrome and copying the cookies into a file.

youtube-dl --cookies=cookies.txt  https://youtu.be/Q-xxxx-xxxx
Traceback (most recent call last):
  File "/usr/bin/youtube-dl", line 11, in <module>
    load_entry_point('youtube-dl==2018.6.14', 'console_scripts', 'youtube-dl')()
  File "/usr/lib/python3.6/site-packages/youtube_dl/__init__.py", line 472, in main
    _real_main(argv)
  File "/usr/lib/python3.6/site-packages/youtube_dl/__init__.py", line 439, in _real_main
    with YoutubeDL(ydl_opts) as ydl:
  File "/usr/lib/python3.6/site-packages/youtube_dl/YoutubeDL.py", line 414, in __init__
    self._setup_opener()
  File "/usr/lib/python3.6/site-packages/youtube_dl/YoutubeDL.py", line 2303, in _setup_opener
    self.cookiejar.load()
  File "/usr/lib/python3.6/http/cookiejar.py", line 1784, in load
    self._really_load(f, filename, ignore_discard, ignore_expires)
  File "/usr/lib/python3.6/http/cookiejar.py", line 2007, in _really_load
    filename)
http.cookiejar.LoadError: 'cookies.txt' does not look like a Netscape format cookies fil

How can I download my private video with youtube-dl?

EDIT:

I also tried an app password but for some reason this also failed for me:

youtube-dl --username=me@gmail.com --password=xxxxxxxxx youtu.be/Q-xxxxxxxx
[youtube] Downloading login page
[youtube] Looking up account info
[youtube] Logging in
WARNING: Unable to login: Invalid password
[youtube] Q-xxxxxx: Downloading webpage
[youtube] Q-xxxxxx: Downloading video info webpage
WARNING: Unable to extract video title
ERROR: This video is unavailable.

Dave Parrish

Posted 2018-06-22T13:43:34.103

Reputation: 561

Question was closed 2018-06-30T01:08:10.887

Answers

11

I was able to download private videos by using the --cookies route. I had to first format the cookies to Netscape format, which is an option in EditThisCookie. Remember you'll not only need the cookies for https://youtube.com but also for https://accounts.google.com. You'll have to do this manually with EditThisCookie Chrome plugin.

I then needed to fix the format of the cookies generated with EditThisCookie with curl. Something like: curl -b oldcookiefile.txt --cookie-jar newcookiefile.txt 'https://youtube.com'.

The --cookies flag can then be used with youtube-dl to download private videos.

I also created a blog post describing what I learned in more detail.

Dave Parrish

Posted 2018-06-22T13:43:34.103

Reputation: 561

3

Use the "cookies.txt" chrome extension, it's easier :-) https://chrome.google.com/webstore/detail/cookiestxt/njabckikapfpffapmjgojcnbfjonfjfg?hl=en

– sekmo – 2018-10-15T17:43:36.890

Brilliant, thanks Dave. I followed the other comment and used 'cookies.txt'. The went to youtube.com, hit the button for cookies.txt and saved all out. They only for youtube.com. The followed the rest of your blog post. – HankCa – 2018-12-20T13:00:25.117