備忘録

趣味に生きるオタクの備忘録

Amatsukaze + QSVenc + Intel arc A750 (AV1エンコおためし編)

エンコ設定は一番下です。

まえおき

IntelディスクリートなグラボAシリーズが出てからもう1年近く経ったんですね。
akiba-pc.watch.impress.co.jp

手元の構成は完全にNVIDIA一色でして、Gigabyte/ASUSの普通のRTX 3060 Ti x2本と土壇場で安く購入できたMSIのRTX 3080 12Gbyte版 x1本です。

自分は激重なゲームもそんなにやる訳ではなく、一番重いのは原神の最高画質を4Kでやるくらい。しかも60FPS上限かつ3080だと半分ちょっと位で回せているみたいなので十分。その他の用途としては、AmatsukazeによるRTX 3060/3080を用いたNVencを走らせるくらいでした。


Radeon 6000番台はスルー、Geforce 4000番台は値段や12V HPWRやら、先立つものがなくスルーということでグラボはしばらく動かさないかなぁと思っていたのですが・・・
akiba-pc.watch.impress.co.jp
※今年2月の話です
ちょっとこういう特価が出てくると弱い()
A750の3D性能自体にはあまり興味はなくて、FEでコレクション性があるとか、そういった感じで興味を惹かれただけでした。

それから半年後・・・
pc.watch.impress.co.jp
クロシコからまさかのA750発売。台湾のメーカーのOEMっぽい ですが、円安やらあらゆる物の高騰が叫ばれる中でこの価格で未知のIntel arcが手に入るならラッキー。

玄人志向 AR-A750D6-E8GB/DF

発売日の0時にネット通販での戦争を勝ち抜き(ワンズさんありがとう)無事に届いたのでありました。

ガワはシンプルな2ファングラボですね。なお、値段もあり各種DPスロットやPCI-E端子のカバー類は一切付属しませんでした。

サクっと組み込みを実施。今回は、サブの割に3060Tiより補助電源が多いとして押し込んでいるので、ちょっと窮屈です。メインで見えているASUSのグラボはTUF-RTX3060TI-O8G-V2-GAMING。両方を全開で回さないので、850W電源でも十分(なハズ)です。
*1

今回の環境

HW

CPU:Intel Core i7 12700, PL2のみ無制限
CPU cooler : Deepcool AS500
M/B:AsRock H670 Steel Legend
Memory : CFD W4U3200CS-16G 16Gbytex2=32Gbyte, CL-tRCD-tRP-tRAS=22-22-22-74
SSD#0:CFD Gaming CSSD-M2B5GPG3VND
SSD#1:Micron Crusian CT500MX500SSD1 (AMT Temporary)
VGA#0:ASUS TUF-RTX3060TI-O8G-V2-GAMING
VGA#1 : 玄人志向 AR-A750D6-E8GB/DF 

OS

エディション Windows 11 Home
バージョン 22H2
OS ビルド 22621.2134
エクスペリエンス Windows Feature Experience Pack 1000.22659.1000.0

SW

Intel arc Driver : 31.0.101.4669
QSVenc : QSVEncC (x64) 7.48 (r3115)
Amatsukaze : 改造版 0.9.4.4

QSVencでハマったこと

A750の3D性能やらには期待していなかったのでQSVだけ試しています。
とりあえずAmatsukazeのエンコーダをNVencからQSVに変えてみたくなって、ハマった点をメモしてみました。
各々のPCの環境要因で色々と別な問題があると思いますので、QSVenc作者rigaya様のリポジトリを参照すると解決しそうです。

とても素晴らしいマニュアル・ドキュメントの整備があり役立ちました。ありがとうございます。

    • QSVencに設定できるオプション類:

https://github.com/rigaya/QSVEnc/blob/master/QSVEncC_Options.ja.md

    • QSVenc対応機能マトリクス:Codec: AV1 FFのところを見るです。

https://github.com/rigaya/QSVEnc/blob/master/GPUFeatures/QSVEnc_DG2_Arc_A380_Win.txt

1. QSVencが別なGPUを選択してしまう

エンコーダ追加オプションに、次だけ投入したときに遭遇。

--codec av1

出てくるエラーはこんな感じ。

GPU #1 (Intel Arc A750 Graphics) does not support AV1 interlaced encoding.
GPU #2 (Intel UHD Graphics 770) does not support AV1 encoding.
Failed to initialize encode session. : undeveloped feature.
AMT [error] Exception thrown at ProcessThread.hpp:233
Message: failed to write to stdin pipe
QSVEncC.exe finished with error!
AMT [error] Exception thrown at ProcessThread.hpp:93
Message: DataPumpThread error
AMT [error] ↓↓↓↓↓↓エンコーダ最後の出力↓↓↓↓↓↓
AMT [error] GPU #2 (Intel UHD Graphics 770) does not support AV1 encoding.
AMT [error] 
AMT [error] Failed to initialize encode session. : undeveloped feature.
AMT [error] 
AMT [error] 
AMT [error] QSVEncC.exe finished with error!
AMT [error] ↑↑↑↑↑↑エンコーダ最後の出力↑↑↑↑↑↑
AMT [error] Exception thrown at Encoder.hpp:134
Message: エンコーダ終了コード: 0xfffffffd

追加オプションに何も指定しない場合、GPUバイスはautoで選択されるようです。今回はどうもA750でAV1のインタレ保持を試そうとしてNG、Intel CPUの内蔵グラフィック(Intel UHD Graphics)に自動で落ちてAV1が非対応でNGになったようです。(autoっぽい挙動)
まず、今回使いたいGPUはA750なので固定化をしたいですので、ディスクリート側が選択されるように変更します。*2
コマンドラインからQSVencにオプションをつけて実行することで、QSVencが認識しているデバイス番号が取得できます。

QSVEncC_7.48_x64>QSVEncC64.exe --check-device
Device #1: Intel Arc A750 Graphics
Device #2: Intel UHD Graphics 770

自分の環境では、#1でした。ということで、エンコーダ追加オプションに 1 を追記します。

2. QSVencのオプション追加(FFモード指定)

エンコーダ追加オプションに、次だけ投入したときに遭遇。
※上記デバイス指定が正しくA750にデフォルト選択されていれば、codec指定のみで顕現します

--codec av1 --device 1

出てくるエラーはこんな感じ。

PG is not supported on this platform, switched to FF mode.
Interlaced encoding is not supported on current rate control mode.
AMT [error] Exception thrown at ProcessThread.hpp:233
Message: failed to write to stdin pipe
AMT [error] Exception thrown at ProcessThread.hpp:93
Message: DataPumpThread error
QSVEncC.exe finished with error!
AMT [error] ↓↓↓↓↓↓エンコーダ最後の出力↓↓↓↓↓↓
AMT [error] --------------------------------------------------------------------------------
AMT [error] PG is not supported on this platform, switched to FF mode.
AMT [error] Interlaced encoding is not supported on current rate control mode.
AMT [error] 
AMT [error] 
AMT [error] QSVEncC.exe finished with error!
AMT [error] ↑↑↑↑↑↑エンコーダ最後の出力↑↑↑↑↑↑
AMT [error] Exception thrown at Encoder.hpp:134
Message: エンコーダ終了コード: 0xfffffff1

PG/FFって何のことかと思い調べましたらPG=Processor Graphics、FF=Fixed Funcを指すようです。*3
先程と同様にコマンドラインからQSVencにおけるA750の対応機能を調べると、確かにAV1 FFのみあります。

QSVEncC_7.48_x64>QSVEncC64.exe --check-hw --device 1
Success: QuickSyncVideo (hw encoding) available
Supported Encode Codecs for device 1:
H.264/AVC FF
H.265/HEVC FF
VP9 FF
AV1 FF

おまけ:
内蔵グラフィックス(Intel UHD Graphics 770)では、PGモードもサポートしているようです。AV1の対応がなく、MPEG2が残っていますね。

QSVEncC_7.48_x64>QSVEncC64.exe --check-hw --device 2
Success: QuickSyncVideo (hw encoding) available
Supported Encode Codecs for device 2:
H.264/AVC PG
H.264/AVC FF
H.265/HEVC PG
H.265/HEVC FF
MPEG2 PG
MPEG2 FF
VP9 FF
3. 続:QSVencのオプション追加(インタレ解除)

ということでFFモードでA750回らないかなと思いましたが、これでも変わらず。

--codec av1 --device 1 --fixed-func

一方、PG/FFに関するメッセージは出なくなりました。ということで問題は1つ解決したようです。

Interlaced encoding is not supported on current rate control mode.
AMT [error] Exception thrown at ProcessThread.hpp:233
Message: failed to write to stdin pipe
AMT [error] Exception thrown at ProcessThread.hpp:93
Message: DataPumpThread error
QSVEncC.exe finished with error!
AMT [error] ↓↓↓↓↓↓エンコーダ最後の出力↓↓↓↓↓↓
AMT [error] E:/Amatsukaze_experiment/encode_temp/amt15597276/v0-0-0-main.raw
AMT [error] --------------------------------------------------------------------------------
AMT [error] Interlaced encoding is not supported on current rate control mode.
AMT [error] 
AMT [error] 
AMT [error] QSVEncC.exe finished with error!
AMT [error] ↑↑↑↑↑↑エンコーダ最後の出力↑↑↑↑↑↑
AMT [error] Exception thrown at Encoder.hpp:134
Message: エンコーダ終了コード: 0xfffffff1

インタレに関するErrorが出ているみたいなのですが、AV1がエンコード先なので特にインタレ保持をする理由はありません&A750でのインタレ保持は不可っぽいです。Amatsukazeに読み込むMPEG2のデータは基本60iのデータでしょうから、どうもインタレ保持になっている気がした(ちょっと推測込み)ので、オプションのインタレ解除を投入してみました。

とりあえずAV1エンコが回る設定

バイス指定+FF指定+インタレ解除 までをオプションに投げ込んだところで、とりあえずQSVencによるエンコードがAmatsukazeで走りました。パチパチ。
いわゆる初期状態としてここから色々とお好みの設定をかけていく感じになると思います。以下の実験では、HWデコーダの指定類は全てデフォルト、またフィルタも全てかけていない素の状態で確認しています。

エンコーダ追加オプション
--codec av1 --device 1 --fixed-func --vpp-deinterlace bob

なお、インタレ解除のbob(60i->60p)はnormal (60i->30p)でもOKでした。

AV1エンコーディングの際の速度 / GPU使用率 / 電力(GPU-Z読み)はこんな感じ。
なお、インタレ解除はbobなので速度は60fps動画基準で見ていいかなと思います(要審議)。

エンコ速度

終始370~400fpsを行ったり来たりでした。

GPU使用率(タスクマネージャ)

3Dが30%前後、Video Processingが70%前後で推移。

電力(GPU-Z)

ざっくり65W前後。補助電源が2本あるのでヒヤヒヤでしたが、この使い方なら大丈夫そうですね。

画質等については様々な見方があるので、言及は避けますが主観で見る限り非常に綺麗でした。ただし、思ったよりも出力サイズ&ビットレートが大きかったためデフォルトから設定を変える余地はありそうです。
出力Quality関係のパラメタの指定を始めると出力サイズとの兼ね合いになるので、こちらはこれから要研究です。

落ち着いた設定

なお、vpp-deinterlaceでインタレ解除するよりも、vpp-afsでインタレ解除する方が色々な設定ができて良さそうです。
こちらは好みによると思いますが、少なくとも次のエンコーダ追加オプションでAV1エンコードが完走することまでは確認済です。

--codec av1 --device 1 --fixed-func --vpp-afs preset=anime --icq 23

何回か試した感じ、vpp-afsのフィルタが入るとややGPU処理率が上がるようです。

QSVenc/Amatsukazeはじめとしたソフト類が開発整備されており、新しい機能も試しやすくなりました。感謝です。
ただし、Intel arc自体今のところ万人向けって感じでもなく、用途は選ぶやもしれません。AV1のハードウェアエンコード目的なら、A380含めてなくはない、かも。

*1:自分の環境では対応マザー等の制約によりPCI-Eのリンクは4.0 x4となりますので、x16の性能にはなりません。

*2:そもそも論内蔵グラフィックスを使わないなら、BIOSで内蔵GPUを無効化するのも手ですね。

*3:この辺を参照image.itmedia.co.jp