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


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ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。