夜が明けてきた そろそろ寝よう
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


【YouTube】旧動画のDASH化の際に起きる障害のまとめ
YouTubeのDASH化については以前別エントリで説明しましたが、ビットレート大幅削減による画質劣化という、なかなか厳しい仕様変更となっています。新規アップロード動画だけでなく、昔の動画も順次DASH化されており、その結果、昔よりも劣化した画質で見させられるという時代を逆行するような辛い事態になってますが、一部の動画ではそれだけで済まずに障害が起きています。このエントリではそれら障害で私の知っているものをまとめます。

旧動画のDASH化時系列



DASH化は'13年5月頃に始まりました。それ以降の新規アップ動画は全てアップ時にDASH化されるのでわかりやすいですが、旧動画はどうかというと、全てを一気にDASH化するのは無理です。重いエンコード処理が必要ですから。なので、図の赤線で示すように、徐々にDASH化されています。その順番ははっきりしませんが、傾向としては再生数の多い動画から順にやってるようです。そして、'14年1月現在、まだ全ての動画のDASH化は完了していません。その完了をおとなしく待っててくれたら良かったんですが…
'13年10月頃から、従来版1080p、480pの削除が始まりました。そしてあっというまに終わりました。削除するだけなので速攻です。
この従来版1080p、480pの削除がスケジュール通りだったのか、ディスクの逼迫で前倒しされたのかわかりませんが、DASH化が完了しないうちに行われたため、問題が起きています。

DASH化による障害
(1)あったはずの1080p、480pがいつのまにかなくなっている
図の②の部分が該当します。DASH化されてない(DASH版が作られてない)のに従来版の1080p、480pが削除されたため、この障害となります。
(2)あったはずの解像度がいつのまにかなくなっている
症状は(1)に似てますが原因が違うケースです。図の①の一部ってことになりますかね、敢えて言えば。
一応DASH化されてるものの、DASH版の作成が不完全で一部欠けていると、この障害になります。
私の動画(元々は720pの動画)では、DASH版の480pだけが作られ、720p、360p、240p、144pが作られてないものがありました。この場合プレーヤーでは480pしか選べません。
運が悪いと、DASH版の144pだけ作られて、結果、プレーヤーで144pしか選べないこともあるようです。元々1080pの動画がこんな事態になったら愕然とするでしょうね。
(3)音が出ない
原因的には(2)と一緒です。
DASH版の作成が不完全で、映像ファイルはあるけど音声ファイルがない場合、この障害になります(DASHでは映像と音声を別ファイルで用意しています)。
(4)大きなブロックノイズ発生
「wmv形式でアップした動画」で、「不幸にも'13年8月前半にDASH化」され、「フェードイン、フェードアウト処理がある」場合、そのフェードイン、フェードアウトに大きめのブロックノイズが発生することがあるようです。
海外のYouTubeフォーラムのこちらのトピック(1)で議論されていますが、簡単にまとめます。
YouTube側で行われる再エンコード処理に問題があり、'13年8月前半、wmvのエンコードがブロックノイズまみれとなっていたようです(特にフェード処理で多発)。半月程度で正常に戻ったようです。この間にアップロードしてブロックノイズまみれになってしまった動画は、前記トピックに動画リンクを記せば担当者の方で対処(再々エンコード)するという、日本のYouTubeフォーラムではありえない処置がなされます。
しかし、この問題にひっかかるのは8月にアップした動画だけではありません。アップが大昔でも、DASH化が8月に行われれば、同様の事態に見舞われます。そして被害は、より甚大です。今更アップし直しなんてできないでしょうから。ということでそういう動画を救済するためのトピック(2)も作られました。でもあまり活用されてないようです。気づかない人、気づいても途方に暮れるだけの人が多いのかもしれません。

原因の確認方法
上記障害が起きても、その症状だけを見てDASH化のせいとは決め付けられません。特に音が出ないなんて他の原因の方が多そうです。というわけで、上記障害が起きた時にDASH化が原因か否かを確認する方法を説明します。主に動画再生ページのソース(HTML表記)を確認することになります。
(1)あったはずの1080p、480pがいつのまにかなくなっている
HTMLをdashで検索していき、
"dash": "1"
"dashmpd"
これら記載があれば、その動画はDASH化されています。記載がなければまだDASH化されてません。
記載がないなら、1080pと480pがないのはある意味当たり前、最初の図で説明したとおり、YouTube側の処理順がちょっとおかしいせいです。
(2)あったはずの解像度がいつのまにかなくなっている
HTMLをdashで検索していき、
"dash": "1"
"dashmpd"
これら記載があること(つまりDASH化されてること)を確認します。次にHTMLを itag= で検索していきます。itag=xx というのはサーバ側に用意されてる動画フォーマットの一つ一つに対応しています。例えばHTML中に itag=134 という表記があった場合、それは360pのDASH版映像が用意されてることを意味します。以下にitagの表記とDASH版映像フォーマットの対応をまとめます。

HTML中のitag表記 映像フォーマットの種別
itag=160 144p
itag=133 240p
itag=134 360p
itag=135 480p
itag=136 720p
itag=137 1080p

元々が720pの動画だったとすると、HTML中に「itag=160」「itag=133」「itag=134」「itag=135」「itag=136」の全てがあればDASH化は(映像については)正常に完了しています。それでもプレーヤーに表示される解像度がおかしい場合はDASH化以外の原因があるはずです。
元々が720pの動画なのに「itag=160」しかないなど、HTML中の映像フォーマットに不足があるなら、それはDASH化が不完全ということになります。HTMLにない映像フォーマットは当然プレーヤーにも出てきません。
なお動画フォーマットは上記以外にも3D、HTML5用など多々ありますが、ここでは触れません。全てのフォーマットとitagの関係はYouTubeのwikipediaに記載されてます。
(3)音が出ない
HTMLをdashで検索していき、
"dash": "1"
"dashmpd"
これら記載があること(つまりDASH化されてること)を確認します。次にHTMLを itag= で検索していき、音声が正しく作られているか確認します。itagとDASH版音声ビットレートの対応は以下の通りです。

HTML中のitag表記 音声ビットレートの種別
itag=140 128k

元々は3種類の音声があったんですが、一年たたないうちに2つ消えて1つになってしまいました。表の意味がない。
上記音声(つまりitag=140)がHTML中にないようなら、DASH化が不完全なせいで音声が出ないことになりそうです。
itag=140がHTMLにあり、それでも音が出ないなら、DASH化以外の原因を探ることになります。
(4)大きなブロックノイズ発生
これがDASH化によるものかの確認は難しいです。
「wmv形式でアップした動画」か否かは動画管理ツールで動画情報を確認すれば、「元のファイル」として表記があるのでわかります。
「フェードイン、フェードアウト処理がある」か否かは目視確認ですね。
真っ黒の画面から映像がフェードインするとか、映像がホワイトアウトするとか、
映像A→映像Aと映像Bの混在→映像B
とゆっくり変わる時にブロックノイズが出るようです。フェード処理してるところに限らず広範囲にブロックノイズが出る場合は別原因になります。
「不幸にも'13年8月前半にDASH化」の確認ですが、まずDASH化されてるか否かは既に記載したとおり、HTML中に
"dash": "1"
"dashmpd"
があるか否かでわかります。
DASH化時期を確認するには、まずDASH版の映像ファイルをダウンロードします。その映像ファイルのヘッダにはエンコード日時が記載されているので、Mediainfoなどのツールで確認可能です。ただ、ダウンロードは正規の手続きでできない、ってか違法なんですよね。なので、ダウンロード方法を詳しく書けません。なお、動画管理ツールに「MP4でダウンロード」のメニューがありますが、これでダウンロードできるのはDASH版ではなく従来版なので、本確認には使えません。

対処方法

(1)はDASH版が作られるのを待つんでしょう。いつになるかわかりませんが。
(4)は既に記したようにトピック(2)に申し立てれば対処してくれるのかもしれません。ただあまり使われてる形跡がないのと、何より、英語なのが厳しい。
(2)~(4)の障害に対する正攻法として、再生画面下の「フィードバックを送信」から苦情を申し立てる手があります。相手が見えない手続きなので、どれだけやってくれてるか疑問なところはありますが、私の動画は対処してくれました(間に一週間ほど挟んで2回フィードバックを送信しました)。
(1)~(4)共通の対処として、「動画加工ツール」での空編集が考えられます。空編集とは、ツールで用意された編集操作(カットやフィルタ適用など)を一切せずに単に「保存」することです。これにより再エンコードが行われるので正しいDASH化がなされる可能性は高いです。ただ、空編集とはいえ動画加工ツールを通すことで余計な画質劣化があるかもしれません。また、DASH化の処理はまだ枯れてないので、空編集契機によるDASH化でも障害を起こす可能性は無いとは言えず、場合によっては現状より悪い状態になるかもしれません(ってくらい保険をかけておこう)。
動画のURLが別になり、再生数や評価をリセットしても良いなら、より安全な空編集として、「保存」ではなく「名前をつけて保存」を選ぶ手があります。「保存」だと上書きですが、「名前をつけて保存」だと、元の動画はそのまま残されて、空編集した別動画が新たに作られます。これなら、失敗した場合は元動画を継続使用、成功した場合は新たな動画を採用すればよいことになります。ただ、この方法にも若干の難があって、元動画の再生画面で変な表記が出てきます。下記イメージがそれで、「元になった動画 読み込んでいます」という謎の表記が出ます。まぁ表示されるだけで悪さはしないですが、目触りではあります。「名前をつけて保存」にはそういう厄介事があります。


 
ちなみに、「保存」で上書きした場合はこの謎表記は出ません。
「動画加工ツール」はこのように意味不明な挙動があるので、いきなり公開済みの歴史ある動画に適用するのではなく、テスト用動画でテストして、動きを理解してからにした方がいいと思います。


YouTubeにアップした動画(生)のダウンロード
こちらは内容が古いので、修正記事のほうをご覧ください。



「動画の管理」画面では、かつて自分がアップした動画を「mp4形式でダウンロード」することができます。しかし、このmp4というのは自分がアップした動画そのものではなく、サーバ側でエンコードした後の動画になるので劣化しています。まぁそんなものだろうと何とも思ってなかったですが、Googleのサービスで、自分がアップした動画そのものをダウンロードできる!(図の黄色点線部が可能になる)という話を聞いたので試してみました。あ、先に結論言っとくと、うまくいかないケースが多そうです。

さて、そのサービスはGoogle Takeoutです。パスワード認証後に次のような画面になります。



Google関連の各種サービスにアップしたデータをまとめてダウンロードできるようです。右上にある「アーカイブを作成」と「マイアーカイブ」がメニューになります。「アーカイブを作成」を選ぶと次の画面になります。



ここで対象のサービスを選びます。複数選んでいいと思いますが試してません。とりあえずYouTubeを選択します。
データはGoogle側で圧縮(アーカイブ)され、それをダウンロードすることになります。圧縮形式は選べます。zipならWindowsのみで解凍できますが2Gごとに分割されるそうです。別の形式tgzなら50Gごとの分割だそうですが、解凍ソフトが必要ですね。
赤い四角枠の「アーカイブを作成」をクリックすると次の画面になります。



ファイルの圧縮作業の進捗が青いプログレスバーで表示されます。ダウンロードするファイルのサイズによりますが、YouTubeの動画なんかだと、じっと待ってるのは馬鹿らしい程の時間がかかると思います。それを想定して、「このページを離れても大丈夫だよ」とか、「準備できたらメールで教えようか」などの案内が出ています。なので、ブラウザを閉じようが、PCをシャットダウンしようが問題ないです。サーバ側では圧縮作業が継続されます。
右上を見るとわかりますが、この画面は「マイアーカイブ」の画面になってます。ログイン直後の画面の右上にありました、「マイアーカイブ」。ってかどの画面にもありますね。いつでも好きなタイミングで右上の「マイアーカイブ」を選ぶことで、この画面に来れて、アーカイブ作業の進捗状況が確認できます。十分な時間を空けるか、完了メールを受け取ってから「マイアーカイブ」画面に行くと次のような表示になります。



準備完了、ダウンロードできまっせ、ってことですね。
で、ダウンロードしたファイルを確認しました。まさにアップロードしたファイルでした。
すばらしい。
たいして再生数も稼がず、サイズばかり喰ってるファイルをよくも残しているものですね。

さて、上記は私のサブアカウントでテストした結果です。本アカウントは2桁は違うサイズになるはずです。ということで、本アカウントで試しましたが…、うまく行きません。アーカイブ作成が失敗します。何度やっても同じです。
残念。
原因ははっきりしませんが、2Gを越えるファイルがあると駄目という説があるようです。単に、総量が大きすぎなのかもしれません。アーカイブの途中でちらっと確認した時は、サイズが300Gくらいに膨れ上がってました。300Gってw
まぁ私はそんなにダウンロードしたかったわけではないのでいいです、負け惜しみではなく。
YouTubeが動画のオリジナルを残しているというのが実感できただけでもよかったです。



YouTubeのDASH対応と画質劣化について
2013年にYouTubeが行ったMPEG-DASH対応についての解説動画を上げました。



以前、画質悪化について「144p問題」というタイトルで144pに罪をおっかぶせるような動画を上げたんですが、ちょっと違ってたなぁと今更気づいたので、訂正の意味を込めて新たな動画を作った次第です。

この記事では、動画の内容の補足をしていきます。

従来方式で接続する方法
FlashプレーヤーでDASH方式の接続を回避し、従来方式で接続する方法。
一つしか知らないです。YouTube Centerを使ってください。これはアドオン上で動くスクリプトです、たぶん。カスタマイズとかほとんどしないので詳しくないです。でも、割と簡単に入れられました。
スクリプトの動作基盤となるアドオンも入れる必要があります。こっちが先ですね。私はFirefox用にGreasemonkeyを入れました。Chromeは不要かもしれません。
ポイントとなる設定を説明します。



上記の、Dash Playback のチェックで制御できます。チェック有りだとDASH方式、チェック無しだと従来方式になります。

注意:
この種の機能はYouTube側の仕様変更のたびに動かなくなる可能性があります。何かおかしいと思ったら最初に疑い、拡張機能を無効にするなどして様子をみるのが良いと思います。
標準の再生画面(YouTubeサイトでの再生画面)をHTML5プレーヤーに変えることができなかったり、逆に、外部サイトに埋め込まれたプレーヤーがどうしてもHTML5プレーヤーになってしまう事態に遭遇しました。設定次第かもしれませんが。やはり、試験用がいいとこで、常用するのは厳しいかも。
従来方式の360pにはflvとmp4があって、Flashでは高ビットレートのflvを再生していました(IEのHTML5プレーヤーはmp4を再生していた)。10月以降はほとんどの動画でflvが消滅しているので、従来方式の接続にしても再生するのはmp4の方になり、以前と同様の画質までは戻らないかもしれません。

DASH方式とか(DASH用の)別動画とか想像の産物じゃないのか?
実在することを示していきます。
5月以降、動画ページのHTMLにDASH関連の項目が加わってます。
  • dashmpd
書式は"dashmpd" : "MPDのURL"
MPDはDASH用動画のお品書きのようなファイルで、ある解像度の何分からの動画はどのアドレス(URL)にある、などの情報が記載されてます(DASHでは一つの解像度でも時分割されてます)。クライアントはそのお品書きを見ながら、適宜、最適な動画を取得していきます。dashmpdにはそのお品書きのURLが記載されてます。
でも、トレースを取ってみると、MPDを取得してる形跡がないです。
  • adaptive_fmts
書式は"adaptive_fmts" : "フォーマット1の解像度 ビットレート itag URL,フォーマット2の(以下繰り返し)"
MPDと同じような内容です。dashmpdを見てMPDを取得するのはひと手間増えるから、動画ページのHTMLにベタに入れ込んでしまったのでしょうか。
  • dash
書式は"dash" : "1"
たぶん、1はDASH方式で接続してこいよ、というサーバからの指示。これを見て、クライアントはDASH方式で接続にいきます。FiddlerというWebデバッグツールを使って動画ページの「"dash" : "1"」をブラウザが見る前に削除してしまうと、従来方式で接続に行くのを確認してます。

加えて、HTMLに以前からある項目で重要なのに、url_encoded_fmt_stream_mapがあります。
書式は"url_encoded_fmt_stream_map" : "フォーマット1の解像度 整理番号 URL,フォーマット2の(以下繰り返し)"
adaptive_fmtsの書式に似ていて、おそらく役目も一緒です。DASH方式ならadaptive_fmtsのリストから動画を選ぶし、従来方式ならurl_encoded_fmt_stream_mapのリストから動画を選びます。
動画フォーマットにはitagという整理番号がつけられていて、それが
adaptive_fmtsにもurl_encoded_fmt_stream_mapにも記載されてます。そしてサーバへの動画リクエストにはitagが含まれているので、FiddlerなりWiresharkなりで監視すれば、どのフォーマットの動画を要求してるのかがわかり、さかのぼって、どちらの方式で動いているのかがわかるという算段です。

伝えられたか自信がないので、なんちゃってシーケンス図にしてみます。
まず、4月までのシーケンス。



赤字は、厳密には確認不可能な部分を示します。ここは想像が入るわけですが、HTMLの中身やネットワークを監視すれば無理がない見解になってると思います。なお、itag=34は360pのflv、itag=18は360pのmp4です。

5月以降、DASH方式のシーケンス。



このシーケンスだけだと、「dash 1」がDASH方式の指示とは確信が持てません。そこで、デバッガを使ってこの「dash 1」を消してしまい、クライアントの動きを見たのが下図です。

5月以降、無理やり従来方式のシーケンス



最初の方はともかく、後半の、デバッガで内容変えて動きを変えるとか、おおっぴらに言っちゃまずいんですかねぇ。よくわかりません。この記事はサクっと消えるかもしれません。

参考:
itagの一覧はYouTubeのWikipediaに載ってます。

DASH版の特徴的なエンコード
DASH版の動画にはかなり特徴的な劣化パターンがあります。5秒に1回激しく劣化する、ということです。ただでさえ、ビットレート足りなくて画が粗いのに、5秒に1回更にひどいことになります。
2013年6月にアップ(そしてエンコ)した参考動画を載せます。360pがわかりやすいです。



この動画(360p)のビットレートをBitrate Viewerで見てみると、次のとおりです。




縦軸がビットレート、横軸が時間です。おそろしいほど規則的に、5秒に一度ビットレートが激減してます。これが、5秒間隔の画質劣化の原因じゃないでしょうか。まぁ、Bitrate Viewerの仕組みもわからんし、GOP長もわからんので、断定はできませんけど。

DASH版と従来版のビットレート比較の補足



これは解説動画中に出てきた図の抜粋で、私の車載動画のビットレートを計測したものです。元々、従来版360pにはmp4とflvの2つがありますが、flvを計測してるのはこの図だけです。他の図でflvが出てこないのは、(解説動画の最後に解説してますが)10月頃にflvが削除されてしまって、計測できなかったからです。
ただ、解説動画には入れてないものの、いくつかの動画でflvを見つけ、値を計測してます。その狭い範囲の経験則で言えば、flvはmp4よりビットレートが高いです。1割から2割くらい高いです。なので、解説動画中で、360pはほとんど、従来版mp4とDASH版mp4の比較しかできてないですが、従来版flvとDASH版mp4の比較をしていれば、もっと大きな差がついていた可能性が高いです。

なお、従来版にflvとmp4がある場合、DASH対応する前のFlashプレーヤはflvの方を再生していたようです。その意味では、前述したYouTube Centerなどを使って無理やり従来方式で接続したとしても、flvがなくなった今となっては4月以前の画質までは戻らないことになります(360pのみですが)。

高い  ←    画質     → 低い
4月まで    flv  
mp4
5月以降 標準(DASH接続)    flv   従来版mp4 DASH版mp4
無理やり従来式接続    flv  
従来版mp4 DASH版mp4
10月以降 標準(DASH接続) 従来版mp4 DASH版mp4
無理やり従来式接続 従来版mp4 DASH版mp4
    はFlashプレーヤーが再生する動画。

別の話。
上のほうで、小川の動画を載せてますが、何気なく従来版mp4のビットレートを調べたら、これまでにない大きな値になってました。新記録です。

360p 従来 1275kbps
DASH 600kbps -53%
720p 従来 4215kbps
DASH 2200kbps -48%

解説動画中のグラフに小川のビットレートを追加してみます。



従来版は新記録でしたが、DASH版はまたこれか、という値でした。超えられない壁に見えます。
従来版は映像の動きが早い、細かい、明滅が激しいなどの要因で圧縮しづらい場合は、しょうがないねと低圧縮(高ビットレート)で許してくれるようです。一方、DASH版ですが、基本的には映像次第でビットレートを可変にするものの、ある一線は絶対死守で、それ以上は1bitもおまけしてくれないように見えます。図の720pがわかりやすいです。従来版で2800kbpsを越えるものは全て、DASH化で2200kbpsに抑え込まれています。
よって、従来版のビットレートが高いほど(つまり映像が圧縮しづらいほど)、DASH版では理不尽に圧縮されることになり、映像の劣化に気づきやすくなるんだと思います。
まぁでも理不尽は言いすぎですかね。最初からDASH版のような仕様なら、それはそれで受け入れてたと思います。細かい動画を上げたなら、それを再現できない結果になるのはしょうがない気がします。
ただ、YouTubeの従来版はかなり頑張ってくれてただけに残念ではあります。しかも新規アップ動画だけじゃなく、旧動画にも影響ありますからね(5月以降、徐々にDASH化されていて、ほとんど完了してる)。1年ぶりに動画を見てみたら、かつての精細さが見る影もない、などという事態がありえるわけで、これは厳しいです。




上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。