[筆記]如何使用 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
  • acounts.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

使用 cookie -jar 選項完成認證

加上 --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, [email protected] (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, [email protected] 96k (44100Hz), 569.40MiB
22           mp4        1280x720   720p 1667k , avc1.64001F, 30fps, [email protected] (44100Hz) (best)

後記

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

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

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

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

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

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

發表迴響