# Youtube-dl 下載工具筆記 因為 youtube-dl 官方的 github repository 被 github 刪了,所以寫這篇作為[Youtube-dl濃縮教學筆記](https://yogapan.github.io/2017/08/16/Youtube-dl%E6%BF%83%E7%B8%AE%E6%95%99%E5%AD%B8%E7%AD%86%E8%A8%98/?fbclid=IwAR0euouTC1ZV3-l_jltVyz8nTJ2LVoDu7dEigGZIUak7U_8aA67gV2qeXcY)的備份以及訊息修正。 ###### tags: `好用工具程式` ## 資料參考 * [Youtube-dl濃縮教學筆記](https://yogapan.github.io/2017/08/16/Youtube-dl%E6%BF%83%E7%B8%AE%E6%95%99%E5%AD%B8%E7%AD%86%E8%A8%98/?fbclid=IwAR0euouTC1ZV3-l_jltVyz8nTJ2LVoDu7dEigGZIUak7U_8aA67gV2qeXcY) * [用 youtube-dl 優雅下載 YouTube 影片](https://junyussh.github.io/p/use-youtube-dl-to-download-videos/) * [使用 youtube-dl 備份 YouTube 影片,解決 1080p 高畫質影片無法下載問題](http://blog.lyhdev.com/2014/02/youtube-dl-youtube-1080p.html) 以上網頁已備份到 archives.is 如果已經安裝好 youtube-dl 可以直接看下面這段(Youtube-dl 1080p影片下載),還沒的話,請往下看。 ## Youtube-dl 1080p影片下載 以下三段節錄於[用 youtube-dl 優雅下載 YouTube 影片](https://junyussh.github.io/p/use-youtube-dl-to-download-videos/) 跟[使用 youtube-dl 備份 YouTube 影片,解決 1080p 高畫質影片無法下載問題](http://blog.lyhdev.com/2014/02/youtube-dl-youtube-1080p.html)。 ### 下載影片 以下載一部 Youtube 影片為例,先在 Youtube 找到你想下載的影片,然後複製網址。 ```bash= youtube-dl https://www.youtube.com/watch?v=ZzvYGRH9H1M ``` 這樣雖然能直接下載影片,但是不能選擇自己想要的品質,加上參數 -F 會列出提供哪些畫質下載。 ```bash= youtube-dl -F https://www.youtube.com/watch?v=ZzvYGRH9H1M [youtube] ZzvYGRH9H1M: Downloading webpage [youtube] ZzvYGRH9H1M: Downloading video info webpage [info] Available formats for ZzvYGRH9H1M: format code extension resolution note 249 webm audio only DASH audio 54k , 1fps, opus @ 50k, 2.80MiB 250 webm audio only DASH audio 76k , 1fps, opus @ 70k, 3.59MiB 140 m4a audio only DASH audio 129k , m4a_dash container, mp4a.40.2@128k, 7.20MiB 171 webm audio only DASH audio 132k , 1fps, vorbis@128k, 6.25MiB 251 webm audio only DASH audio 184k , 1fps, opus @160k, 8.45MiB 160 mp4 256x144 144p 109k , avc1.4d400c, 15fps, video only, 5.92MiB 134 mp4 640x360 360p 248k , avc1.4d401e, 30fps, video only, 11.42MiB 133 mp4 426x240 240p 249k , avc1.4d4015, 30fps, video only, 13.60MiB 135 mp4 854x480 480p 518k , avc1.4d401f, 30fps, video only, 20.28MiB 136 mp4 1280x720 720p 887k , avc1.4d401f, 30fps, video only, 33.83MiB 137 mp4 1920x1080 1080p 1639k , avc1.640028, 30fps, video only, 62.66MiB 17 3gp 176x144 small , mp4v.20.3, mp4a.40.2@ 24k, 4.59MiB 36 3gp 320x180 small , mp4v.20.3, mp4a.40.2, 12.73MiB 18 mp4 640x360 medium , avc1.42001E, mp4a.40.2@ 96k, 19.78MiB (best) ``` ### 品質 youtube-dl 預設會下載最高品質的影片,也可以指定畫質。 ```bash= # 下載 MP4 格式中最高畫質,或是其他格式中的最高畫質 $ youtube-dl -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best' # 指定最佳畫質,但不要高於 480p $ youtube-dl -f 'bestvideo[height<=480]+bestaudio/best[height<=480]' # 下載檔案大小小於 50M 的最高畫質影片 $ youtube-dl -f 'best[filesize<50M]' ``` ### 影音合併 YouTube 1080p 以上畫質的影片視訊和音源是分開的下載的,傳統作法是先分別下載影片和聲音檔,再用其他工具合併,而 youtube-dl 可以整合 ffmpeg/avconv,下載完自動合併影音,非常方便。 在 `-f` 參數中同時寫入影片和音源格式代號就會自動合併,預設輸出格式為 `mkv`,可以用 `--merge-output-format` 參數來指定輸出影片封裝格式,可選值有:`mkv`, `mp4`, `ogg`, `webm`, `flv`。 **注意:當合併輸出格式為 mp4 時,音訊如果是 webm 格式合併時會出現錯誤,要指定為 m4a 或其他格式才能自動合併成功。** 如果你要下載最高畫質的影片,並輸出為 MP4 影片可以這樣寫: ``` youtube-dl -f 'bestvideo+bestaudio[ext=m4a]' --merge-output-format mp4 https://www.youtube.com/watch?v=y5wkebBCwAE ``` 或者根據參數 -F 會列出提供的畫質和音質,指定下載的選項: ``` youtube-dl -f '137+140' --merge-output-format mp4 https://www.youtube.com/watch?v=y5wkebBCwAE ``` ## Youtube 直播影片下載 可參考: * [youtube直播视频录制](https://zhuanlan.zhihu.com/p/71232358) * [用youtube-dl在直播进行中同时下载](https://blog.xinoassassin.me/2019/08/Download-Youtube-Steaming-while-Streaming/) ## Youtube-dl基本介紹 ![](https://i.imgur.com/Ol570PP.png) 上圖為某位大大fork到的repository 很多Youtube線上影片下載服務可能會有一些限制,像是 * 畫質、音質和檔案格式限制 * 下載頻率不能太密集、效率不夠好 * 無法下載整份清單(可能是進階會員才能使用) * mp3沒有圖片封面和詳細資訊 * 天殺的的一堆彈出式色情廣告 相反的,youtube-dl可以滿足你所有的需求: * 畫質、音質沒有限制 * 幾乎支援所有影音格式 * 可以下載整份影片清單 * mp3可以加入歌曲封面和專輯資訊 * 支援字幕、影片縮圖 而且更猛的是,他不只可以下載Youtube的影片,甚至連Facebook、Twitter、Xuite上的影片都可以下載! ~~我絕對不會告訴你連Pornhub上的影片都可以輕鬆下載 但是前提是你要會用Command Line啦,呵呵~~ 所有支援下載的網站清單: https://github.com/l1ving/youtube-dl/blob/master/docs/supportedsites.md --- ## 安裝 ### Mac 利用mac套件管理神器[Homebrew](https://brew.sh/)來安裝: ``` brew install youtube-dl ``` ### Windows 直接下載 [exe檔](https://yt-dl.org/latest/youtube-dl.exe) 使用就可以了。 ### ffmpeg 如果要使用youtube-dl的轉檔、嵌入字幕、提取音頻、加入專輯封面等等`Post-processing`的功能的話,則必須安裝[FFmpeg](https://www.ffmpeg.org/) ``` brew install ffmpeg ``` ## 下載影片 ### 起手式:指定影片檔案格式 用`-f`或是`--format`指定影片格式,像是`mp4, flv, mkv, webm` Example: 下載mp4格式影片 ``` youtube-dl -f mp4 <url> ``` ### 品質 Youtube-dl預設會下載最高畫質的影片,但也可以自己選擇想要的品質 Example: 下載解析度不高於480p的影片 ``` youtube-dl -f 'bestvideo[height<=480][ext=mp4]+bestaudio/best[height<=480][ext=m4a]' <url> ``` ### 嵌入字幕 * `--list-subs`列出所有可下載字幕的語言 * `--write-sub`下載字幕 * `--embed-sub`將字幕嵌入影片中 上面這兩個參數要一起合併使用 * `--all-subs`下載所有語言字幕 * `--sub-lang LANGS`指定字幕語言 例如我想要下載まふまふcover的這首『Loser』 ![](https://i.imgur.com/7U1RQB1.jpg) 首先用`--list-subs`列出所有可下載字幕的語言 ``` youtube-dl --list-subs https://www.youtube.com/watch?v=pnnsyjcFnjc ``` ![](https://i.imgur.com/ynhYG7H.png) 發現zh-TW(繁體中文)是可選的 下載影片並且嵌入中文字幕 ``` youtube-dl --write-sub --embed-sub --sub-lang zh-tw -f mp4 https://www.youtube.com/watch?v=pnnsyjcFnjc ``` 如果妳想要一次下載所有語言的字幕並且嵌入的話 ``` youtube-dl --write-sub --embed-sub --all-subs -f mp4 https://www.youtube.com/watch?v=pnnsyjcFnjc ``` 登登!現在下載下來的影片可以選擇字幕囉~ ![](https://i.imgur.com/TIIg2BS.jpg) 注意:只有`mp4, mkv, webm`這些影片格式可以嵌入字幕。 ## 下載音樂 ### 起手式: 指定音樂檔案類型 * `-x`或`--extract-audio`表示提取音頻 * `--audio-format`後面指定音頻檔案類型,像是 `mp3, wav, m4a, aac` Example: ``` youtube-dl -x --audio-format mp3 <url> ``` ### 縮圖和資料 * `--embed-thumbnail`加入專輯封面(其實就是youtube影片上的縮圖) * `--add-metadata`加入影片資訊 Example: 例如說我要下載米津玄師的這首「ピースサイン」 ![](https://i.imgur.com/Hd1sLs2.png) 轉檔成mp3並且加入縮圖和影片資訊 ``` youtube-dl -x --audio-format mp3 --embed-thumbnail --add-metadata https://www.youtube.com/watch?v=9aJVr5tTTWk ``` 成功下載後可以看到上傳者和影片縮圖 ![](https://i.imgur.com/x6kTH45.png) ## 下載playlist ### 下載整份影片清單 ``` youtube-dl -f mp4 <playlist-url> ``` PS: 除了影片網址的部分改成影片清單的網址,其他部分和下載影片一樣。 ### 指定起點和終點 * `--playlist-start NUMBER`: 指定起點 * `--playlist-end NUMBER`: 指定終點 從第三個影片開始下載到最後一個影片 ``` youtube-dl --playlist-start 3 -f mp4 <playlist-url> ``` 從第一個影片下載到倒數第二個影片 ``` youtube-dl --playlist-end 2 -f mp4 <playlist-url> ``` 從第三個影片開始下載到倒數第二個影片 ``` youtube-dl --playlist-start 3 --playlist-end 2 -f mp4 <playlist-url> ``` ## 輸出檔名 `-o, --output TEMPLATE`指定檔名輸出模板。預設是`%(title)s-%(id)s.%(ext)s` 直接指定檔名叫做`test.mp4` ``` youtube-dl -o "test.mp4" -f mp4 <url> ``` 假如說我覺得影片id很煩很醜,我要把他去掉,只留下影片標題跟副檔名 ``` youtube-dl 0o '%(title)s.%(ext)s' ``` ### 以下官方範例 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/playlist?list=PLwiyx1dc3P2JR9N8gQaQN_BCvlSlap7re ``` Download 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 ``` 查詢更多模板參數: https://github.com/l1ving/youtube-dl#output-template ## 登入 如果有些影片要登入後才能觀看要怎麼辦呢?youtube-dl還有支援帳戶登入的功能: * `-u, --username USERNAME` * `-p, --password PASSWORD` Example: ``` youtube-dl -u 'username@gmail.com' -p 'password' https://www.youtube.com/?v=<video_id> ``` ## 總結 以上的筆記為超濃縮精華版,youtube-dl還有更多強大的功能和參數可供使用。如果要更詳細的參考文件,可以直接參考官方文件: https://github.com/l1ving/youtube-dl/