yt-dlp で チャネル内動画を一括ダウンロードする

## この記事の目的

この記事では、[yt-dlp](https://github.com/yt-dlp/yt-dlp) を使用して YouTube のチャネル内動画を一括ダウンロードする方法を説明します。

サンプルコードでは、 [Mark Rober](https://www.youtube.com/@MarkRober/videos) 、[MrBeast](https://www.youtube.com/@MrBeast/videos) 、[精选电视剧频道](https://www.youtube.com/@%E7%B2%BE%E9%80%89%E7%94%B5%E8%A7%86%E5%89%A7%E9%A2%91%E9%81%93/playlists) 、[Microsoft Developer](https://www.youtube.com/c/MicrosoftDeveloper/playlists) などを例にとり、期間や単語を指定してのダウンロード方法を説明しています。

[ヨビノリ](https://www.youtube.com/@yobinori/playlists) や [まめたま](https://www.youtube.com/@mametama/playlists) 、 [キンプリ](https://www.youtube.com/@kp_official_523/playlists) 、 [シミチコ](https://www.youtube.com/@%E6%B8%85%E6%B0%B4%E3%83%9F%E3%83%81%E3%82%B3%E3%81%AE%E3%82%B7%E3%83%9F%E3%83%81%E3%82%B3%E3%83%81%E3%83%A3%E3%83%B3%E3%83%8D%E3%83%AB/playlists) などなど、サンプルコードを少し書き換えることで、好きなアーティストやクリエイターの動画をダウンロードすることができます。

(応援したいクリエイターやアーティストの場合は、少しでもその努力が還元されるように、動画をダウンロードした後も、オリジナルサイトで再生してください。)

## 手順

### 1. `yt-dlp` の実行ファイルの取得

この記事は[以前の記事](https://qiita.com/Bacalhau/items/ca02c5c35c714a40bb4d)の続編です。

[以前の記事](https://qiita.com/Bacalhau/items/ca02c5c35c714a40bb4d)を参照し、 `yt-dlp` の実行ファイルを取得してください。

### 2. サンプルコード

#### 2.1. 🔥 チャネル内の動画すべてをダウンロードする 🔥

チャネル内の動画すべてをダウンロードする場合、以下のようなコマンドを実行します。

```bat
yt-dlp -o "%(upload_date)s - %(title)s.%(ext)s" https://www.youtube.com/@MarkRober
```

👉 `-o "%(upload_date)s - %(title)s.%(ext)s"` の部分はファイル名に YouTube へのアップロード日を追加します。  
これによって、動画の時系列が分かりやすくなります。

上記コードを複数行で記載すると以下のようになります。

```bat
yt-dlp ^
  -o "%(upload_date)s - %(title)s.%(ext)s" ^
  https://www.youtube.com/@MarkRober
```

👉 各行末に `^` (キャレット)があることに注意してください。  
`^` (キャレット)を使うことで、コマンドを複数行で記述できるようになります。

#### 2.2. 🔥🔥 期間を指定して動画をダウンロードする 🔥🔥

過去 3 ヶ月の動画を一括ダウンロードしたい場合は以下のようなコードになります。

```bat
yt-dlp ^
  --dateafter now-3month ^
  -o "%(upload_date)s - %(title)s.%(ext)s" ^
  https://www.youtube.com/@MrBeast
```

👉 `month` の代わりに、 `day` 、 `week` 、 `year` も使えます。

#### 2.3. 🔥🔥🔥 タイトルを指定して動画をダウンロードする 🔥🔥🔥

動画タイトルに含まれる文字列を指定して、動画をダウンロードしたい場合は以下のようなコードになります。

```bat
yt-dlp ^
  --match-filter "title~=繁花梦" ^
  -o "%(upload_date)s - %(title)s.%(ext)s" ^
  https://www.youtube.com/@%E7%B2%BE%E9%80%89%E7%94%B5%E8%A7%86%E5%89%A7%E9%A2%91%E9%81%93
```

検索文字列が空白を含む場合は、以下のように文字列を `'` (シングルクォート)で囲ってください。

```bat
yt-dlp ^
  --match-filter "title~='GitHub Copilot'" ^
  -o "%(upload_date)s - %(title)s.%(ext)s" ^
  https://www.youtube.com/@microsoftjapanvideos
```

#### 2.4. 🔥🔥🔥🔥 プレイリストに含まれる動画をダウンロードする 🔥🔥🔥🔥

以下のように出力ファイルを設定することで、

1. プレイリスト・タイトルのフォルダを作成し
1. 通し番号(2 桁)が先頭についた形で動画ファイルが保存されます。

```bat
yt-dlp ^
  -o "%(playlist_title)s/%(playlist_index)02d - %(title)s.%(ext)s" ^
  https://www.youtube.com/playlist?list=PLj6YeMhvp2S5G_X6ZyMc8gfXPMFPg3O31
```

## 他の環境での実行

### 1. PowerShell での実行

👉 PowerShell の場合は、 `^` (キャレット)の代わりに `` ` `` (バッククォート)を使用します。  
また、 `yt-dlp` の代わりに、 `.\yt-dlp` もしくは `./yt-dlp` と記載します。

サンプルコードは以下のようになります。

```powershell
./yt-dlp `
  -o "%(upload_date)s - %(title)s.%(ext)s" `
  https://www.youtube.com/@BLACKPINK
```

👉 エクスプローラーから `PowerShell` のウィンドウを開くには、アドレスバーに `powershell` と入力して `Enter` キーを押します。

### 2. Linux での実行

👉 Linux の場合は、 `^` (キャレット)の代わりに `\` (バックスラッシュ)を使用します。

```shell
yt-dlp \
  -o "%(upload_date)s - %(title)s.%(ext)s" \
  https://www.youtube.com/@MichaelJackson
```

## ⚡ 途中で止めたい場合 ⚡

途中で止めたい時は、`Ctrl` + `C`です。

回線が遅かったり、予想以上にファイルサイズが大きくて時間がかかりそうな時は、`Ctrl` + `C` でダウンロードをいったん中止して、通信環境の良い状態で再度実行しましょう。

## ⚡ フォルダ内のファイルを削除しても大丈夫？ ⚡

全ての動作は実行フォルダ内で完結しています。  
不要なファイルやダウンロード途中で停止したファイルを削除しても、 Windows が使えなくなるなどの不具合が発生することはありません。

また、同じ動画をダウンロードする場合、ダウンロード済み場合は(正確には、同じ名前のファイルが存在する場合は) `already been downloaded` としてスキップされます。

## ⚡ 外付けドライブでも実行・保存できる？ ⚡

外付けの HDD や microSD スロットに差し込んだ microSD でも、内蔵ドライブと同じように `yt-dlp` を実行できます。