Pythonでyt-dlpを使ってYouTube動画を一括ダウンロードする方法

Python

はじめに

YouTubeの動画をダウンロードする方法は、さまざまなツールやアプローチがありますが、今回は非常に強力なPythonライブラリであるyt-dlpを使用して、動画を効率的にダウンロードする方法を紹介します。このライブラリは、個々の動画のダウンロードから、プレイリストやチャンネル全体のダウンロードまで対応しています。

また、ダウンロード中に中断が発生しても再開できる方法や、既にダウンロード済みのファイルをスキップする方法についても詳しく解説します。

1. yt-dlpのセットアップ

まず、yt-dlpをPythonにインストールします。ターミナルで以下のコマンドを実行してください。

pip install yt-dlp

これで、yt-dlpの準備が整いました。次に、YouTube動画をダウンロードするためのPythonコードを作成していきます。

2. チャンネル内の全動画をダウンロード

YouTubeチャンネルからすべての動画をダウンロードし、保存先のフォルダに既に存在する動画はスキップし、中断された場合には再開する方法を紹介します。

コード例

import yt_dlp

# ダウンロードするチャンネルのURL
channel_url = "https://www.youtube.com/c/CHANNEL_NAME"

# ダウンロード先のパス
download_path = "/path/to/save/folder/%(title)s.%(ext)s"  # 適宜変更

# yt-dlpのオプション
ydl_opts = {
    'format': 'bestvideo+bestaudio',  # 最高品質のビデオとオーディオを選択
    'outtmpl': download_path,         # 保存するファイル名とパス
    'merge_output_format': 'mp4',     # 結合後の形式をmp4に設定
    'sleep_interval': 10,             # 各動画ダウンロード後に10秒待機
    'max_sleep_interval': 20,         # 動画間でのランダム待機(最大20秒)
    'retries': 10,                    # ダウンロードの再試行回数
    'fragment_retries': 10,           # 各フラグメントの再試行回数
    'http_chunk_size': '4M',          # 4MBごとにチャンク分割
    'nooverwrites': True,             # 既に存在するファイルは上書きしない
    'continue_dl': True,              # ダウンロードを途中から再開する
}

# チャンネル内の全動画をダウンロード
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
    ydl.download([channel_url])

ポイント

  • nooverwrites: 既に保存先フォルダに存在するファイルはスキップします。
  • continue_dl: ダウンロードが途中で中断された場合、次回再開時に途中からダウンロードを再開します。
  • sleep_interval: 動画のダウンロード間にランダムな待機時間を設定し、YouTubeのレート制限を回避します。

3. プレイリストごとに動画をダウンロードする

YouTubeのプレイリストごとに動画を一括でダウンロードする場合も非常に簡単です。プレイリストURLを指定するだけで、そのプレイリスト内の全動画を自動でダウンロードできます。

コード例

import yt_dlp

# ダウンロードするプレイリストのURL
playlist_url = "https://www.youtube.com/playlist?list=PLAYLIST_ID"

# ダウンロード先のパス
download_path = "/path/to/save/folder/%(playlist)s/%(title)s.%(ext)s"  # 適宜変更

# yt-dlpのオプション
ydl_opts = {
    'format': 'bestvideo+bestaudio',
    'outtmpl': download_path,        # プレイリスト名のフォルダに動画を保存
    'merge_output_format': 'mp4',
    'sleep_interval': 10,
    'max_sleep_interval': 20,
    'retries': 10,
    'fragment_retries': 10,
    'http_chunk_size': '4M',
    'nooverwrites': True,            # 既に存在するファイルはスキップ
    'continue_dl': True,             # 中断された場合は再開
}

# プレイリストの全動画をダウンロード
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
    ydl.download([playlist_url])

ポイント

  • %(playlist)s: プレイリストごとにフォルダを作成し、その中に動画を保存します。
  • nooverwrites: プレイリスト内の動画が既に存在している場合はスキップします。

4. 単体動画をダウンロードする

特定の個別の動画をダウンロードしたい場合は、YouTubeの動画URLを指定するだけで簡単に実行できます。

コード例

import yt_dlp

# ダウンロードする動画のURL
video_url = "https://www.youtube.com/watch?v=VIDEO_ID"

# ダウンロード先のパス
download_path = "/path/to/save/folder/%(title)s.%(ext)s"  # 適宜変更

# yt-dlpのオプション
ydl_opts = {
    'format': 'bestvideo+bestaudio',
    'outtmpl': download_path,        # 保存ファイル名
    'merge_output_format': 'mp4',
    'retries': 10,
    'fragment_retries': 10,
    'http_chunk_size': '4M',
    'nooverwrites': True,            # 既に存在するファイルはスキップ
    'continue_dl': True,             # 中断された場合は再開
}

# 単体動画をダウンロード
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
    ydl.download([video_url])

ポイント

  • 動画URLを指定するだけ: 単体の動画をダウンロードするのも非常にシンプルです。URLと保存先を設定するだけで完了します。

5. その他のオプション

  • merge_output_format: YouTubeからはビデオとオーディオが別々にダウンロードされることがありますが、mp4などの形式で自動的に結合することができます。
  • fragment_retries: ネットワークの問題で一部のデータが取得できなかった場合でも、再試行してダウンロードの安定性を確保します。

まとめ

yt-dlpを使うことで、YouTubeの動画やプレイリスト、チャンネル内のすべての動画を効率的にダウンロードでき、中断が発生しても再開することができます。Pythonスクリプトを使用して、簡単にこれらの操作を自動化できるのは非常に便利です。

さらに、動画が既に保存されている場合にはスキップする機能を活用することで、無駄な再ダウンロードを防ぎ、ストレージの効率化にも貢献します。

コメント

タイトルとURLをコピーしました