快轉到主要內容

yt-dlp ~ 免費網頁影片下載軟體教學,支援Facebook、Twitter、Bilibili等網站,可下載m3u8

資訊科技 資訊科技應用 Yt-Dlp FFmpeg
🗓️ 民國113年 甲辰年
✍ 切換正體/簡體字
目錄

本篇講解使用yt-dlp下載網站內嵌影片的用途,並討論yt-dlp指令的用法。

yt-dlp是一款開源、免費、無廣告的影片下載工具,為youtube-dl的分支版,主要用來下載Youtube影片。

有趣的是,名義上用於下載Youtube影片的「yt-dlp」也可以用來下載Youtube以外網站的影片。

基本上只要是使用m3u8串流影片的網站,yt-dlp都有辦法用類似的指令,把網頁的內容抓下來,再搭配ffmpeg自動將.ts轉檔成方便播放的.mp4格式。

yt-dlp下載Twitter影片

於是乎,想下載網站影片,yt-dlp就成了幾近萬能的下載工具。足以取代VideoDownloadHelper、File Centepede、XX影片下載器等狗一票的軟體了。

1. yt-dlp支援的網站
#

根據 官方Supported sites列表,yt-dlp支援許多熱門影片網站,我挑幾個中文圈比較熱門的舉例:

  • Twitter / X
  • Facebook
  • Instagram
  • Reddit
  • Tiktok 抖音
  • Threads
  • Twitch
  • Weibo 微博
  • Vimeo
  • Google Drive
  • Bilibili 哔哩哔哩
  • iQiYi: 爱奇艺
  • WeTV 腾讯视频
  • YouKu 优酷
  • Zhihu 知乎
  • Niconico ニコニコ
  • Crunchyroll
  • AcFun
  • Bandcamp
  • NetEase Cloud Music 网易云音乐
  • QQ Music QQ音乐
  • FC2
  • Iwara
  • Patreon
  • PornHub
  • XVideos

沒有在列表上的網站也可以用yt-dlp試試看,yt-dlp程式會嘗試找出網頁中所有的影片讓你下載。

註:巴哈姆特動畫瘋已確認不行,請改用 AnimeGamerPlus下載。

1. 安裝yt-dlp
#

yt-dlp支援Linux、Windows、macOS、Android、iOS系統。建議搭配ffmpeg使用,方便轉檔。

參見 yt-dlp安裝

雖然各大網站設計不同,但部份概念是通用的,不論是播放清單、直播、專輯封面、metadata等資訊,yt-dlp都會嘗試把它抓下來。

2. yt-dlp指令基本格式
#

yt-dlp是命令行程式,必須在終端機打指令操作。

yt-dlp指令格式如下:

yt-dlp    [參數1...參數2...參數3]   "影片網址1" "影片網址2" "影片網址3"

yt-dlp至少得填入一個影片網址,其餘參數可以隨意組合,以方便你控制具體下載的內容。

有多個參數和網址的例子:

yt-dlp --output "%(title)s.%(ext)s" -f "bestvideo[height=1080]+bestvideo[ext=mp4]+bestaudio" "https://twitter.com/elonmusk/status/1745338260660854973/video/1"

如果只給網址,不加任何參數,就是讓yt-dlp自己判斷。

只有網址的例子:

yt-dlp "https://twitter.com/elonmusk/status/1745338260660854973/video/1"

3. 下載網頁影片的思考方向
#

遇到問題,敬請參考 官方文件

讓yt-dlp自行決定
#

這是最簡單的作法。預設狀況下,餵給yt-dlp影片網址,不加任何參數,如果該網站有在yt-dlp的支援列表,程式就會自動尋找最佳品質的影片下載,並自動按照寫好的規則合併影音。

網站太多了,我用Twitter舉例吧,其他網站敬請自行舉一反三。

比如我餵這個 Twitter影片的網址:

yt-dlp "https://twitter.com/elonmusk/status/1745338260660854973/video/1"

因為yt-dlp有這個網站的規則,它就會自動選取「最高畫質+最高音質」的網址,下載後自動合併音訊和視訊成為影片。

列出可下載的影片格式
#

如果不確定目標網站有哪些影片解析度能下載,可以用-F參數列出網頁中的影片。(不加-F,yt-dlp會直接進行下載影片的動作)

yt-dlp -F "https://twitter.com/elonmusk/status/1745338260660854973/video/1"

範例輸出如下,我們可以看到這個Twitter網頁中有4個影片的ID列出來了

要手動下載特定網址的檔案,請用-f參數加上ID

 yt-dlp -f "http-2176" "https://twitter.com/elonmusk/status/1745338260660854973/video/1"

像Twitter這類網站的視訊和音訊是分開的,需要分別下載視訊和音訊後,手動用ffmpeg指令合併。

也有的網站下載下來就是影片檔了,需要多方嘗試。

不過正如我上面說的,如果yt-dlp本身就有支援該網站,你其實不用手動指定格式,一切交給yt-dlp決定就好。

使用條件過濾影片
#

yt-dlp提供了多樣的條件過濾器,可以在下載影片時,從檔案大小、解析度、位元率去篩選結果。

請使用-f參數,並於後方加上過濾條件。

如果下載時不加任何過濾參數,yt-dlp默認使用-f bestvideo+bestaudio的過濾條件,也就是下載最佳影片與最佳音訊的影片。

yt-dlp提供「best」、「bestvideo」、「bestaudio」三種條件,best(縮寫為b)會篩出網址中的影片和音訊,bestvideo(bv)只有視訊,bestaudio(ba)只有音訊囉。

所以-f bestvideo+bestaudio的參數也可以寫成-f bv+ba

來做些變化,使用bestvideo加上height=720,等同告訴yt-dlp,下載影片的時候選取720p以上高度(即720p畫質)的影片:

yt-dlp -f "bestvideo[height=720]"  "網址"

如果加上<=符號,過濾條件就會變成「選取畫質最高720p的影片」。

yt-dlp -f "bestvideo[height<=720]"  "網址"

也可以使用其他的比較運算子<, >, >=, = , != ,以及正則表達式。

指定影片寬度:

yt-dlp -f "bestvideo[width=1920]"  "網址"

指定音訊位元率,單位為Kbps:

yt-dlp -f "bestvideo[asr>256]"  "網址"

指定影片大小,單位為MB:

yt-dlp -f "bestvideo[filesize>=100M]"  "網址"

指定影片副檔名:

yt-dlp -f "bestvideo[ext=webm]"  "網址"

或者,只選取最佳音訊,不要視訊:

yt-dlp -f "bestaudio"  "網址"

如果你要使用複合條件搜尋,那麼就使用加號和多個中括號分開。

這邊的例子是,選取1080p,且音訊位元率在256Kbps以上的mp4影片。

yt-dlp -f "bestvideo[heigh=1080]+bestvideo[etx=mp4]+bestaudio[asr>256]" "網址"

你還可以使用斜線/隔開兩個表達式,達成備援選項的效果,例如以下範例,讓yt-dlp嘗試抓1080p的mp4格式影片,沒有的話就隨便抓。

yt-dlp -f "bestvideo[height=1080]+bestvideo[ext=mp4]+bestaudio / bestvideo+bestaudio" "網址"

如果同時使用-F-f(注意大小寫),就是有點像「搜尋模式」的樣子,只列出該網址可下載的影片格式,並依照你給的條件過濾,不下載影片。

yt-dlp -F -f "bestvideo[height=1080]+bestvideo[ext=mp4]+bestaudio" "網址"

控制影片輸出檔名
#

yt-dlp提供多個欄位,可按照影片的標題、網址、播放清單名稱決定下載的檔名。

使用--output控制影片輸出的檔名,此參數若為空白,yt-dlp會自行決定輸出格式,像Twitter的影片就會變成「推文標題」+「影片網址數字」。

建議使用這個,用"%(title)s.%(ext)s使輸出的影片完全符合原影片的標題,並包含附檔名。

yt-dlp --output "%(title)s.%(ext)s" "網址"

如果怕影片出現奇怪字元導致系統無法辨識,可加上--restrict-filenames限制只能輸出ASCII編碼的字元。

yt-dlp --output "%(title)s.%(ext)s" --restrict-filenames "網址"

加上--windows-filenames則是防止輸出Windows不相容的檔名

yt-dlp --output "%(title)s.%(ext)s" --windows-filenames "網址"

加上-P可以指定目前要下載到哪個資料夾,比如Downloads

yt-dlp --output "%(title)s.%(ext)s" -P "/home/user/Downloads" "網址"

如果網站需要登入的話
#

使用--cookies-from-browser參數,將瀏覽器cookie(表示你的帳號在某網站登入狀態)傳給yt-dlp。

例如讀取Google Chrome的cookie,並下載影片:

yt-dlp --cookies-from-browser chrome "網址"

手動在瀏覽器用 Cookie Export之類的擴充功能,將cookie匯出單一txt檔案,再餵給yt-dlp也可以:

yt-dlp --cookies cookies.txt "網址"

如果要下載直播的話
#

目前已知Youtube直播可以用--live-from-start指定,Twitch不行。

yt-dlp --output "%(title)s.%(ext)s" --live-from-start "直播網址"

4. 在下載的影片嵌入額外資訊
#

metadata指的是影片描述、演出者、等資訊,有些網站也支援嵌入縮圖到影片檔。

yt-dlp主要是為Youtube影片設計的程式,Youtube能下載的資料不見得能套用到其他網站上。

此外,你不一定要嵌入資訊到影片檔裡面,這些資訊都可以在下載時獨立存檔。


加上--add-metadata參數會把影片的說明欄和其他資訊嵌入到影片檔的synopsis欄位,音樂則是寫入到音訊檔的演出者資訊。

yt-dlp --add-metadata "網址"

加上--write-description則是把說明欄輸出成單獨一個文字檔案。如果你只想要文字檔,那就加上--skip-download跳過下載影片。

yt-dlp --write-description --skip-download "網址"

--add-metadata--write-description可以同時使用。

以此類推:

--embed-thumbnail嘗試把影片縮圖嵌入到影片檔內(需注意容器是否支援縮圖),--write-thumbnail下載縮圖檔。

--embed-subs嵌入字幕檔到影片,--write-subs下載字幕檔。

--embed-chapters嵌入時間軸章節資訊。

--embed-info-json在影片嵌入json格式的影片資訊,僅支援mkv/mka容器。

5. yt-dlp下載影片轉檔操作
#

指定影片和音訊格式
#

與其下載後轉檔,何不在下載之時就指定好呢?

下載影片加上--merge-output-format,yt-dlp就會嘗試將下載的結果合併成該影片格式,目前支援mkv, mov, mp4, webm的容器格式。

yt-dlp --merge-output-format mp4 "網址"

如果你想要在yt-dlp自動合併視訊音訊後保留所有原始檔案,那就加上--keep-video參數。

yt-dlp --merge-output-format mp4 --keep-video "網址"

要抽出影片音訊,使用--extract-audio參數,並指定音訊格式。這邊的例子是抽出音訊,並自動轉檔成320K的MP3。

yt-dlp --extract-audio --audio-format mp3 --audio-quality 320K "網址"

假設影片帶有章節資訊,那麼用--split-chapters讓yt-dlp自動分段影片:

yt-dlp --split-chapters "網址"

傳給ffmpeg做進一步處理
#

當然了,yt-dlp也支援在下載完成之後,丟給其他程式轉檔。

yt-dlp搭配ffmpeg的用法:在Linux的bash,搭配管線功能,將yt-dlp的內容導向至ffmpeg。

具體作法為在yt-dlp指令末端加上-o - 參數,再加上一個|,後面就可讓ffmpeg承接yt-dlp所輸出的內容做處理。

# yt-dlp下載影片,輸出,讓ffmpeg增加影片的PTS數值,加快播放速度,並轉檔成mkv檔案
yt-dlp "網址" -o - | ffmpeg -i - -filter:v "setpts=0.5*PTS" output.mkv

6. 將yt-dlp常用參數存成設定檔
#

覺得yt-dlp每次下載都要加一堆參數好煩?我們可以使用設定檔(config)將常用參數存起來。

根據官方文件,Linux/macOS的設定檔位於~/.config/yt-dlp/config,Windows則是C:\Users\使用者名稱\AppData\Roaming\yt-dlp\config

那麼我們就將常用的參數設定檔存著,也就是不論下載影片或音樂,固定會用到的參數。

  1. 建立一個yt-dlp.conf檔案,裡面填入要用的參數,每行分隔。這裡我只放了固定輸出檔名為影片標題+副檔名,不要有額外資訊。並一律給下載的檔案嵌入縮圖。
--output "%(title)s.%(ext)s"
--embed-thumbnail
  1. 這樣日後開啟終端機,下載影片就只需要打yt-dlp "影片網址",剩餘參數會自動帶入設定檔所寫的內容。

相關文章

yt-dlp指令使用教學,萬能Youtube影片命令行下載工具
資訊科技 資訊科技應用 Yt-Dlp Youtube Youtube Music
Mullvad VPN安裝教學,注重隱私的付費VPN供應商
資訊科技 資訊科技應用 VPN Mullvad
Windows 11系統剛安裝後的設定優化
資訊科技 資訊科技應用 Windows

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur連結。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。