YouTubeのダウンロードが360p前後で止まる理由
YouTubeが1ファイルに映像と音声をまとめた完全なMP4を配信するのは、控えめな解像度だけです。それ以上は結合が必要な別ストリームとして保存され、このツールは結合しません。
これはYouTubeページで最もよくある驚きなので、最初に述べておく価値があります。上限は通常360p、ときには240pで、引き上げられる設定ではありません。ダウンローダーは、YouTubeが1ファイルとして公開するプログレッシブMP4を提供します。1080pのレンディションはYouTube側に存在しますが、単一ファイルとしては存在しません。
多重化とアダプティブは別物
YouTubeは各動画を2つの形で保存します。多重化形式は映像と音声を1つのMP4にまとめて持ちます。どこでも保存して再生できるファイルです。アダプティブ形式はそれらを分けます。映像のみのストリームと別の音声のみのストリームで、それぞれYouTubeがその解像度に選んだビットレートでエンコードされます。
ブラウザで1080pを再生するのは簡単です。プレイヤーが両方のストリームを取得し、その場で結合するからです。1080pを1つのファイルとして保存するのは別の仕事です。何かがトラックを結合しなければなりません。このダウンローダーは多重化ツールを積んでいないため、多重化形式だけを一覧にします。そして次第に、YouTubeはそれらを360p以下で配信しています。かつて存在した720pの多重化形式は、匿名のクライアントにはもう渡されません。
リゾルバがすること
- 公式クライアントの身元を階段状に、Androidクライアントから埋め込みWebプレイヤーまで使い、YouTubeのプレイヤーエンドポイントに問い合わせます。
- 多重化されたMP4の項目だけを残し、形式IDで重複を排除します。
- 各行にYouTube自身の画質ラベルを付け、なければフレームの高さで代用します。
- プレイヤーが拒否しても、oEmbedの確認が動画の存在を教えてくれるため、削除された動画がブロックされた動画と取り違えられません。
クライアントの階段があるため、一度失敗した動画が次には成功することがあります。クライアントごとに提供される形式が異なり、YouTubeは時間とともに利用可能な形式を変えるからです。
リンクが新しいタブで開く理由
動画のバイト列はgooglevideo.comから来て、CORSヘッダーを送りません。ページはそれを読めないため、ダウンロードボタンは代わりにリンクへ移動し、ブラウザがGoogleのCDNから直接ファイルを保存します。この移動を機能させる2つの詳細があります。リゾルバがURLにタイトルパラメータを付け加え、Googleのサーバーがcontent-disposition: attachmentで応答するようにして、タブで再生されずファイルとして保存されるようにします。
何もキャッシュされない理由
ほかのプラットフォームの結果は数分以上キャッシュされます。YouTubeの結果は意図的に決してキャッシュされません。googlevideo.comのリンクはそれを求めたアドレスに結び付き、すぐに期限切れになるためです。キャッシュされたリンクはダウンロードボタンのように見えて、死んだリンクのように失敗します。だからリゾルバは毎回YouTubeに新しく問い合わせます。
対応していないもの
| ケース | 結果 |
|---|---|
| 公開動画 | 解決され、YouTubeが提供する多重化MP4形式。 |
| 非公開、メンバー限定、年齢制限付き | private — リゾルバは決してサインインしません。 |
| 削除または取り下げられた動画 | not_found。 |
| 進行中のライブ配信 | 配信中は多重化ファイルが存在しません。 |
| ショート | ほかの動画と同じように機能し、解像度の上限も同じです。 |
要点
- 提供されるのは多重化されたMP4だけであり、通常は360pです。
- より高い解像度は別々の映像ストリームと音声ストリームの結合が必要ですが、このツールは結合しません。
- 何も再エンコード・透かし入れ・保持されません。
- リンクはあなたのアドレスに結び付いて期限切れになるため、決してキャッシュされません。
- 公開動画のみ。非公開動画と年齢制限付き動画はブロックされたままです。
よくある質問
このツールはYouTubeから1080pをダウンロードできますか?
いいえ。YouTubeは1080pを映像のみと音声のみの別ストリームとして保持しており、このツールはそれらを結合しません。YouTubeが単一ファイルとして公開する多重化MP4を提供し、それは通常360pです。
動画がページ内でダウンロードされず、新しいタブで開くのはなぜですか?
`googlevideo.com`がCORSヘッダーを送らないため、ページはバイト列を読めません。リンクにはタイトルパラメータが付き、Googleが`content-disposition: attachment`で応答するため、ブラウザは再生せずファイルを保存します。
同じリンクで画質が違って表示されることがあるのはなぜですか?
リゾルバは複数の公式クライアントの身元でYouTubeに問い合わせますが、それぞれに同じ形式が提供されるわけではありません。少し経ってからリンクを再度取得すると一覧が変わることがあります。