youtube-dl 是在 Github 上擁有將近 10w 顆星星的 Python 開源專案。主樣功能是讓使用者透過 Command Line 來下載 YouTube 上的影片。
現在已經有很多免費的線上 YouTube 影片下載工具了,為什麼還要使用沒有 UI 介面的 youtube-dl 呢?原因是這些線上免費服務通常會有諸多限制:
想要突破這些限制就必須付費。相反的,youtube-dl 可以免費滿足你所有需求:
利用 mac 套件管理神器 Homebrew 來安裝:
brew install youtube-dl如果要使用 youtube-dl 的轉檔、嵌入字幕、提取音頻、加入專輯封面等等 post-processing 的功能的話,則必須安裝 FFmpeg:
brew install ffmpeg若是使用 Linux、Windows 平台,可以參考官方安裝文件
-F 或是 --list-formats-f 或是 --formatmp4, flv, mkv, webm,預設會下載最高畫質的影片--list-formats 所列出的 format code--list-subs 列出所有可下載字幕的語言
--write-sub 下載字幕--embed-sub 將字幕嵌入影片中,只有 mp4, mkv, webm 這些影片格式可以嵌入字幕--all-subs 下載所有語言字幕--sub-lang LANGS 指定字幕語言注意:--write-sub 必須和 --embed-sub 合併使用
假如我想要下載這首超好聽的竹內瑪莉亞 - Plastic Love
先用 -F 或是 --list-formats 列出可下載的檔案格式
youtube-dl -F https://www.youtube.com/watch?v=3bNITQR4Uso再用 --list-subs 列出所有可下載字幕的語言
youtube-dl --list-subs https://www.youtube.com/watch?v=3bNITQR4Uso發現 zh-TW 是可選的,接著下載影片並且嵌入中文字幕
youtube-dl --write-sub --embed-sub --sub-lang zh-TW -f mp4 https://www.youtube.com/watch?v=3bNITQR4Uso如果妳想要一次下載所有語言的字幕並且嵌入的話
youtube-dl --write-sub --embed-sub --all-subs -f mp4 https://www.youtube.com/watch?v=3bNITQR4Uso-x 或 --extract-audio 表示提取音頻--audio-format 後面指定音頻檔案類型: mp3, wav, m4a, aac--embed-thumbnail 加入 youtube 影片縮圖--add-metadata 加入歌曲資訊例如說我要下載這首 King Gnu - 白日
轉檔成 mp3 並且加入縮圖和影片資訊
youtube-dl -x --audio-format mp3 --embed-thumbnail --add-metadata https://www.youtube.com/watch?v=ony539T074w成功下載後可以看到 youtube 影片縮圖和歌曲資訊
除了影片網址的部分改成影片清單的網址,其他部分和下載影片一樣。
youtube-dl -f mp4 <playlist-url>--playlist-start NUMBER: 指定起點--playlist-end NUMBER: 指定終點從第二個影片開始下載到最後一個影片
youtube-dl --playlist-start 2 -f mp4 <playlist-url>從第一個影片下載至第三個影片
youtube-dl --playlist-end 3 -f mp4 <playlist-url>從第二個影片開始下載至第四個影片
youtube-dl --playlist-start 2 --playlist-end 4 -f mp4 <playlist-url>-o, --output TEMPLATE 指定檔名輸出模板。預設是 %(title)s-%(id)s.%(ext)s
假如說我覺得影片 id 很煩很醜,我要把他去掉,只留下影片標題跟副檔名:
youtube-dl -o '%(title)s.%(ext)s'也可以直接指定下載下來的影片檔名:
youtube-dl -o "test.mp4" -f mp4 <url>也可以根據 playlist、uploader 來決定輸出的檔名,以取自官方範例並稍微修改:
Download YouTube playlist videos in separate directory indexed by video order in a playlist
youtube-dl -o '%(playlist)s/%(playlist_index)s - %(title)s.%(ext)s' https://www.youtube.com/watch?v=Ab0l2s5p2f4&list=RDony539T074wDownload all playlists of YouTube channel/user keeping each playlist in separate directory:
youtube-dl -o '%(uploader)s/%(playlist)s/%(playlist_index)s - %(title)s.%(ext)s' https://www.youtube.com/user/TheLinuxFoundation/playlists參考模板參數
如果有些壞壞的影片要登入後才能觀看該怎麼辦呢?youtube-dl 還有支援帳戶登入的功能:
-u, --username USERNAME-p, --password PASSWORD這篇文章是從我舊 Blog 文章經過整理後搬移過來的,相信以上的內容已經涵蓋了大多數的使用場景了。當然 youtube-dl 還有更多強大功能和參數可供使用,參考 youtube-dl 官方文件。