+18去年(2015年)は自動フィールドシフトを高速化できず、まことに遺憾であった。執念深く高速化しようとは思っているわけで、やっとネタを思いついて、実装してみた。ところが、演算量が少し減るぐらいの話だったので、計っても全く分からない程度という情けない結果に終わった。演算量なんぞよりメモリアクセスを減らさないと速くならないようだ。メインはプリセットボタンの追加、コンパイルオプションの修正など。・「デフォルト」ボタンを追加した。設定をデフォルトに戻す。(HD)」ボタンを追加した。これがベストではないと思うけど参考程度に追加。そんなに誤爆はしない...と思う。「24fps固定」はこのフィルタが作られた当時主流だったSD向けで、あまりHDには向いていないような気がしている。・AVX2使用時に128bit境界またぎを減らしてわずかに高速化。AVX2命令では、256bit演算とか言いつつ、ただの128bit演算×2をする命令がほとんどになっている。shuffle系とかvpalignr命令の「これじゃない感」はなかなか。これを生かして上側128bitだけ電源を落として省電力化とかいう小細工をやっているようだが...。128bit境界をまたぐためにはやや遅めの命令を使わないといけない。これが減るよう工夫した。・afsvf.aufで、一部関数が遅くなっていた可能性があるのを修正。AVX/AVX2命令を含む関数は、/arch:AVXオプションをつけてコンパイルしないと遅くなることがある。プロジェクト全体に/arch:AVXをつけると、プラグイン全体がAVX非搭載のCPUでは動かなくなってしまうため、AVX/AVX2を使う関数は専用のファイルにまとめて、そのファイルだけ/arch:AVXをつけてコンパイルするようにしている。これをafsvf.aufのほうで、ある一つのファイル("afs_filter_avx2.cpp")で忘れてしまっていた。今回、AVX/AVX2を使う関数のあるファイルに、以下のようにして、コンパイル時に、/arch:AVXをつけたかどうかチェックするようにした。念のため、のつもりだったのだが、見事にひっかかったので気づくことができた。file.");#endif・その他、無駄な計算を減らしてわずかに高速化。一部の演算にMMX命令とかを使ってみた。自動フィールドシフトは遅いとか遅いとか、よく聞くので、さらに速くしたいものである。ところが、いまは完全にメモリの速度に律速されていて、これを打破する方法が思いつかない(というかやりつくした)ため、このままいくとまた今年も速くなりそうにない。YUY2フィルタモードとか、あるいは輝度だけ解析するモードとか、ともかく大きくSIMDコードを追加することになる更新をしないといけないかもしれない。2.28すこしメモリ関連の修正とか。共通]・出力スレッドの処理を少し高速化。・mux時の同期に問題がある場合があったのを修正。・音声エンコード速度より動画のエンコード速度が速くなる場合に、メモリ使用量が大きく膨れ上がっていたのを修正。N3150で音声エンコードをする場合とかだと起こり得た問題。動画のエンコード速度に音声エンコード速度がおいつけないと、映像・音声の同期をとるため、映像フレームをどんどんため込んでしまって際限なくメモリ使用量が増えてしまっていた。ちなみにCPUが高速なCore系CPUではこういうことはもともとほとんど発生しない。1440x1080をエンコードし、かつ音声エンコードを行った場合のメモリ使用量の推移。2.27では、時間とともにすごい勢いで増えて行ってしまう...。2.28ではだいぶよくなった。ついでに少し高速化している。145fps[QSVEncC]・perf-monitor-plotをpyqtgraphベースに変更。以前のmatplotlibベースより高速。PySide)が必要に。perf-monitor-plotは完全にわたし用の機能で、エンコード中にCPU使用率、GPU使用率、エンコード速度などをグラフで見る機能。わたしはこれ見ながら並列化の様子とかを確認してたけど、たぶんみなさんにとっては、特に役に立ったりはしない。6700Kでの1440x1080のエンコード。SAR比指定し忘れたあたりとか、インタレ解除してないとことか、あんま実用的なコマンドではないけど。※UVダウンサンプリングかけ忘れたのであげなおしました。>>OneDriveの調子がいまいちの時はミラー(dropbox)からどうぞ。QSVEncBenchmark.zipはベンチマーク用です。(約220MBと重いので注意)。run_benchmark.batをダブルクリックで実行です。QSVEncCのオプションについてはこちら。0このページのトップへNVEncCのオプションの説明NVEncCのオプションの説明です。2.01に合わせ更新。2.06に合わせ更新。2.08に合わせ更新。2.09に合わせ更新。3.00に合わせ更新。3.03に合わせ更新。3.06に合わせ更新。3.07に合わせ更新。3.08に合わせ更新。3.11に合わせ更新。3.13に合わせ更新。3.14に合わせ更新。3.17に合わせ更新。3.20に合わせ更新。続きを読む続きを閉じる-、--引数なしの場合は単体で効果を発揮。--(no-)xxxと付いている場合は、--no-xxxとすることで、--xxxと逆の効果を得る。"<outfilename.264>"同様にffmpegからパイプ渡し、なども可能。file>"としてAAC音声と多重化できます。file>"のように2段階のステップが必要です。同様にmkvttolnixに含まれるmkvmergeでmuxし、mkvに格納することもできます。[<int>]ハードウェアエンコの可否の表示。数字でDeviceIDを指定できる。省略した場合は"0"。[<int>]NVEncの使用可能なエンコード機能を表示する。数字でDeviceIDを指定できる。省略した場合は"0"。<int>NVEncで使用するDeviceIdを指定する。使用できるデバイスは、--check-deviceで確認できる。GPUがある場合、自動的に使用するGPUを選択する。Engineの使用率とGPUの使用率の取得には、x64版はNVMLライブラリ、x86版はnvidia-smi.exeを実行して取得している。Corporation\NVSMI\nvidia-smi.exe"にインストールされている。hevcエンコードするコーデックの指定。入力方法と拡張子NVEncの入力方法は下の表のとおり。入力フォーマットをしてしない場合は、拡張子で自動的に判定される。--y4m入力をy4m(YUV4MPEG2)形式に変更する。--avs入力ファイルをAvisynthで読み込む。--avi入力ファイルをaviとして読み込む。--vpy入力ファイルをVapourSynthで読み込む。decoderを使用して読み込む。ffmpegの対応するほとんどのコーデックを読み込み可能。decoderを使用して読み込む。デコードからエンコードまでを一貫してGPUで行うため高速。オプションでcuvid使用時にデコーダのモードを指定できるが、通常は特に指定せずに"--avhw"のみで問題ない。cuvidモードでデコードする。<string>入力フレームがインターレースかどうかと、そのフィールドオーダーを設定する。--vpp-deinterlaceや--vpp-afsによりNVEncC内でのインタレ解除を行ったり、そのままインタレ保持エンコードを行う。<int>,<int>,<int>,<int>左、上、右、下の切り落とし画素数。<float>入力フレームレートの設定。raw形式の場合は必須。<int>x<int>入力解像度の設定。raw形式の場合は必須。<int>x<int>出力解像度の設定。reader使用時のみ有効。入力解像度と異なる場合、自動的にデコード後、HWリサイズを行う。指定がない場合、入力解像度と同じになり、リサイズは行われない。エンコードモードのオプションデフォルトはCQP(固定量子化量)。(固定量子化量)CQP(固定量子化量)でエンコードを行う。<Iフレーム>:<Pフレーム>:<Bフレーム>のQP値を設定。なるように設定することをおすすめ。(高品質))ビットレートをkbps単位で指定してエンコードを行う。vbr2はvbrより高度な解析を行ってビットレート配分を行うが、やや遅い。10)出力ビット深度を設定。<string>エンコードするコーデックのLevelを指定する。指定しない場合は自動的に決定される。<string>エンコードするコーデックのプロファイルを指定する。指定しない場合は自動的に決定される。main444--losslessロスレス出力を行う。自動的にYUV444出力が行われる。performanceNVENCのプリセットを反映する。"自動"設定のパラメータに影響。<int>最大ビットレート(kbps単位)。<int>:<int>:<int>初期QP値を<Iフレーム>:<Pフレーム>:<Bフレーム>で設定する。ビットレート指定のエンコードモードを使用する際に、エンコード開始時に適用するQP値として指定される。動画の先頭部分で必要以上にビットレートが割り振られたり、逆に圧縮がかかりすぎてひどい画質になる場合など、動画の先頭部分の画質を調整したい場合に使用する。<int>:<int>:<int>最小QP値を<Iフレーム>:<Pフレーム>:<Bフレーム>で設定する。ビットレート指定のエンコードモード使用時のみ有効。設定したQP値より低いQP値は使用されなくなる。ビットレート指定モードなどで、静止画などの部分で過剰にビットレートが割り当てられることがあるのを抑制したりするのに使用する。<int>:<int>:<int>最大QP値を<Iフレーム>:<Pフレーム>:<Bフレーム>で設定する。ビットレート指定のエンコードモード使用時のみ有効。設定したQP値より高いQP値は使用されなくなる。指定したビットレートを超えてでも、動画のどんな部分でもある程度の品質を維持したい場合に使用する。<float>VBRモード使用時の目標品質を設定する。<int>lookaheadを有効にし、その対象範囲をフレーム数で指定する。(0-32)画質の向上に役立つとともに、適応的なI,Bフレーム挿入が有効になる。--no-i-apaptlookahead有効時の適応的なIフレーム挿入を無効化する。--no-b-apaptlookahead有効時の適応的なBフレーム挿入を無効化する。--strict-gop固定GOP長を強制する。<int>最大GOP長。HWエンコでは、この値が常に使用される。<int>連続Bフレーム数。<int>参照距離を設定する。NVEncではあまり増やしても品質は向上しない。--weightp重み付きPフレームを有効にする。--aqフレーム内(空間方向)の適応的量子化を有効にする。(デフォルト:オフ)--aq-temporalフレーム間(時間方向)の適応的量子化を有効にする。<int>AQ強度を指定する。