ソフトウェア

YouTubeの帯域制限を無視してムービーを高速にダウンロードする方法とは?


youtube-dl」や「yt-dlp」などのダウンロードツールを使わずにYouTubeからムービーをダウンロードしようとすると、強烈な帯域制限が発動して10分のムービーをダウンロードするのに約6時間半もかかってしまいます。こうした制限をダウンロードツールがどのように突破しているのかについて、ハッカーのヴェダードさんが解説しています。

How They Bypass YouTube Video Download Throttling | 0x7D0
https://blog.0x7d0.dev/history/how-they-bypass-youtube-video-download-throttling/


ムービーをダウンロードするための最初のステップは、ムービーにアクセスするための実際のURLを見つけることです。このステップでは、YouTube APIのエンドポイントである「/youtubei/v1/player」にアクセスすればOK。タイトルや詳細説明、サムネイルに加えてムービーの解像度ごとのURLを取得できます。


ただし、ここで取得したURLを使用してムービーをダウンロードしようとすると、下図のように転送速度が40kB/s~70kB/sに抑えられてしまい、10分のムービーをダウンロードするのに約6時間半もかかってしまいます。ウェブ上で視聴する際には10分のムービーを視聴するのに6時間半も待たされることは無いため、何らかの制限がかかっていることは明らかです。


ヴェダードさんによると、ムービーのURLのパラメータの中に「n」というパラメータが存在しており、YouTubeはこの「n」を利用して公式クライアントかどうかを見分けているとのこと。公式クライアントの場合、「n」を特定のアルゴリズムに従って変換し、パラメータに新たな「n」を設定してダウンロードを行います。「n」が間違っている場合は帯域制限が発動します。


「n」の変換アルゴリズムは難読化されており、また頻繁に変更されるため、解読を試みるのは現実的ではありません。しかし、クライアントサイドで動作するJavaScriptの仕様上、アルゴリズムのコードそのものは誰でもアクセスできるようになっています。そこで、多くのダウンロードライブラリではYouTubeのJavaScriptをダウンロードし、アルゴリズムのコードをまるごと抜き出して「n」を変換させるという解決方法が採用されているとのこと。

こうして帯域制限を解除することで、4MB/sという速度でムービーをダウンロードできるようになりました。しかし、ヴェダードさんはここで第2の帯域制限が行われていると述べています。YouTubeはストリーミングプラットフォームのため、ストリーミングに十分な速度になると自動で帯域制限がかかるとのこと。目安としては、ムービー全体の半分の時間でダウンロードが完了するように調整されています。


第2の帯域制限はダウンロード開始後しばらくしてから発生するため、HTTPヘッダーの「Range」を利用してダウンロードを細かく分割し、常に新しい接続を行うようにすればOKとのこと。例えば10MBずつダウンロードするようにスクリプトを変更すると、下図の通り60MB/s~80MB/sという速度でダウンロードを行うことができています。


YouTubeのムービーは、映像と音声で別のファイルに分けて保存されているため、両者をそれぞれダウンロードした後、ffmpegなどの編集ツールを利用して1つのファイルに統合すればダウンロード完了です。今回ヴェダードさんが作成したダウンロードスクリプトはヴェダードさんのブログ上で公開されているので、気になった人は確認してみてください。

この記事のタイトルとURLをコピーする

・関連記事
最強YouTubeダウンローダー「yt-dlp」でムービーの指定時間を切り抜きダウンロードする手順 - GIGAZINE

無料でYouTube・ニコニコ動画・Twitter・Instagramなどの動画を一発でダウンロード&MP3に変換などができる「Vividl」、最強ダウンローダー「yt-dlp」内蔵で初心者でも簡単に使える - GIGAZINE

音楽会社がGoogleに「YouTubeダウンローダー」に関するWikipedia記事を検索結果から除外するように要請 - GIGAZINE

「GitHubに削除されたYouTube動画ダウンローダーは著作権侵害用ツールではない」とオープンソース団体やジャーナリストが反発 - GIGAZINE

YouTube動画をダウンロードする「youtube-dl」のホスティング企業が世界3大レコード会社に訴えられる - GIGAZINE

in ソフトウェア,   ネットサービス, Posted by log1d_ts

You can read the machine translated English article here.