[共通]・qpmin/qpmaxを指定すると落ちてしまう問題を修正。[QSVEncC]・x64版で--check-environmentを使用すると、落ちてしまう問題を修正。・ベンチマーク時に測定する品質設定の対象を変更できるように。またデフォルトを「すべて」でなく「1,4,7」に変更。結構時間がかかるし、目安としては1,4,7だけで十分かなと。これを変更したい場合は、--bench-qualityで数値で指定する。
--bench-quality allでこれまで通り1~7まですべての計測を行う。--bench-quality 4,7とかすれば、品質4と7について計測する。
・パフォーマンス分析を行うオプションを追加。これはもともと、開発用(高速化)に作成した機能。正直開発用以外には役には立たないとは思う。
--perf-monitor
パフォーマンスモニタリングを行い、結果をcsvファイルに出力する。
・音声エンコード時の速度を大幅に改善。(Windowsのみ)前回、
音声エンコードすると遅いかも?という話をしたやつ。
QSVEncCの音声エンコード時の高速化
音声エンコードをしている時、QSVEncC内のスレッドの役割分担はこんな感じだった。

この状態で、エンコードスレッドが飽和していて遅い原因になってた。
しょうがないので、エンコードスレッドの「映像フレーム投入・回収出力部分」と「出力・音声エンコード部分」の間に適当にキューを挟んで切り離し、「出力・音声エンコード部分」部分を別のスレッドに行わせるようにした。

まあいわゆるパイプライン並列というやつで、どうせCPUは遊んでいるのだから、ひとつのスレッドにやらせていたものを分けてしまって同時にやらせるようにすれば速くなるでしょ、という考え。
高速化の結果
環境1:
Win 8.1 x64
Core i7 6700K (4C/8T) @ 4.3GHz
DDR4-3200, 2ch, 16GB
4274ドライバ
環境2:
Win 10 x64
Celeron N3150 (4C/4T) @ 2.06GHz
DDR3-1600, 2ch, 8GB
4256ドライバ
共通:
QSVEncC 2.21 x86
入力: MPEG2 1440x1080 29.97fps
--cqp 24:26:27
--audio-copy / --audio-codec aac
測定結果:
| audio-copy | audio-codec aac |
---|
高速化前 | 高速化後 | 高速化前 | 高速化後 |
---|
Core i7 6700K | 369fps | 373fps | 273fps | 368fps |
---|
Celeron N3150 | 146fps | 182fps | 82fps | 134fps |
---|
i7 6700Kでは、音声をコピーするだけの時と変わらない速度が出るようになった。N3150でもかなり高速化したけど、こっちは音声をコピーするだけの時もだいぶ速くなったので、まだそれなりに差がある。
実際どうなってんの?
N3150でどうなっているか、もう少し細かく見てみる。
まず高速化前。80fps前後。

CPU使用率などの様子を、リアルタイムにグラフにしてみると、

こんな感じ。enc speed (fps)はだいたい80fps前後をうろうろしていて、enc threadのCPU使用率が25%(4コアのN3150では1スレッドの上限)に達している。
今度は高速化後。130fps前後と結構速くなった。

CPU使用率などの様子を、リアルタイムにグラフにしてみると、

enc thread以外にもout threadができて、動作しているのがわかる。ただ、両方とも25%近くに達していて、余裕があるわけではなさそう。enc speed (fps)も80fps前後と170fps前後を行ったり来たりしている。音声エンコードをすると音声コピーと比べて遅くなっているし、高速化できたとはいっても、やはりCPU側の処理がまだボトルネックになってそう。
というわけで、パイプライン並列で音声エンコード時も高速に動作するようにした。正直音声エンコードが遅いというのは意外だった。まあ、動画の処理速度が異常に高速なので、音声処理もそれに見合うだけ高速に行わないといけない。
パイプライン化は結構面倒だけど、それなりに効果があって、たぶんCore系CPUのようにシングルスレッドの強いCPUなら、音声コピーの時と似たような速度でエンコードできるようになったと思う。
N3150のようにシングルスレッドの弱いCPUでも、かなりの高速化にはなったが、これでもまだCPU側の処理が足を引っ張っている感じみたい。QSVEncCのCPU使用率はまだ50%強なので、さらにパイプラインの段数を増やしてやれば(つまり音声処理とmuxを分けるとか、音声エンコードとデコードを分けるとか、そういうの)、さらに速くなるのだろうけど、さすがにコードを書くのが辛いので勘弁してほしいところ。
てか、シングルスレッドが強ければそんな心配はしなくていいわけで、やっぱりシングルスレッドの弱いコアを集めりゃ速いなんてのは幻想で、実際にはかなりつらいってことが実感できる。
QSVEnc ダウンロード>>ダウンロード (ミラー) >>OneDriveの調子がいまいちの時はミラー(dropbox)からどうぞ。同じものです。QSVEncBenchmark.zipはベンチマーク用です。(約220MBと重いので注意)。run_benchmark.batをダブルクリックで実行です。
QSVEncCのオプションについてはこちら。
QSVEncCオプション一覧>