[筆記]如何使用 youtube-dl 下載 YouTube 會員限定的影片

先說好,你還是要有會員資格才行

首先聲明,這篇筆記基本上是我照著 Dave Parrish’s Blog 上的一篇文章操作的紀錄而已,詳細的解說還是建議各位到他的網站閱讀一下

Dave Parrish – How to download private videos from YouTube with youtube-dl

前置準備,先安裝 youtube-dl

過程並不複雜,這邊大概條列一下:

sudo wget https://yt-dl.org/downloads/latest/youtube-dl -O /usr/local/bin/youtube-dl
sudo chmod a+rx /usr/local/bin/youtube-dl

或者不想用 sudo

# 設定自己的 bin 資料夾並加入路徑(記得把 export 加進 .bashrc)
mkdir ~/bin
export PATH=/home/$(whoami)/bin:$PATH
# 下載
wget https://yt-dl.org/downloads/latest/youtube-dl -O ~/bin/youtube-dl
chmod u+x /usr/local/bin/youtube-dl

為什麼不用 --username 選項?

根據小獅自己的經驗,YT 在非公開影片的方面其實相當敏感,youtube-dl 很容易會被判定成機器人(畢竟它就是)

而且比起 session cookie,直接把密碼 pass 給第三方程式對我來說有點…怪怪的

注:我認為 youtube-dl 過去並沒有不良紀錄的這點,說明了它相當值得信任,但原則就是原則(聳肩)

從 Firefox 取出 cookie

因為小獅我使用的是 Firefox 瀏覽器,所以跟 Dave Parrish 不一樣,使用的 Cookie Quick Manager 做示範,不過做的事情是一樣的

Cookie Quick Manager - Firefox Browser Add-Ons

連結:Cookie Quick Manager – 下載 🦊 Firefox 擴充套件(zh-TW)

直接安裝就好了

click Cookie Quick Manager > Manage all Cookies

▲ 開啟 Cookie Quick Manager 的選單,並點選 Manage all Cookies

click open the dashboard

▲ 點選 open the dashboard,開啟設定

change export option to Netscape

▲ 找到 Export 選項,選擇 Netscape 為輸出格式

copy cookies to clipboard

▲ 回到剛才的 cookies 列表,複製以下幾個 Domain 的 cookie 到文字檔

  • .youtube.com
  • accounts.google.com
  • .google.com
  • .google.com.tw(如果有的話)

cookie.txt - gedit

▲ 大概像這樣,這邊的範例存成 cookie.txt

curl -b cookie.txt --cookie-jar cookiejar.txt 'https://youtube.com'

▲ 接下來使用 curl 指令取得 Set-Cookie 訊息,並存至 cookiejar.txt

使用 --cookies 選項進行使用者驗證

加上 --cookies=cookiejar路徑 就可以使用剛才的 cookie 進行使用者驗證了!

youtube-dl \
 --format bestvideo+bestaudio \
 --write-thumbnail \
 -o '[%(upload_date)s]%(title)s-%(id)s.%(ext)s' \
 --cookies=cookiejar.txt \
 --limit-rate 2M \
 https://www.youtube.com/watch\?v\=影片ID

不過我習慣再多加幾個選項

  • --format 選擇最佳畫面 + 音質(大概會需要安裝 ffmpeg
  • --write-thumbnail 順便下載封面圖片(請參考之前的:如何幫影片檔設定封面圖片 – 使用 MKV 容器
  • -o 設定輸出檔名為:[日期]標題-網址.副檔名
  • --limit-rate 限制下載速度為 2MB/s,避免被 YT 討厭

還是出錯了怎麼辦

像是我在下載 某一部 影片的時候,出現了 403: Forbidden 訊息,通常稍候一下,正常瀏覽一些影片之後,再複製 cookie 試一次就能恢復正常:

~ » youtube-dl --format bestvideo+bestaudio --write-thumbnail -o '[%(upload_date)s]%(title)s-%(id)s.%(ext)s' \
--cookies=cookiejar.txt https://www.youtube.com/watch\?v\=影片ID
 影片ID: Downloading webpage
 影片ID: Downloading thumbnail ...
 影片ID: Writing thumbnail to: ??????.jpg
WARNING: Requested formats are incompatible for merge and will be merged into mkv.
[download] Destination: ??????.f137.mp4
[download] 100% of 2.77GiB in 04:50
ERROR: unable to download video data: HTTP Error 403: Forbidden

又或者,根據上面的訊息,畫面的部份(??????.f137.mp4)已經下載完成([download] 100%),所以我們可以用 --format bestaudio 選項,僅下載聲音的部份,之後再使用 MKVToolNix 合成一個檔案就 OK 了!(小獅之前寫過相關的文章

~ » youtube-dl --format bestaudio -o '[%(upload_date)s]%(title)s-%(id)s.%(ext)s' \
--cookies=cookiejar.txt https://www.youtube.com/watch\?v\=影片ID
 影片ID: Downloading webpage
[download] Destination: ??????.webm
[download] 100% of 121.99MiB in 00:12

BTW,使用 --list-formats 可以出這部影片所有可供下載的格式之後,搭配 --format 選項指定

~ » youtube-dl --cookies=cookiejar.txt https://www.youtube.com/watch\?v\=影片ID --list-formats   
 影片ID: Downloading webpage
[info] Available formats for 影片ID:
format code  extension  resolution note
249          webm       audio only tiny   63k , opus @ 50k (48000Hz), 47.32MiB
250          webm       audio only tiny   82k , opus @ 70k (48000Hz), 62.89MiB
140          m4a        audio only tiny  137k , m4a_dash container, mp4a.40.2@128k (44100Hz), 121.52MiB
251          webm       audio only tiny  157k , opus @160k (48000Hz), 121.99MiB
278          webm       256x144    144p  110k , webm container, vp9, 30fps, video only, 87.74MiB
160          mp4        256x144    144p  137k , avc1.4d400c, 30fps, video only, 99.03MiB
242          webm       426x240    240p  232k , vp9, 30fps, video only, 178.63MiB
133          mp4        426x240    240p  306k , avc1.4d4015, 30fps, video only, 214.13MiB
243          webm       640x360    360p  419k , vp9, 30fps, video only, 326.60MiB
134          mp4        640x360    360p  629k , avc1.4d401e, 30fps, video only, 411.13MiB
244          webm       854x480    480p  773k , vp9, 30fps, video only, 576.20MiB
135          mp4        854x480    480p 1142k , avc1.4d401f, 30fps, video only, 699.80MiB
247          webm       1280x720   720p 1568k , vp9, 30fps, video only, 1.11GiB
136          mp4        1280x720   720p 2300k , avc1.4d401f, 30fps, video only, 1.41GiB
248          webm       1920x1080  1080p 2672k , vp9, 30fps, video only, 2.01GiB
137          mp4        1920x1080  1080p 4613k , avc1.640028, 30fps, video only, 2.77GiB
18           mp4        640x360    360p  606k , avc1.42001E, 30fps, mp4a.40.2@ 96k (44100Hz), 569.40MiB
22           mp4        1280x720   720p 1667k , avc1.64001F, 30fps, mp4a.40.2@192k (44100Hz) (best)

後記

五月已經快過去了呢,不知道 信姫様 回到 戦国時代 的這個月過得怎麼樣呢?

這應該是小獅這個感傷系列的最後一篇了(雖然也才第二篇),如果有不習慣的觀眾請容我在這裡跟大家道歉…

不過,可以自己決定任性,自己承擔結果,不就是個人部落格的最大好處嗎?(笑

50 responses to “[筆記]如何使用 youtube-dl 下載 YouTube 會員限定的影片

  1. 您好我對您的文章非常有興趣,但我自己卡在文字檔跟curl的部分,本人年紀不大有些東西不是很懂,希望得到指點

    1. 請問你是卡在哪個步驟呢?
      Ps. 最近 youtube-dl 正遭受 RIAA(美國唱片業協會)的 DCMA Takedown,可能會比較難更新一點

  2. 不好意思,我卡在
    curl: (1) Protocol “‘https” not supported or disabled in libcurl
    請問該怎麼解決呢?

  3. 我使用curl -V指令,確定Protocols有列出支援https協議,但仍然跳出上述的問題

  4. 您好
    請問一下,我依照您的教學步驟操作下來,在”使用 cookie -jar 選項完成認證”,出現了錯誤。
    ERROR: This video is available to this channel’s members on level: XXX (or any higher level). Join this channel to get access to members-only content and other exclusive perks.
    我有加入頻道的會員。請問是我的操作步驟錯誤了嗎?謝謝

  5. 執行Youtube 結果出現下面這個
    /usr/bin/env: ‘python’: No such file or directory

    1. 因為 youtube-dl 需要用到 Python,請先安裝 python-devpython3-dev (這邊寫的是 Ubuntu 的套件名稱,如果是別的 OS 還請再提問)

  6. 請問前面的sudo是下載youtube-dl用的嗎
    前面cookie的部分還了解,但從curl -b cookie.txt –cookie-jar cookiejar.txt ‘https://youtube.com’這裡開始就不太懂了
    這些東西要在哪裡輸入呢?

    1. wget 指令加上 sudo 是為了寫入到 /usr/local/bin 目錄(權限:root:root)


      curl -b cookie.txt --cookie-jar cookiejar.txt 'https://youtube.com'

      是在終端機輸入喔!假設上一步的 cookie.txt 是存在 /home/ubuntu/ 底下,請先 cd /home/ubuntu 跳過去

      1. 請問window10要怎樣執行curl -b cookie.txt –cookie-jar cookiejar.txt ‘https://youtube.com’
        不好意思我是小白不太懂

        1. 請試試在 PowerShwll 中執行,curl 指令在 1709 更新之後應該就有了

  7. 想問一下有辦法設定下載的封面圖尺寸嗎
    用 youtube-dl –merge-output-format mp4 –playlist-reverse –max-downloads 10 -o “%(autonumber)s-[%(upload_date)s]%(title)s-%(id)s.%(ext)s” –write-thumbnail
    結果下載的封面是336188
    下載另一個清單每一部都正常是1280
    720
    上面下載2個封面圖都那大小就先停止了

    1. 封面尺寸要看 YT 有什麼可以載,youtube-dl 預設會載最大的

      如果是舊的影片,很常是沒有 1280*720 可以選

  8. 非常开心看到你的贴子,请问有办法可以下载天狗卫视的会员区视频吗?有两个片子无法观看,万分感谢。盼回复

    1. 若是 youtube-dl 沒有辦法的話,我也不確定有哪些工具可以用了
      感謝你的回覆

  9. 萬分感謝大大分享此方法….我要再找時間透徹研究怎麼用這個方法載可可會長的會限影片
    可以的話希望也能請大大為小弟解答一些疑惑點

  10. 您好, 請問我依照教學, 在”使用 cookie -jar 選項完成認證”,顯示
    ERROR: Join this channel to get access to members-only content like this video, and other exclusive perks.
    已經加入頻道的會員, 最新版本 etc.請問要如何更正?

    1. 有的時候會遇到這樣的情況,通常隔天重新做一次 cookie jar 就能夠成功(我也不知道為什麼)

      另外也請檢查一下版本(目前是 2021.06.06)
      youtube-dl --version
      用以下指令更新
      youtube-dl --update

      1. 你好 , 我也是相同情況確定是最新版, 且也為會員, 但試了好久都是相同的警語, 是否這個方法已經無法下載會限影片了呢, 有其他替代方案嗎

    1. 通常是 DNS 有問題
      請問你是用哪個 DNS 呢?

      或者改用以下指令,直接指定 curl 使用的 DNS 試試
      curl --dns-servers 1.1.1.1 -b cookie.txt --cookie-jar cookiejar.txt 'https://youtube.com'

  11. 請問一下,輸入下載指令後出現 不是內部或外部命令、可執行的程式或批次檔。 然後無法下載,請問該怎麼辦?

    1. 你指的是 curl 指令嗎?
      如果你使用 Windows,可能需要先安裝 Cygwin

  12. 您好
    請問cookie是acounts.google.com
    還是accounts.google.com呢?

    我在Cookie Quick Manager 裡只有看到accounts.google.com
    acounts.google.com是空白的是正常的嗎?

    1. 啊… 應該是我的疏忽,accounts.google.com 才是正確的
      感謝提醒 TAT

  13. 不好意思請問一下,我在cookiejar.txt這步遇到困難,我已經複製好相關cookie並存成cookie.txt,但在輸入curl -b cookie.txt –cookie-jar cookiejar.txt ‘https://youtube.com’後cmd沒有任何反應,也沒有找到cookiejar.txt的檔案,是那一步出錯了?

    1. 請問 curl 指令的那一段是直接複製貼上的嗎?
      可以再幫我試一次嗎?沒有錯誤訊息的話我也不知道該怎麼辦 Orz

    2. 我碰到过,我的情况是将“cookie.txt”换成 “C:\Users\xx\Downloads\cookie.txt”(就是文件所在的位置)就可以了
      curl -b “C:\Users\xx\Downloads\cookie.txt” –cookie-jar cookiejar.txt ”https://youtube.com“

  14. 原來會限也可以抓, 照步驟已測試成功. 明天IRyS會限刪檔歌回就靠你這篇文了.

  15. 您好按照步驟在dl 下載後也設定環境變數了, 但在指令中打youtube-dl確認後出現 “不是內部或外部命令、可執行的程式或批次檔。” 的訊息 , 還有cookiejar.txt這步遇到困難,複製好相關cookie並存成cookie.txt,但在輸入curl -b cookie.txt –cookie-jar cookiejar.txt ”https://youtube.com“
    出現”curl: (6) Could not resolve host: cookiejar.txt”這個訊息 , 完全不知道哪裡出錯了
    按照樓上將“cookie.txt”换成 “C:\Users\xx\Downloads\cookie.txt”(就是文件所在的位置)的方式還是出現一樣的訊息 , 不知道您有沒有discord 能否教學一下 我願意付費學習
    已經搞了一個下午了還是完全不行

  16. 你好 請問輸入完這串youtube-dl \ –format bestvideo+bestaudio \ –write-thumbnail \ -o ‘[%(upload_date)s]%(title)s-%(id)s.%(ext)s’ \ –cookies=cookiejar.txt \ –limit-rate 5M \ https://www.youtube.com/watch?v=該影片ID

    但是會跑出ERROR: ‘\’ is not a valid URL. Set –default-search “ytsearch” (or run youtube-dl “ytsearch:\” ) to search YouTube

    要怎麼解決

    1. 根據錯誤訊息,我猜測是接續符號 \ 的關係,在範例中為了讓大家比較方便閱讀,我把指令切成多行。
      如果你偏好使用單行指令,請將 \ 去掉即可!

  17. ERROR: This video is available to this channel’s members on level: (or any higher level). Join this channel to get access to members-only content and other exclusive perks.
    ‘ab_channel’
    剛剛看了一下 希望明天重抓cookie後能解決QQ

  18. 你好, 請問dl下載會員限定影片是不是被youtube擋了, 打了指令後出現Join this channel to get access to members-only content like this video, and other exclusive perks. 我已經是會員了,還是無法下載, 卻頂版本是最新的2021 6/6 , 試了兩天還是不行

  19. 全程按照你的步驟,cookiejar.txt也有出現,到最後一步要下載影片時出現
    [youtube] (影片id): Downloading webpage
    ERROR: Join this channel to get access to members-only content like this video, and other exclusive perks.
    確定有頻道會員,youtube dl也是最新版,請問是遇到什麼問題呢?

    1. 最近 youtube-dl 終於有更新了(2021.12.17),或許會有用,有空我再來試試
      我後來是使用 yt-dlp(https://github.com/yt-dlp/yt-dlp)來下載

  20. 贡献一个我的情况, 我是用youtube-dl会出现下载速度在70K左右的情况,在reddit查了下,这是因为youtube对youtube-dl进行了限制导致的,目前youtube-dl并没有针对这个进行更新,但是另外一个fork版本yt-dlp对这个进行了修复,想要使用yt-dlp很简单,在下载步骤中使用

    sudo curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp
    sudo chmod a+rx /usr/local/bin/yt-dlp

    命令,然后再后面的下载视频步骤中把

    youtube-dl \
    –format bestvideo+bestaudio \
    –write-thumbnail \
    -o ‘[%(upload_date)s]%(title)s-%(id)s.%(ext)s’ \
    –cookies=cookiejar.txt \
    –limit-rate 2M \
    https://www.youtube.com/watch\?v\=影片ID

    改成

    yt-dlp \
    –format bestvideo+bestaudio \
    –write-thumbnail \
    -o ‘[%(upload_date)s]%(title)s-%(id)s.%(ext)s’ \
    –cookies=cookiejar.txt \
    –limit-rate 2M \
    https://www.youtube.com/watch\?v\=影片ID

    即可(没有markdown真的好讨厌XD

  21. 下载速度受限的同学可以使用yt-dlp 只需下载部分改一下就好了,参数和youtube-dl一样。

    1. 同意,目前 yt-dlp 更新比較快,如果以 youtube 為主,推薦改用這個!

  22. 你好,在輸入步驟中curl指令後,cmd彈出”curl: (3) URL using bad/illegal format or missing URL”並無法進入下一步,應如何解決?謝謝

    1. 可以告訴我你用的環境嗎? Windows+Cygwin? 還是 Linux/MacOS?

      或者你也可以先改用雙引號試試:
      curl -b cookie.txt --cookie-jar cookiejar.txt "https://youtube.com"

  23. curl -b cookie.txt –cookie-jar cookiejar.txt ‘https://youtube.com’
    這邊顯示 找不到接受引數 cookiejar.txt的位置參數
    請幫幫我

  24. 我在 入步驟中curl指令後 出現這個,請問我可以如何除錯呢? (0x80092012) – 撤銷功能無法檢查憑證的撤銷。

DD党連合古龍組若眾–桐生武 發表迴響取消回覆