[QSVって] QSVをいじった結果… [ほんと微妙]
QuickSyncVideoで遊んでみよう、というお話。
以前、P67なんて、要るわけないでビットレート指定で1passとかちょっと…とか、速度がうんぬん、みたいなことを言ってたわけだけど、言いっ放しってのもあれなので、Intel Media SDK をダウンロードして、中のsample_encode.exeというのを弄繰り回してみた。で、なんかできたので成果物をあげとく。
以前、P67なんて、要るわけないでビットレート指定で1passとかちょっと…とか、速度がうんぬん、みたいなことを言ってたわけだけど、言いっ放しってのもあれなので、Intel Media SDK をダウンロードして、中のsample_encode.exeというのを弄繰り回してみた。で、なんかできたので成果物をあげとく。
sample_encodeを使うとyuv(YV12) raw がH.264/AVC ES(raw)になって出てくる。
あとはmp4boxとかでmp4に格納してやれば、普通に再生できる。
そんで、いろいろサンプルコードをいじってると、実はサンプルコードにちょっと追加するだけでいろんな設定ができる、ってのが分かったのでパラメータを変えながら色々遊んでみたが…
まあ、速いんだけどね、画質がね。微妙なのさ。うん。
画質を保とうとするとだいぶ膨らむし。
やっぱりx264はすごい。
で、微妙なんだけども、速いことは確かで、なんかできてしまったのであげとく。
Sandy持ってたら、暇な時に遊んでみてください。
拡張 QSV 出力 (QSVEnc.auo) + QSVEncC.exe
拡張QSV出力(QSVEnc) は、Intel Media SDK を使用してエンコードを行うAviutlの出力プラグインです。
ほんとは、拡張Intel Media SDK出力とかのほうが名前としては正しいのですが、長ったらしく、あまり好きになれなかったので、名称として多少不正確ですが、拡張 QSV 出力にしました。
IntelMediaSDKのsample_encode.exeを改造し、x264guiEx 1.xxに突っ込みました。QuickSyncVideoによるハードウェア高速エンコードができます。画質(および圧縮率)には期待しないでください。
QSVEncC は、おまけのQSVEncのコマンドライン版です。
入力としては raw と YUV4MPEG2(y4m) に対応しています。
基本的にパイプを使うことを想定しています。
使い方としては、
avs2pipemod.exe -y4mp "{avsファイル名}.avs" | QSVEncC.exe [オプションとか] --y4m -i - -o "{rawファイル名}.264"
ffmpeg -v 0 -i "{ソース動画ファイル}" -pix_fmt yuv420p -an -vcodec rawvideo -f yuv4mpegpipe - | QSVEncC.exe [オプションとか] --y4m -i - -o "{rawファイル名}.264"
みたいな感じになります。
出てくるのはH.264/AVC ESなのでmp4boxとかmkvmergeでmp4なりmkvなりにしてやってください。
fpsと(必要なら)parの指定が必要です。
例えば29.97fps,par=4:3ならこんな感じ。
mp4box.exe -add "{rawファイル名}.264"#video:fps=30000-1001:par=4:3 -add "{音声ファイルパス}"#audio -new "{出力ファイル名}.mp4"
mp4boxはファイル名に"#"とか"%"がなぜか使えない仕様なので注意してください。
むろんQSVEnc.auoは一時ファイル名でこいつらを全角に置換するので問題ないです。
なにができるのさ?
・QSVによる高速H.264/AVCエンコード
・高速化(一番下にベンチ結果を置いといた)
YUY2をNV12に変換しながらIntel Media SDK側のフレームバッファに直接叩きこむ。
・CQP(固定量子化量)モード
これがやりたかった。1passビットレート指定だと、出来上がりの画質が予想できないので。
・アス比指定
mux時に反映。アス比指定がないと1440x1080を16:9表示できない。(個人的には)重要。
・GOP長の指定
・連続Bフレーム数の指定
・Intel Media SDK VPP (Intel GPUを使用した簡易高速フィルタリング)
基本動作環境
Windows Vista,7 (x86/x64)
Aviutl 0.99g4 以降
SSE2の搭載されたCPU
※ソフトウェアエンコードはXPでも動くかもしれないらしいけども、
Intelとしては動作保証はないらしいです。
QuickSyncVideo(ハードウェアエンコード)動作環境
基本動作環境に加え、
QuickSyncVideoの有効なCPUと対応したマザーボード
まあなんのこっちゃって言うと具体的には
・Core ix 2xxx と H61, H67, Z68 チップセットの載ったマザーボード
・内蔵GPUをプライマリにする
などですが、他にも色々条件があるかもなので頑張ってください。
注意点としては
・WinXP非対応
・SandyBridgeでもPentiumとかCeleronとかはQSV無効らしい。
・P67はダメ
・Z68だとVirtuなんとかってのをオンにするらしい
・リモートデスクトップ中はダメ(これにはまった)
・Windows Home Server とかもダメっぽいです。(持ってないのでわからんけども)
WHS用のIntelグラフィックスドライバが対応してない…模様。
【検証環境】
Win7 x64
Aviutl 0.99j
Core i5 2500 + H61
4GB RAM
Intel Graphics Driver 8.15.10.2361
Intel Graphics Driver 8.15.10.2509 両方動作確認
QSVEnc 使用にあたっての注意事項
無保証です。自己責任で使用してください。
QSVEncを使用したことによる、いかなる損害・トラブルについても責任を負いません。
つまり、こんなのってないよっていう状況に陥っても知りません。
QSVEnc 使用方法
x264guiExと大して変わりません。
Aviutl.exeと同じフォルダ、またはプラグインフォルダに
auoフォルダのなかに入っている
QSVEnc.auo、QSVEnc.ini、QSVEnc_stgフォルダ
の3つを放り込んでください。
また、Aviutl.exeと同じフォルダにlibmfxsw32.dllを放り込んでください。
また、以下のものが必要なので、
インストールしてください。
インストールされてれば必要ないです。
Aviutlが32bitアプリで、QSVEncも32bitです。
なので64bitOSであっても32bit版(x86版)が必要です。
VC++ 2008 SP1 再頒布可能パッケージ (x86)
http://www.microsoft.com/downloads/details.aspx?FamilyID=a5c84275-3b97-4ab7-a40d-3802b2af5fc2&displayLang=ja
Win Vista/7には.NET Framework 2.0はインストール済みなので、問題無いですね。
さらに以下のものが必要になるのでとりあえず集めてください。
ダウンロード先の例を書いておきます。
探せばこのほかにも見つかるものもあります。
neroaacenc (aacエンコーダ)
http://www.nero.com/jpn/technologies-aac-codec.html
mp4box (mp4 muxer, mp4作成時に必要)
http://pop.4-bit.jp/(POP氏)
mkvmerge (mkv muxer, mkv作成時に必要)
http://www.bunkus.org/videotools/mkvtoolnix/
その他あるといいかもしれないもの
qtaacenc (aacエンコーダ)
http://tmkk.pv.land.to/qtaacenc/ (要QuickTimeインストール)
lame (mp3 エンコーダ)
http://www.rarewares.org/mp3-lame-bundle.php
FAW+fawcl (FakeAACWave, aacを無劣化移行)
http://2sen.dip.jp/cgi-bin/friioup/upload.cgi?search=FakeAacWav&sstart=0001&send=9999
ext_bs (PVシリーズaac抽出)
http://www.sakurachan.org/soft/mediatools/
ffmpeg (as AC3 encoder)
http://blog.k-tai-douga.com/
oggenc2 (Ogg Vorbis, mkv用)
http://www.rarewares.org/ogg-oggenc.php
QSVEncの確認
Aviutlを起動して、その他 > 出力プラグイン情報 から QSVEnc.auo が認識されているか確かめます。
認識されていない場合、
VC++ 2008 SP1 再頒布可能パッケージ (x86) のインストールを忘れている or インストールに失敗している などが考えられます。
拡張 QSV 出力の設定画面を開き、
・使用する音声エンコーダの場所
・使用するmuxerの場所
を指定し、
その他の設定をして、
OK をクリックして、設定画面を閉じる
出力ファイル名を指定して、保存 -> エンコード開始。
いじってみてわかったQSVEnc(というよりIntel Media SDK)によるエンコードの注意点
・バグ
QSV(ハードウェアエンコ)でインタレ保持エンコを使用すると、なぜかフレーム数が倍になっておかしなことになります。これはソフトウェアエンコだと問題ないので、ドライバかなんかのバグっぽいです。(Intelに報告しといた -> おお、バグじゃね?という返事が来た…)
・よくわからんIntelMediaSDKの仕様っぽいもの
- 品質 fast は H.264/AVC Baseline Profileのようです。
- ハードウェアエンコ(QSV)
固定長GOPにチェックを入れなくても、固定長GOPになります。そんなもんらしいです。というかシーンチェンジ検出のさせ方がわからん。どうもvppを使うようなのだが…
参照距離は2までしか行きません。
- ソフトウェアエンコ
GOP長、参照距離、Bフレーム数のどれかを自動にしておくと、なぜかIDRフレームが先頭の一枚しか入らないので、シークが困難な(というかできない)動画が出来上がります。なのでソフトエンコ使用時は必ずGOP長、参照距離、Bフレーム数を自動にせず、手動で指定してください。
ソフトウェアエンコならx264のほうが断然いいのでどうでもいいですが。
- ほかにもいろいろ謎なわけがわからないよ的挙動がある模様。調べきれていない。
・mp4box
- mp4boxのバージョンによってはmuxが止まります。(mp4boxがraw importでこけます)理由はよくわからんのですが、とにかく最近のmp4boxを指定して、一度短い動画でチェックしてみてください。
その他
ハードウェアエンコにチェックを入れられないんだが…
QSVが使用不可だとそうなります。ハードウェアエンコの使用条件を確認してみてください。
vppてなに
Intel Media SDKでのフィルタリングです。x264の--vfみたいなもんです。Aviutlから受け取ったフレームに対してさらにリサイズなどフィルタをかけることができます。これらのVPP処理はIntelのGPUで処理され、それがQSVエンコーダに渡されるため、高速に動作します。が、処理品質は微妙なようです。
・リサイズ
・ノイズ除去
・インタレ解除(通常版、IT版(逆テレシネ))
・DetailEnhancer(ディテール・輪郭強調、unsharpっぽい?)
エンコ速度
以前、P67なんて、要るわけないでも書きましたが、QSVの処理能力にはまだまだ余裕がある状態です。なので、エンコ速度はデコードやフィルタリングの速度に左右されます。デコードやフィルタリングをなるべく軽くすることで、QSVの実力を発揮させてやることができます。
正直、QSVに画質は期待できないので、あまりフィルタとかかけず、ばんばんエンコさせてやるのに向いていると思います。
結局使えるの?
…あんま使えません。
高速化・CQPなど機能を増やしたのはいいんですが、やはり画質が厳しい(x264と比較すると)。アニメだと輪郭周りが気になって気になって以下略。
もちろん、かなり高速なので、その点はいいかなと。
個人的にはアニメは高画質であって欲しいので、今後もx264(時間かかるけど縮むので10bit)ですが、たまにエンコする実写の画質はあまり気にしてないので、実写をぱぱっと処理するのに使うかなあ…という感じ。
QSVEncC(おまけ)
sample_encodeはyuv rawファイルしか読めませんでした。
さすがに「そんなのってないよ」って感じで、ちょっと残念だったので、パイプ入力とYUV4mpeg2に対応させてQSVEncのコマンドライン版として作ってみました。コマンドラインの例は上に書いたような感じです。あとはQSVEncC -hとかからコマンドライン一覧を見てください。
avsを直接食えるようにする気はありません。
QSVEnc ダウンロード>>
以前の記事P67なんて、要るわけないと同条件での結果。151fps出てる。

動作中のスクリーンショット。右側のMFX(QSV回路のことっぽい)の使用率がそこそこ高いことがわかる。(16%でも高いと言える)

あとはmp4boxとかでmp4に格納してやれば、普通に再生できる。
そんで、いろいろサンプルコードをいじってると、実はサンプルコードにちょっと追加するだけでいろんな設定ができる、ってのが分かったのでパラメータを変えながら色々遊んでみたが…
まあ、速いんだけどね、画質がね。微妙なのさ。うん。
画質を保とうとするとだいぶ膨らむし。
やっぱりx264はすごい。
で、微妙なんだけども、速いことは確かで、なんかできてしまったのであげとく。
Sandy持ってたら、暇な時に遊んでみてください。
拡張 QSV 出力 (QSVEnc.auo) + QSVEncC.exe
拡張QSV出力(QSVEnc) は、Intel Media SDK を使用してエンコードを行うAviutlの出力プラグインです。
ほんとは、拡張Intel Media SDK出力とかのほうが名前としては正しいのですが、長ったらしく、あまり好きになれなかったので、名称として多少不正確ですが、拡張 QSV 出力にしました。
IntelMediaSDKのsample_encode.exeを改造し、x264guiEx 1.xxに突っ込みました。QuickSyncVideoによるハードウェア高速エンコードができます。画質(および圧縮率)には期待しないでください。
QSVEncC は、おまけのQSVEncのコマンドライン版です。
入力としては raw と YUV4MPEG2(y4m) に対応しています。
基本的にパイプを使うことを想定しています。
使い方としては、
avs2pipemod.exe -y4mp "{avsファイル名}.avs" | QSVEncC.exe [オプションとか] --y4m -i - -o "{rawファイル名}.264"
ffmpeg -v 0 -i "{ソース動画ファイル}" -pix_fmt yuv420p -an -vcodec rawvideo -f yuv4mpegpipe - | QSVEncC.exe [オプションとか] --y4m -i - -o "{rawファイル名}.264"
みたいな感じになります。
出てくるのはH.264/AVC ESなのでmp4boxとかmkvmergeでmp4なりmkvなりにしてやってください。
fpsと(必要なら)parの指定が必要です。
例えば29.97fps,par=4:3ならこんな感じ。
mp4box.exe -add "{rawファイル名}.264"#video:fps=30000-1001:par=4:3 -add "{音声ファイルパス}"#audio -new "{出力ファイル名}.mp4"
mp4boxはファイル名に"#"とか"%"がなぜか使えない仕様なので注意してください。
むろんQSVEnc.auoは一時ファイル名でこいつらを全角に置換するので問題ないです。
なにができるのさ?
・QSVによる高速H.264/AVCエンコード
・高速化(一番下にベンチ結果を置いといた)
YUY2をNV12に変換しながらIntel Media SDK側のフレームバッファに直接叩きこむ。
・CQP(固定量子化量)モード
これがやりたかった。1passビットレート指定だと、出来上がりの画質が予想できないので。
・アス比指定
mux時に反映。アス比指定がないと1440x1080を16:9表示できない。(個人的には)重要。
・GOP長の指定
・連続Bフレーム数の指定
・Intel Media SDK VPP (Intel GPUを使用した簡易高速フィルタリング)
基本動作環境
Windows Vista,7 (x86/x64)
Aviutl 0.99g4 以降
SSE2の搭載されたCPU
※ソフトウェアエンコードはXPでも動くかもしれないらしいけども、
Intelとしては動作保証はないらしいです。
QuickSyncVideo(ハードウェアエンコード)動作環境
基本動作環境に加え、
QuickSyncVideoの有効なCPUと対応したマザーボード
まあなんのこっちゃって言うと具体的には
・Core ix 2xxx と H61, H67, Z68 チップセットの載ったマザーボード
・内蔵GPUをプライマリにする
などですが、他にも色々条件があるかもなので頑張ってください。
注意点としては
・WinXP非対応
・SandyBridgeでもPentiumとかCeleronとかはQSV無効らしい。
・P67はダメ
・Z68だとVirtuなんとかってのをオンにするらしい
・リモートデスクトップ中はダメ(これにはまった)
・Windows Home Server とかもダメっぽいです。(持ってないのでわからんけども)
WHS用のIntelグラフィックスドライバが対応してない…模様。
【検証環境】
Win7 x64
Aviutl 0.99j
Core i5 2500 + H61
4GB RAM
Intel Graphics Driver 8.15.10.2361
Intel Graphics Driver 8.15.10.2509 両方動作確認
QSVEnc 使用にあたっての注意事項
無保証です。自己責任で使用してください。
QSVEncを使用したことによる、いかなる損害・トラブルについても責任を負いません。
つまり、こんなのってないよっていう状況に陥っても知りません。
QSVEnc 使用方法
x264guiExと大して変わりません。
Aviutl.exeと同じフォルダ、またはプラグインフォルダに
auoフォルダのなかに入っている
QSVEnc.auo、QSVEnc.ini、QSVEnc_stgフォルダ
の3つを放り込んでください。
また、Aviutl.exeと同じフォルダにlibmfxsw32.dllを放り込んでください。
また、以下のものが必要なので、
インストールしてください。
インストールされてれば必要ないです。
Aviutlが32bitアプリで、QSVEncも32bitです。
なので64bitOSであっても32bit版(x86版)が必要です。
VC++ 2008 SP1 再頒布可能パッケージ (x86)
http://www.microsoft.com/downloads/details.aspx?FamilyID=a5c84275-3b97-4ab7-a40d-3802b2af5fc2&displayLang=ja
Win Vista/7には.NET Framework 2.0はインストール済みなので、問題無いですね。
さらに以下のものが必要になるのでとりあえず集めてください。
ダウンロード先の例を書いておきます。
探せばこのほかにも見つかるものもあります。
neroaacenc (aacエンコーダ)
http://www.nero.com/jpn/technologies-aac-codec.html
mp4box (mp4 muxer, mp4作成時に必要)
http://pop.4-bit.jp/(POP氏)
mkvmerge (mkv muxer, mkv作成時に必要)
http://www.bunkus.org/videotools/mkvtoolnix/
その他あるといいかもしれないもの
qtaacenc (aacエンコーダ)
http://tmkk.pv.land.to/qtaacenc/ (要QuickTimeインストール)
lame (mp3 エンコーダ)
http://www.rarewares.org/mp3-lame-bundle.php
FAW+fawcl (FakeAACWave, aacを無劣化移行)
http://2sen.dip.jp/cgi-bin/friioup/upload.cgi?search=FakeAacWav&sstart=0001&send=9999
ext_bs (PVシリーズaac抽出)
http://www.sakurachan.org/soft/mediatools/
ffmpeg (as AC3 encoder)
http://blog.k-tai-douga.com/
oggenc2 (Ogg Vorbis, mkv用)
http://www.rarewares.org/ogg-oggenc.php
QSVEncの確認
Aviutlを起動して、その他 > 出力プラグイン情報 から QSVEnc.auo が認識されているか確かめます。
認識されていない場合、
VC++ 2008 SP1 再頒布可能パッケージ (x86) のインストールを忘れている or インストールに失敗している などが考えられます。
拡張 QSV 出力の設定画面を開き、
・使用する音声エンコーダの場所
・使用するmuxerの場所
を指定し、
その他の設定をして、
OK をクリックして、設定画面を閉じる
出力ファイル名を指定して、保存 -> エンコード開始。
いじってみてわかったQSVEnc(というよりIntel Media SDK)によるエンコードの注意点
・バグ
QSV(ハードウェアエンコ)でインタレ保持エンコを使用すると、なぜかフレーム数が倍になっておかしなことになります。これはソフトウェアエンコだと問題ないので、ドライバかなんかのバグっぽいです。(Intelに報告しといた -> おお、バグじゃね?という返事が来た…)
・よくわからんIntelMediaSDKの仕様っぽいもの
- 品質 fast は H.264/AVC Baseline Profileのようです。
- ハードウェアエンコ(QSV)
固定長GOPにチェックを入れなくても、固定長GOPになります。そんなもんらしいです。というかシーンチェンジ検出のさせ方がわからん。どうもvppを使うようなのだが…
参照距離は2までしか行きません。
- ソフトウェアエンコ
GOP長、参照距離、Bフレーム数のどれかを自動にしておくと、なぜかIDRフレームが先頭の一枚しか入らないので、シークが困難な(というかできない)動画が出来上がります。なのでソフトエンコ使用時は必ずGOP長、参照距離、Bフレーム数を自動にせず、手動で指定してください。
ソフトウェアエンコならx264のほうが断然いいのでどうでもいいですが。
- ほかにもいろいろ謎なわけがわからないよ的挙動がある模様。調べきれていない。
・mp4box
- mp4boxのバージョンによってはmuxが止まります。(mp4boxがraw importでこけます)理由はよくわからんのですが、とにかく最近のmp4boxを指定して、一度短い動画でチェックしてみてください。
その他
ハードウェアエンコにチェックを入れられないんだが…
QSVが使用不可だとそうなります。ハードウェアエンコの使用条件を確認してみてください。
vppてなに
Intel Media SDKでのフィルタリングです。x264の--vfみたいなもんです。Aviutlから受け取ったフレームに対してさらにリサイズなどフィルタをかけることができます。これらのVPP処理はIntelのGPUで処理され、それがQSVエンコーダに渡されるため、高速に動作します。が、処理品質は微妙なようです。
・リサイズ
・ノイズ除去
・インタレ解除(通常版、IT版(逆テレシネ))
・DetailEnhancer(ディテール・輪郭強調、unsharpっぽい?)
エンコ速度
以前、P67なんて、要るわけないでも書きましたが、QSVの処理能力にはまだまだ余裕がある状態です。なので、エンコ速度はデコードやフィルタリングの速度に左右されます。デコードやフィルタリングをなるべく軽くすることで、QSVの実力を発揮させてやることができます。
正直、QSVに画質は期待できないので、あまりフィルタとかかけず、ばんばんエンコさせてやるのに向いていると思います。
結局使えるの?
…あんま使えません。
高速化・CQPなど機能を増やしたのはいいんですが、やはり画質が厳しい(x264と比較すると)。アニメだと輪郭周りが気になって気になって以下略。
もちろん、かなり高速なので、その点はいいかなと。
個人的にはアニメは高画質であって欲しいので、今後もx264(時間かかるけど縮むので10bit)ですが、たまにエンコする実写の画質はあまり気にしてないので、実写をぱぱっと処理するのに使うかなあ…という感じ。
QSVEncC(おまけ)
sample_encodeはyuv rawファイルしか読めませんでした。
さすがに「そんなのってないよ」って感じで、ちょっと残念だったので、パイプ入力とYUV4mpeg2に対応させてQSVEncのコマンドライン版として作ってみました。コマンドラインの例は上に書いたような感じです。あとはQSVEncC -hとかからコマンドライン一覧を見てください。
avsを直接食えるようにする気はありません。
QSVEnc ダウンロード>>
以前の記事P67なんて、要るわけないと同条件での結果。151fps出てる。

動作中のスクリーンショット。右側のMFX(QSV回路のことっぽい)の使用率がそこそこ高いことがわかる。(16%でも高いと言える)

スポンサーサイト