Skip to content

YouTube動画ダウンロード時の「Unable to extract video data」エラーの解決方法

問題の概要

Pythonでyoutube_dlモジュールを使用してYouTube動画をダウンロードしようとすると、以下のエラーが発生することがあります:

ERROR: YouTube said: Unable to extract video data

このエラーは、YouTubeのWebサイト構造が変更された際に、youtube_dlが動画情報を正しく抽出できない場合に発生します。特に、古いバージョンのyoutube_dlを使用している場合によく見られます。

主な解決策

方法1: youtube-dlの更新(推奨)

最も効果的な解決策は、youtube-dlを最新バージョンに更新することです。YouTubeは定期的にサイト構造を変更するため、ツール側も対応した最新版を使用する必要があります。

bash
# pipを使用して更新
pip install -U youtube-dl

# または特定のユーザーにのみインストール
pip install --user -U youtube-dl
bash
brew upgrade youtube-dl
bash
choco upgrade youtube-dl
bash
youtube-dl --update

方法2: yt-dlpへの移行(最適な解決策)

youtube-dlの積極的にメンテナンスされているフォークであるyt-dlpを使用することを強くお勧めします。このプロジェクトはより頻繁に更新され、多くの新機能や修正が含まれています。

bash
# yt-dlpのインストール
pip install -U yt-dlp

# 使用例
yt-dlp https://www.youtube.com/watch?v=動画ID -o ~/Videos/出力ファイル名.mp4

TIP

yt-dlpyoutube-dlと完全な互換性があり、同じオプションと構文をサポートしています。既存のスクリプトを変更せずにそのまま使用できます。

方法3: Ubuntu/Debianユーザー向けの解決策

パッケージマネージャー経由でインストールした場合、リポジトリのバージョンが古い可能性があります。以下の手順で再インストールしてください。

bash
# 既存のyoutube-dlを削除
sudo apt purge youtube-dl

# 最新の.debパッケージをダウンロードしてインストール
wget http://ftp.de.debian.org/debian/pool/main/y/youtube-dl/youtube-dl_最新バージョン_all.deb
sudo apt install ./youtube-dl_最新バージョン_all.deb

方法4: Python実行環境の確認

youtube-dlが正しいPythonバージョンで実行されているかを確認してください。

bash
# シンボリックリンクの修正(必要な場合)
sudo sed -i '1s/python/python3/' /usr/local/bin/youtube-dl

方法5: クッキーファイルの使用(年齢制限動画用)

年齢制限がかかっている動画の場合、ログイン情報を含むクッキーファイルが必要なことがあります。

bash
# クッキーファイルを使用したダウンロード
youtube-dl --cookies /path/to/cookies.txt https://www.youtube.com/watch?v=動画ID

INFO

クッキーファイルは、Chrome拡張機能の「Cookie.txt」などでエクスポートできます。

コード例の修正

元のPythonコードを修正して、エラーハンドリングを改善した例:

python
import yt_dlp as youtube_dl  # yt-dlpを使用

ydl_opt = {
    "outtmpl": "/videos/%(title)s.%(ext)s",
    "format": "bestaudio/best",
    # エラー時のリトライ設定
    "retries": 10,
    "fragment_retries": 10,
}

def operation(link):
    """
    ダウンロード操作を開始
    """
    try:
        with youtube_dl.YoutubeDL(ydl_opt) as yd:
            video = yd.download([link])
        result.set("動画のダウンロードが完了しました!")
    except Exception as e:
        print(f"エラーが発生しました: {str(e)}")
        result.set("エラーが発生しました。詳細はコンソールを確認してください。")

operation("https://youtube.com/watch?v=...")

まとめ

「Unable to extract video data」エラーは、主に以下の方法で解決できます:

  1. youtube-dlの最新版への更新
  2. yt-dlpへの移行(推奨)
  3. 正しいインストール方法の確認
  4. 年齢制限動画への対処

特にyt-dlpは活発に開発が続けられており、YouTubeの変更にも迅速に対応しているため、長期的な解決策として最も信頼性が高い選択肢です。

WARNING

YouTubeの利用規約に違反するような大量ダウンロードや商業目的での使用は避け、個人利用の範囲内で適切にツールを使用してください。