AMDのVCEを試す
2週間ちょい前ぐらいからRadeon HD 7770というものを使っている。
こんなの。

ただ、わたしの場合放っておくと、これを普通の描画と、madVRと、NL-Means計算ボードとしてしか利用しない。これでは1万円の使い方として大変もったいないので、ちょっと違った使い方として、Radeon HD 7xxxについているVideo Codec Engine (以下VCE)を有効利用することを考えてみる。
Video Codec Engine (VCE)
まあようはあれです、AMD版QSVというかなんというか。GPUに載っているハードウェア回路でH.264エンコードを行うもの。
QSVと違うのは、QSVが動き探索・動き予測などをGPU EUで、符号化などをQSVのハードウェアで実行するのに対し、VCEはすべてをハードウェアで行う模様。そのほうが速度は出そうなので、よさそうなものなのだけど、これがあとあと懸念材料に…。
テスト環境
VCE環境
Win7 x64
Intel Xeon W3680 (6C/12T @ 3.6GHz)
ASUS P6T Deluxe V2
DDR3-1333 18GB
QPI 4.8GT (理論帯域 19.2GB/s)
Radeon HD 7770 (1020MHz, PCIe 2.0 x16)
Aviutl 0.99m
Catalyst Control Center 12.10
VCEEnc 0.00
比較のためのQSV環境
Win7 x64
Intel Core i7 3770K (4C/8T @ 3.9GHz)
ASUS P8Z77-M
DDR3-2133 16GB
Intel HD Graphics 4000 (1150MHz)
Intel 2867ドライバ
Aviutl 0.99m
QSVEnc 0.11
わかってきたこと
VCEを使用するためのライブラリは、AMD APP SDKに含まれる。現在のバージョンは2.7。またCatalyst Control Centerの12.8以降が必要。
Sampleコードとかをいじっていろいろ動かしてみた。するといろいろとわかってきたことが…。
・H.264 Basline / Main Profile。High Profileはなし?
・H.264 I/Pフレームのみ。Bフレームサポート無し。
・プログレッシブのみ。インターレース保持はなし。
・SAR比指定なし。
・解像度が16で割り切れない場合不安定。なんか下に緑の線が入ったり?
・限定的なフレームレートサポート。普通じゃない変なフレームレートを指定できない。
・ほかいろいろ…
な…なんじゃこりゃ。
あと、いまいち速くない…。
結局AviutlからVCEで出力するVCEEncというのを作ったのだが、1080pのエンコード結果は…

66.82fps。
つぎに同じ動画をQSVEncでエンコード。

159.31fps。速いっすね。まあそもそも環境が違うし、良い比較とは言えないけれど。XeonはWestmere世代だし、クロックも低めなので、Ivyのほうがシングルスレッド性能はそれなりに優位にあるからそれも速度に効いてはいるだろう。
画質の差もあるはずだし(そのへんはまだよくわからない)、「VCEは遅い」とだけ言うことはできない。それに言ってしまえばわたしのコードが悪い、つまりチューニングが足りないんだろうとは思う。
でもやはりそもそも(QSVと比べて)遅いんじゃないかな、という気はする。A's Video ConverterとかでもVCEはそんなに速度でてない。
SDKとかSampleコードにドキュメントが少なすぎて、どうチューニングすればいいのやらわからんところがなんとも。OvEncodeTaskの引数ってどういう意味なんでしょう…。こういったことが全くわからないのでチューニングは手詰まり…。わからないことは他にもあって、参照距離ってどう指定するのかな…、とかも。
VCEの実力?
気になるのは、速度的な面はチューニングの問題だとしても、H.264の機能的な面でこれがVCEの実力なのかどうなのか。
ただSampleコードが不十分なだけなのか。それともハードウェア的にインタレとかBフレームとかはもう無理なのか。
ここで問題となるのはQSVと違ってVCEはほとんどハードウェアで実装されているということ。GPUを使った部分もあるならドライバなどソフトウェアでなんとかなるかもしれない、と期待できる。でもほとんどハードとなると…。というわけでやや悲観的に考えている。
VCEの画質
感想としては、「健闘している」。
CABACとインループデブロックフィルタはあるものの、肝心の(?)Bフレームがない割には、頑張っている、と思う。特に中~高ビットレートではそこそこ良い画質だと思う。ただBフレームがない以上、低ビットレートだと…。
低ビットレートはやっぱりx264の独壇場。こうして見ると、やはりx264の画質は素晴らしいと思う。時間をかけるだけの価値はある。
まあ画質については、自分で試してみていただければと。
拡張 VCE 出力
基本的にVCEのサンプルコードをx264guiExにくっつけ、やや高速化を行ったものです。VCEを使用したエンコードが可能です。
必須動作環境
Windows Vista,7,8 (x86/x64)
Aviutl 0.99g4 以降
VCEが載ったハードウェア
AMD製 GPU Radeon HD 7xxx以降
AMD製 APU Trinity世代(第2世代)以降
Catalyst Control Center 12.8以降 (フルインストール推奨)
※XPでは動作しません。
使用可能かは設定画面で確認できます。
←使用可能
←使用不可
使用方法
ダウンロードしたら解凍して出てくるauo_setupを実行してください。
以下のものを必要なら自動でダウンロード・インストール・配置します。
・.NET Framework 4.0 Client Profile
・neroaacenc
・L-SMASH
・msvcr110.dll
・msvcp110.dll
VCEEncは.NET 4.0系を使用します。ただ、Catalyst Control Centerも使用しているので、通常は問題無いと思います。
注意事項
自分で作っといてあれですが、遅いです。いろいろ高速化に役立ちそうなことはしてみて、だいぶ速くなったのですが、それでもです。
あと、今後の更新で設定ファイルの互換性がなくなるかもしれません。
いつもの注意事項など
無保証です。自己責任で使用してください。拡張 VCE 出力 (VCEEnc.auo)を使用したことによる、いかなる損害・トラブルについても責任を負いません。
ダウンロード>>
厄介なのは、問題が起こっても、自分ほうのバグなのか、VCE・APP SDKの仕様なのか区別ができない点。フレームレートが原因で止まるとは思わなかった…。
いずれにせよ、ハードウェアエンコの画質はQSVにしろVCEにしろ、x264に遠く及ばない。x264の凄さを改めて実感した。
こんなの。

ただ、わたしの場合放っておくと、これを普通の描画と、madVRと、NL-Means計算ボードとしてしか利用しない。これでは1万円の使い方として大変もったいないので、ちょっと違った使い方として、Radeon HD 7xxxについているVideo Codec Engine (以下VCE)を有効利用することを考えてみる。
Video Codec Engine (VCE)
まあようはあれです、AMD版QSVというかなんというか。GPUに載っているハードウェア回路でH.264エンコードを行うもの。
QSVと違うのは、QSVが動き探索・動き予測などをGPU EUで、符号化などをQSVのハードウェアで実行するのに対し、VCEはすべてをハードウェアで行う模様。そのほうが速度は出そうなので、よさそうなものなのだけど、これがあとあと懸念材料に…。
テスト環境
VCE環境
Win7 x64
Intel Xeon W3680 (6C/12T @ 3.6GHz)
ASUS P6T Deluxe V2
DDR3-1333 18GB
QPI 4.8GT (理論帯域 19.2GB/s)
Radeon HD 7770 (1020MHz, PCIe 2.0 x16)
Aviutl 0.99m
Catalyst Control Center 12.10
VCEEnc 0.00
比較のためのQSV環境
Win7 x64
Intel Core i7 3770K (4C/8T @ 3.9GHz)
ASUS P8Z77-M
DDR3-2133 16GB
Intel HD Graphics 4000 (1150MHz)
Intel 2867ドライバ
Aviutl 0.99m
QSVEnc 0.11
わかってきたこと
VCEを使用するためのライブラリは、AMD APP SDKに含まれる。現在のバージョンは2.7。またCatalyst Control Centerの12.8以降が必要。
Sampleコードとかをいじっていろいろ動かしてみた。するといろいろとわかってきたことが…。
・H.264 Basline / Main Profile。High Profileはなし?
・H.264 I/Pフレームのみ。Bフレームサポート無し。
・プログレッシブのみ。インターレース保持はなし。
・SAR比指定なし。
・解像度が16で割り切れない場合不安定。なんか下に緑の線が入ったり?
・限定的なフレームレートサポート。普通じゃない変なフレームレートを指定できない。
・ほかいろいろ…
な…なんじゃこりゃ。
あと、いまいち速くない…。
結局AviutlからVCEで出力するVCEEncというのを作ったのだが、1080pのエンコード結果は…

66.82fps。
つぎに同じ動画をQSVEncでエンコード。

159.31fps。速いっすね。まあそもそも環境が違うし、良い比較とは言えないけれど。XeonはWestmere世代だし、クロックも低めなので、Ivyのほうがシングルスレッド性能はそれなりに優位にあるからそれも速度に効いてはいるだろう。
画質の差もあるはずだし(そのへんはまだよくわからない)、「VCEは遅い」とだけ言うことはできない。それに言ってしまえばわたしのコードが悪い、つまりチューニングが足りないんだろうとは思う。
でもやはりそもそも(QSVと比べて)遅いんじゃないかな、という気はする。A's Video ConverterとかでもVCEはそんなに速度でてない。
SDKとかSampleコードにドキュメントが少なすぎて、どうチューニングすればいいのやらわからんところがなんとも。OvEncodeTaskの引数ってどういう意味なんでしょう…。こういったことが全くわからないのでチューニングは手詰まり…。わからないことは他にもあって、参照距離ってどう指定するのかな…、とかも。
VCEの実力?
気になるのは、速度的な面はチューニングの問題だとしても、H.264の機能的な面でこれがVCEの実力なのかどうなのか。
ただSampleコードが不十分なだけなのか。それともハードウェア的にインタレとかBフレームとかはもう無理なのか。
ここで問題となるのはQSVと違ってVCEはほとんどハードウェアで実装されているということ。GPUを使った部分もあるならドライバなどソフトウェアでなんとかなるかもしれない、と期待できる。でもほとんどハードとなると…。というわけでやや悲観的に考えている。
VCEの画質
感想としては、「健闘している」。
CABACとインループデブロックフィルタはあるものの、肝心の(?)Bフレームがない割には、頑張っている、と思う。特に中~高ビットレートではそこそこ良い画質だと思う。ただBフレームがない以上、低ビットレートだと…。
低ビットレートはやっぱりx264の独壇場。こうして見ると、やはりx264の画質は素晴らしいと思う。時間をかけるだけの価値はある。
まあ画質については、自分で試してみていただければと。
拡張 VCE 出力
基本的にVCEのサンプルコードをx264guiExにくっつけ、やや高速化を行ったものです。VCEを使用したエンコードが可能です。
必須動作環境
Windows Vista,7,8 (x86/x64)
Aviutl 0.99g4 以降
VCEが載ったハードウェア
AMD製 GPU Radeon HD 7xxx以降
AMD製 APU Trinity世代(第2世代)以降
Catalyst Control Center 12.8以降 (フルインストール推奨)
※XPでは動作しません。
使用可能かは設定画面で確認できます。


使用方法
ダウンロードしたら解凍して出てくるauo_setupを実行してください。
以下のものを必要なら自動でダウンロード・インストール・配置します。
・.NET Framework 4.0 Client Profile
・neroaacenc
・L-SMASH
・msvcr110.dll
・msvcp110.dll
VCEEncは.NET 4.0系を使用します。ただ、Catalyst Control Centerも使用しているので、通常は問題無いと思います。
注意事項
自分で作っといてあれですが、遅いです。いろいろ高速化に役立ちそうなことはしてみて、だいぶ速くなったのですが、それでもです。
あと、今後の更新で設定ファイルの互換性がなくなるかもしれません。
いつもの注意事項など
無保証です。自己責任で使用してください。拡張 VCE 出力 (VCEEnc.auo)を使用したことによる、いかなる損害・トラブルについても責任を負いません。
ダウンロード>>
厄介なのは、問題が起こっても、自分ほうのバグなのか、VCE・APP SDKの仕様なのか区別ができない点。フレームレートが原因で止まるとは思わなかった…。
いずれにせよ、ハードウェアエンコの画質はQSVにしろVCEにしろ、x264に遠く及ばない。x264の凄さを改めて実感した。
スポンサーサイト