- yt-dlpは、数千のサイトから音声・動画をダウンロードできるコマンドラインベースのダウンロードツールで、youtube-dlのフォーク版
- YouTubeのn/sig復号のため、新たに追加されたyt-dlp-ejsモジュールとともに外部JavaScriptランタイム(例: Deno、Node.js、Bun、QuickJS)が必要
- Denoがデフォルトランタイムに設定されており、ユーザーは
--js-runtimesオプションで別のランタイムを指定可能
- この変更により、YouTube関連機能を完全に利用するにはyt-dlp-ejsとJSランタイムのインストールが必須
- 外部ランタイム依存の追加は、YouTubeの暗号化構造の変化に対応するための不可欠な措置であり、今後の保守の中核要素として機能
yt-dlp 概要
- yt-dlpはyoutube-dlのフォークで、すでにメンテナンスされていないyoutube-dlcをベースに開発されたプロジェクト
- 数千のウェブサイトから音声および動画をダウンロードでき、さまざまな形式選択・後処理・字幕・プラグイン機能をサポート
YouTubeサポート関連の変更
- YouTubeのn/sig値の復号のためにyt-dlp-ejsパッケージが必要
- このパッケージはUnlicenseの下で配布され、MITおよびISCライセンスの構成要素を含む
- yt-dlp-ejsの実行にはJavaScriptランタイムが必須
- 対応ランタイム: deno(推奨)、node.js、bun、QuickJS
- 関連設定は
--js-runtimesオプションで指定可能
--no-js-runtimesオプションを使うと、デフォルトのランタイム設定を初期化可能
インストールと依存関係
- yt-dlpはPython 3.10+ (CPython) および 3.11+ (PyPy) をサポート
- 強く推奨される依存関係:
- ffmpeg / ffprobe: 音声・動画の結合および後処理用
- yt-dlp-ejs: YouTubeの暗号解除用
- JavaScriptランタイム: yt-dlp-ejs実行用
- 任意のネットワーク依存関係としてcertifi、brotli、requests、curl_cffiなどがある
主なコマンドオプション
--js-runtimes RUNTIME[:PATH]: 使用するJSランタイムを指定
--no-js-runtimes: すべてのJSランタイムを無効化
--remote-components COMPONENT: 外部JSコンポーネントを許可できるオプション
--no-remote-components: リモートコンポーネントの読み込みをブロック
重要性
- 今回の変更により、yt-dlpはYouTubeの最新の暗号化構造を完全にサポートするため、外部JSランタイムを必須要件とする
- これはYouTubeの継続的なセキュリティ・暗号化アップデートに対応するための構造的転換であり、今後の保守および機能拡張における重要な変化である
2件のコメント
うわ…防ぐのもすごいし、それを突破するのもすごいと思います。どうやって分析して突破しているんでしょうか
Hacker Newsのコメント
Archのリポジトリにすでに含まれているので、そのまま動作する
yt-dlp --cookies-from-browser firefox --remote-components ejs:github ...コマンドにフラグを追加するだけでよい実行時に solver をランタイムへダウンロードするが、0.5秒ほどしかかからない。ダウンロード開始までの速度がかなり速くなった感じがする
ただ、制限された環境で実行する際には、solver を別コマンドで事前取得できるとよさそう。今のままでも満足だが、パッケージングの自動化 ができればさらに便利だと思う
セキュリティが心配なら、Deno を使う限り サンドボックス化 はしっかりしている
もし Deno や Node が対応していない OS なら、C で書かれた QuickJS を検討してもよい。遅くはあるが、ほぼあらゆる環境で動作する
ただしこの場合、サンドボックス化は失われる。それでも公式 YouTube ドメインから提供されるコードなら信頼できると思う
/home/username/.cache)から ejs ファイルをコピーすればよいあるいは
make yt-dlp-extraで パッケージングの自動化 を試せる最近 YouTube は 埋め込み動画に referrer ヘッダー を必須にし始めた
直接
youtube.com/embed/<videoid>にアクセスするとエラーが出て、FAQ にも意図されたポリシーだと明記されている公式ドキュメント によれば、埋め込み側は HTTP Referer を提供する必要があり、そうでないと “error 153” の画面が表示される
1991年に QuickTime が出たころは、動画もただコピー・貼り付け・保存できるのが当然だと思っていた
今では DRM すらない動画でさえ ユーザー体験 がここまで悪くなったのが信じられない
今は OS 標準プレーヤーか VLC ひとつでたいてい解決する
自分は 2010年から yt-dlp(youtube-dl 時代を含む)を使って、お気に入りにした動画をすべて アーカイブ している
今では数万本の動画を保存しており、そのかなりの数はすでにサイトから消えている
NHK 相撲ハイライトのように1か月しか公開されない動画も保存している
広告ブロックと広告挿入の 終わりなき対決 の果てに、結局 AGI/ASI が出てくるのかもしれないと思う。
双方が LLM を使うようになり、人間はそのあいだで財布と注意力を奪われる存在になりそうだ
10年後には YouTube がブラウザから完全にアクセス不能になるかもしれない
タブレットアプリに慣れた世代が主流になれば、Google は Web を捨てる自信を持つ気がする
yt-dlp issue #14404 では Selenium やヘッドレスブラウザを使おうという提案があったが、
メンテナーチームは「それは 敗北宣言 であり、プロジェクトの精神に反する」と答えた
スクレイピングは本当に骨の折れる作業だ。API が頻繁に壊れ、提供側がこちらを嫌っている状況で維持するのは見事だ
YouTube がますますユーザーに 敵対的な態度 を取るようになっているのを感じる
広告ブロッカー対策、AI 学習用のコンテンツ収集、API 制限など、競争がないことにつけ込んでいるようだ
広告主の満足には敏感だが、ユーザーやクリエイターは 消耗品 のように扱われている
無料で始めて競争相手を消し、独占構造を作ったのは一種の撒き餌戦略だった。
もう新しい代替が必要だ。有料でも透明性の高いサービスならよいと思う
yt-dlp EJS wiki によると、Deno が推奨される理由は、
制限された権限でコードを実行でき、npm から EJS の依存関係をリモートで取得できるからだ
Firecracker のような OS/VM レベルの隔離 を使うほうが安全だ