# 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基本介紹

上圖為某位大大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』

首先用`--list-subs`列出所有可下載字幕的語言
```
youtube-dl --list-subs https://www.youtube.com/watch?v=pnnsyjcFnjc
```

發現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
```
登登!現在下載下來的影片可以選擇字幕囉~

注意:只有`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:
例如說我要下載米津玄師的這首「ピースサイン」

轉檔成mp3並且加入縮圖和影片資訊
```
youtube-dl -x --audio-format mp3 --embed-thumbnail --add-metadata https://www.youtube.com/watch?v=9aJVr5tTTWk
```
成功下載後可以看到上傳者和影片縮圖

## 下載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/