Creazy!

WEBエンジニア・ヤガーのテック・ガジェットブログ

YouTube 技術情報

Youtube でHD動画に対応しているか確認する裏技見つけた

投稿日:


Youtube好きなみなさんこんにちは。しつこくHDネタ続きます。
(今回技術的な要素が多いため、「動画を楽しもう!」シリーズではありません)
前回、HEADリクエストでHTTPステータスを取得し、動画ファイルの存在を確認する方法を紹介しました。
YoutubeでHD動画がダウンロード可能か判別する方法と、作ったAPIとブックマークレット
今回は、外部のAPIを使わずにHD動画の有無を確認する方法を見つけたので紹介します。
キーとなるのはFLVの在処を探し出した時と同様、ページ内にあるJavaScript変数「swfArgs」になります。
実はこのswfArgs変数の中に「fmt_map」という気になる要素が入っているのですが暗号めいていて意味までは分かりませんでした。しかし、HD動画を見るための「&fmt=22」を加えたページで見てみたところこれが動画フォーマットに関連する値である事は間違いないようなのです。
[2008/11/28:追記]
miyagawaさんがすでに言及されていたみたいです。気づくの遅すぎました。

How to know if YouTube video has HD version: GET the page with ?fmt=22 and look for “fmt_map”: “22/2000000/9/0/115” in its HTML.

via: Twitter / Tatsuhiko Miyagawa: How to know if YouTube vid …

というタイミングで@miyagawaさんをフォローしてみた 🙂

HD動画に対応しているか確認する簡単な方法

ソースを見るのが面倒なので簡単なブックマークレットで確認します。
「&fmt=22」を加えた閲覧ページ(例えばMattの動画)で下記ブックマークレットを実行してみてください。
(下のコードをコピーしてブラウザのアドレスバーに貼付けて実行)

javascript:alert(swfArgs['fmt_map']);

たったコレだけです。
HD動画に対応している場合は下記のようなアラートが出ます。

22/2000000/9/0/115

そうです、HD動画のフォーマット番号と一致する「22」から始まる文字列が入っているのです。
HD動画に対応していないページ(例えばコレ)で実行すると値は空っぽです。
という事は、「&fmt=22」が付いたページのswfArgs変数が取得できれば判別可能という事です。

存在する一番高画質な動画フォーマットをダウンロードするブックマークレット

上記ふまえ、ブックマークレットを作ってみました。
Youtube Easy HD Downloader
上記リンクをブックマークに登録してください。
Youtube動画閲覧画面(/watch?v={video_id}、「&fmt=22」はなくてもよい)で、ブックマークレットを実行してください。
その動画がHD動画に対応してれば、

Found HD file! Download it?

というダイアログが出ていますので「OK」を押すとHD動画がダウンロード開始します。
その動画がHD動画に対応していない場合は、

Can't find HD file! Download MP4 HQ?

というダイアログが出ていますので「OK」を押すとMP4(&fmt=18)動画がダウンロード開始します。
以前のブックマークレットではFLVも合わせて4種類のリンクを表示していましたが、ダウンロードするならMP4だけでいいですよね?Greasemonkeyで見ているところほとんどの動画が&fmt=18のMP4に対応しているので&fmt=18の動画はノーチェックでリクエストしています。
一応ソースも載っけておきます。
XmlHttpRequestで「&fmt=22」ページを取得し、正規表現でswfArgs関数部分を抜き出すってことをやっています。

var d = document;
var w = window;
function createXHR() {
if ( w.ActiveXObject ) {
try {
return new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
return new ActiveXObject("Microsoft.XMLHTTP");
} catch (e2) {
return null;
}
}
} else if ( w.XMLHttpRequest ) {
return new XMLHttpRequest();
} else {
return null;
}
}
checkURL(swfArgs['video_id']);
/**
* Checking
*/
function checkURL(video_id) {
var url
= 'http://'+location.host+'/watch'
+ '?v='+video_id
+ '&fmt=22';
var XHR = createXHR();
XHR.open( 'GET', url, true );
XHR.onreadystatechange = function() {
if (XHR.readyState==4) {
if ( match = XHR.responseText.match(/var swfArgs = ({.*})/) ) {
json = eval('('+RegExp.$1+')');
if ( json['fmt_map'] == '22/2000000/9/0/115' ) {
if ( confirm("Found HD file! Download it?") ) {
location.href = '/get_video?video_id='+swfArgs['video_id']+'&t='+swfArgs['t']+'&fmt=22';
}
} else {
if ( confirm("Can't find HD file! Download MP4 HQ?") ) {
location.href = '/get_video?video_id='+swfArgs['video_id']+'&t='+swfArgs['t']+'&fmt=18';
}
}
}
}
}
XHR.send('');
}

まとめ

Youtubeは最近16:9に表示を変更したり、動きも激しいので今回紹介した方法が今後も使えるかは分かりません。しかし、外部のAPIに頼らずに判別できる方法があるならその方が良いかなと思っています。
実際、Youtubeでダウンロード可能なファイル形式が一目瞭然になるGreasemonkeyで使っているAPIへのアクセス数が想像以上になっているので、この方法に変更したGreasemonakeyも作ろうかなと思っています。
という事でグリモン書きたいところなんだけどいっぱいいっぱいすぎる…。

YoutubeのHD動画正式対応で、改めて動画形式をまとめてみる
動画を楽しもう!(Youtube のHD動画を色/サイズをカスタマイズした上でembedできるブックマークレット)
動画を楽しもう!(Youtubeで一覧画面でもダウンロード可能な最高画質が一目瞭然になるGreasemonkey)
YoutubeでHD動画がダウンロード可能か判別する方法と、作ったAPIとブックマークレット
動画を楽しもう!(Youtubeでダウンロード可能なファイル形式が一目瞭然になるGreasemonkey)
動画を楽しもう!(YoutubeでHD動画など全形式でダウンロードできるブックマークレット)
動画を楽しもう!(YoutubeをMP4でダウンロードするもっと簡単なブックマークレット)
動画を楽しもう!(YoutubeのFLVの在処とダウンロード用ブックマークレット)

-YouTube, 技術情報

執筆者:


  1. 匿名 より:

    こんにちは!すばらしいスクリプト感激です。
    ファイル名もつけてもらえれば完璧です。

  2. [Vimperator][Firefox][JavaScript]fetchyoutube を改良

    今回は、外部のAPIを使わずにHD動画の有無を確認する方法を見つけたので紹介します。 キーとなるのはFLVの在処を探し出した時と同様、ページ内にあるJa…

comment

メールアドレスが公開されることはありません。

関連記事

2012年末のブラウザシェア、あるいは、IEそろそろ無視していいか問題

さて、長年ウェブ開発者を悩ませているIE(Internet Explorer)のおかしな挙動とデザイン崩れ。デザイナー・マークアップエンジニアにおきましては、新しいWEBサイトを作る度に推奨環境にIE …

no image

オンラインビジネスセミナー「注目される“Twitter(ツイッター)”国内でのビジネス活用事例とポイント」参加レポート

今日は、六本木のアカデミーヒルズ49で開催された「注目される“Twitter(ツイッター)”国内でのビジネス活用事例とポイント」セミナーを聴講してきました。 ゲスト講師として株式会社CGMマーケティン …

no image

ブログバトラーが面白い

Flashでできてる、いわゆるブログパーツってやつだけど、これは面白い。実際他のバトラーと戦う事ができる。HP/MPみたいなのや各種ステータスの設定、RSSから読み込んだ文章を解析して魔法なんかの設定 …

ブラウザの見えていない部分もスクロールしてキャプチャーする方法色々(無料のみ)

資料を作る場合なんかに、サイトのキャプチャー画像を張り付けたりする事がありますが、OSの標準機能のスクリーンキャプチャではスクロールしないと見えない部分は一度にキャプチャーする事ができません。 ・Wi …

百度(Baidu)ファーストハッキング

タイトルは釣りです。ゴメンナサイ。 1/23に中国産の検索エンジン「百度(baidu)」が日本でのサービスを本格開始しましたね。エロに強いだとか、MP3検索どうした?とか、ちょっと横道な話題が多い気が …

スポンサードリンク

スポンサードリンク