VDPAUのhqscalingはアニメの画質向上に効果があるか?
執筆日時:2014/06/29
はじめに
テレビやコンピュータ用ディスプレイの解像度向上に伴い、解像度の低い動画を再生する際の画質向上機能が注目されている。例えばFull HD (1920x1080px)解像度のディスプレイに、640x360pxの解像度で記録された動画をフルスクリーンで再生する場合、縦横それぞれ3倍に拡大して表示することになるため、簡易なアルゴリズムで拡大するとボヤけた"粗い"画となってしまう。しかしながら、高度なアルゴリズムを用い、輪郭等を検出して補間することで、拡大再生時の画質を向上させることができる。これは一般にアップコンバートやアップスケーリングと呼ばれている。
現在では、家庭用TV録画機やPS3等のゲーム機においてもアップスケーリング機能は一般的になっており、またWindows PCでも搭載しているGPUの性能や再生ソフトの機能によってはアップスケーリング機能を利用して動画を再生することが可能である。Linuxにおいては、MPlayerをベースとしたSMPlayerの"ソフトウェアスケーリング"機能を用いることで、低解像度動画再生時の画質を向上できるということが知られていたが、このソフトウェアスケーリング機能はCPU負荷が高く、その割には大した画質向上をもたらさない (と私は思っている)。
今回試すVDPUAのhqscalingオプションは、VDPAU自体がGPUの動画再生支援を使うための仕組みであることから、CPU負荷が著しく高まるといったことは無く、GPUとドライバの組み合わせがこのオプションに対応していさえすれば比較的楽に試せると思われる。しかしながらVDPAUのhqscalingオプションに関する記述は、少なくとも執筆時に日本語のものがネット上で見つからなかったため、あまり使われていないものと考えられる (英語の記述は流し読みなので若干怪しいが、2009年頃から話が出だして、2012年頃に書かれたものが複数見つかる)。
そこでこのオプションによって動画を拡大再生したときの画質がどう変化するか調べてみたいと思う。
環境
Hardware: AMD FX-8350 CPU + Quadro 600
OS: Ubuntu 12.04 LTS 64bit, Kernel 3.8.0-33-generic
Software: MPlayer svn r34540, NVIDIA Driver 304.88
GPUとドライバの組み合わせがhqscalingに対応しているかどうかは、vdpauinfoコマンドの出力結果を見ることで判断できる。上記の環境における出力結果の一部は以下のとおりで、"HIGH QUALITY SCALING - L1"のサポートが"y"になっているので、hqscaling=1の指定が行える。私が確認したところでは、Ubuntu 14.04 LTSのAMD/ATI用オープンドライバではE1-1200でもA10-7850Kでも無理だった。Quadro 600では利用できるので、少なくともNVIDIA製のGPUで同世代以降なら可能だろう。
Video mixer: feature name sup ------------------------------------ DEINTERLACE_TEMPORAL y DEINTERLACE_TEMPORAL_SPATIAL y INVERSE_TELECINE y NOISE_REDUCTION y SHARPNESS y LUMA_KEY y HIGH QUALITY SCALING - L1 y HIGH QUALITY SCALING - L2 - HIGH QUALITY SCALING - L3 - HIGH QUALITY SCALING - L4 - HIGH QUALITY SCALING - L5 - HIGH QUALITY SCALING - L6 - HIGH QUALITY SCALING - L7 - HIGH QUALITY SCALING - L8 - HIGH QUALITY SCALING - L9 -
ちなみに、mplayerのマニュアル (# man mplayer)内では、VDPAUに関する項目の中に、
hqscaling 0 Use default VDPAU scaling (default). 1-9 Apply high quality VDPAU scaling (needs capable hardware).
と説明されており、hqscalingオプションのデフォルト値が0であること、1から9のうち対応している数値を指定することで、ハイクオリティーなスケーリングが可能になるということが分かる。
材料
検証のため使用した動画は以下の3つである。アニメ再生時の画質を検証するという目的のため、また再現性を確保するため、比較的低解像度なアニメ動画として、ニコニコ動画の公式アニメから第1話のものを3つ用意した。
(1) 秘密結社 鷹の爪 EX 第1話「春の世界征服祭り」
http://www.nicovideo.jp/watch/1397205009 ©秘密結社 鷹の爪 Extreme 製作委員会
開始17秒~22秒あたりの豚肉売り場の画
以下、"鷹の爪EX"。
(2) 未確認で進行形 第1話「何事も最初が肝心です」
http://www.nicovideo.jp/watch/1389262573 ©荒井チェリー/一迅社・未確認で進行形製作委員会
開始322秒あたり、手前に小紅、奥に真白の画
以下、"未確認で進行形"。
(3) 僕らはみんな河合荘 第1話「たとえば」
http://www.nicovideo.jp/watch/1397634210 ©宮原るり・少年画報社/委員会はみんな河合荘
開始1382秒あたりでED中、「個性に敬礼~」のシーン
以下、"河合荘"。
いずれも640x360pxの解像度である。それぞれの動画で1箇所、同一のキャプチャ画像を撮りやすいシーンを選んでいる。
方法
mplayerを用いた再生には以下のコマンドとオプションを使用した。なお、今回使用した動画はすべてffh264vdpauのコーデックで再生可能である。
A. hqscaling=0
# mplayer -vo vdpau -vc ffh264vdpau [file]
B. hqscaling=1
# mplayer -vo vdpau:hqscaling=1 -vc ffh264vdpau [file]
再生開始後にfを押して1920x1080pxのディスプレイでフルスクリーンにし、特定のシーンで一時停止してPrintScreenボタンでPNGフォーマットのキャプチャを取得。これをA. B.でそれぞれ行い、GIMP上で比較画像を作成した。
また得られた2枚のキャプチャ画像の差分を、
# composite -compose difference [B.で取得した画像] [A.で取得した画像] diff.png
としてdiff.pngに作成、さらにこのdiff.pngにGIMP上で明るさとコントラストを上げる処理を施し (明るさ+126、コントラスト+127)、両画像で差異のある部分を視認しやすくした。
結果1 (鷹の爪EX)
3つの動画で共通であるが、画像は上が比較画像、下が差分強調画像である。比較画像は1920x1080pxのキャプチャ画像から360x405pxの範囲を選択し、それを2つ並べて720x405pxの画像としてある (つまり、720x405pxの画像では1920x1080pxのディスプレイにおけるdot by dotが保たれている)。差分強調画像は1920x1080pxの画像を720x405pxに縮小したものを掲載している。
比較画像では、豚の耳と目の辺りが分かりやすいと思うが、hqscaling=1の方が輪郭線がくっきりしているのが見てとれる。「HD画質になっているか」と言われれば答えは「ノー」だが、それでもデフォルトよりはマシである。
差分強調画像を見てみると、確かに輪郭部分で差異が生じている (=そこで拡大補間が効いている)ことが確認できる。
結果2 (未確認で進行形)
二次元画でも写真でも、目の部分がはっきりしているかは全体の画質に対するイメージに大きく影響する。とういうわけで小紅ちゃんの右目の辺りで比較画像を作ってみたわけだが、「鷹の爪EX」で比較したものより分かりやすく、hqscaling=1で輪郭のくっきり感が向上している。これだけ差異があれば、hqscalint=1のオプションを導入するのに十分ではなかろうか。
差分強調画像を見てみると、輪郭部分以外にも無数のブロック状エリアで差分が検出されている。これは「鷹の爪EX」でも一部 (天井部分)に存在するのだが、「未確認で進行形」の方が圧倒的に目立つ。これは、グラデーション (髪の毛など)やボカシ (頬など)等の技法を用いた彩色に起因するものと考えられる。
結果3 (河合荘)
どうやらニコニコ動画にアップロードされている公式アニメ動画は固定ビットレートでエンコードされているらしいので、画の作風によって元動画からの圧縮され具合 (劣化具合)には差があると考えられる。とりあえず、「河合荘」は圧縮感が高いように思う。とはいえこの画像でもhqscaling=1の効果は確認できる。
このシーンでは背景が細かい模様になっているので、その部分にも全て差異が生じている。こちらでもブロック状エリアの差分が検出されているが、「未確認で進行形」と比較すると輪郭線付近での検出が多いように見えるので、動画エンコード時に生じた微妙な色の浸出によるものではないかと思う。
まとめ
VDPAUのhqscaling=1オプションは、SD解像度の動画がHD画質になるという程のものではないが、アニメの画質向上には確かな効果があり、使用することで輪郭の明瞭さが増す。既にVDPAUで動画再生支援を利用している人は、オプションが使用可能か調べて可能ならば是非使うことをおすすめしたいし、VDPAUは使っていないけれどもLinuxでの動画再生に関心のある人は試してみて損は無いと思う。