NVEnc 5.01

English version of changelog>>

Linuxで動かせるようにしてみたのと、要望のあった新しいフィルタ(--vpp-decimate)の追加など。

NVEncCのLinux対応



もともとは結構大変そうだったので断ったのだが、コミケの中止によりGW中にまとまった時間ができたので、対応してみることにした。まあ、需要はそんなにない気もするけど…。

とりあえずはGPU関連の情報が比較的入手しやすく、また更新が頻繁に行われているUbuntuで導入してみた。

Ubuntu環境は、R7 3700XにGTX1080を載せたマシンに、その辺に転がってた大昔のSSD (30GBしかないけど…)にUbuntuを入れて作ってみた。Win10とUbuntuの切り替えはUEFIからブートディスクを切り替える感じで(そのほうが単純だし、のちのちディスクを簡単に取り外しできるので)。

CPU Ryzen 7 3700X
コア 8C/16T
L3 32MB
CPUクーラー Noctua NH-D14+AM4リテンション
M/B Asrock X570 Steel Legend
RAM Corsair CMK16GX4M2B4000C19R
RAM Speed DDR4-3600, 2ch, 8GBx2
GPU GTX 1080 簡易水冷化版
SSD Plextor PX-128M3 128GB (Win10)
Intel X25-E 30GB (Ubuntu 19.10)
Intel 330 (120GB) (データ用)
ケース Antec P100
電源 Enermax EPM600AWT


いろいろ作業した結果、Windows版からは一部機能を落としてはいるものの、こんな感じで無事動作。

Ubuntu 19.10でのビルド方法はこちら。CUDAを使う関係で、やはりいろいろ手順が面倒なのは仕方ないかも…。

nvencc_20200507_ubuntu_1910.jpg

一応、Ubuntu 19.10だけではなくて、Ubuntu 18.04も試してみようということで、Ubuntu 18.04のほうはAWS上で環境を作ってテストしてみた。まあGPUインスタンスはお値段が高いので、環境作りとかビルドとかはt3a.microとかのお安いインスタンスでやっておいて、GPUのインスタンスはさっとテストしてすぐ終了する、という感じで。こちらも無事動作した。Ubuntu 18.04でのビルド方法はこちら。

あとは、毎回Linuxでのビルドをチェックするのも大変なので、自動的にチェックできるようにしてみた

まあ、Ubuntu以外のほかのLinux OSもチェックしたほうがいいのかもだけど、どれを試すの? みたいな話になるのでとりあえずまだやってない。少なくともgcc8以上が簡単に使えないとつらい。

Linux版の現状の問題点としては、PascalでYUV444のHWデコードができないところ。Windowsでは問題なくできるし、LinuxでもTuringではできるので、うーん?



NVEnc 5.01



[NVEncC]
・Linuxに対応。

・重複フレームを削除するフィルタを追加。 ( --vpp-decimate )
要望の反映。ffmpegにあるdecimateフィルタの簡易版で、とりあえず30p→24pができるように。

また、24fps化はこれまで--vpp-afs 24fps=true だけだったのが、--vpp-nnediや--vpp-yadifを--vpp-decimateと組み合わせることでも可能になったはずです。

・attachmentをコピーするオプションを追加。 ( --attachment-copy )
要望の反映。

・--check-featuresにhwデコードの情報を追加。

・yuv444→yv12/p010変換のマルチスレッド時のメモリアクセスエラーを修正。

・デコーダのエラー検出時に異常終了するようになっていなかったのを修正。

[NVEnc.auo]
・外部エンコーダ使用時に、音声エンコードを「同時」に行うと異常終了するのを修正。
ご指摘のあった問題の修正。



※ NVEnc 4.xx以前のプロファイルは設定しなおす必要があるかもしれません。
ダウンロード>>
ダウンロード (ミラー) >>
OneDriveの調子がいまいちの時はミラー(GDrive)からどうぞ。同じものです。

NVEncCのオプションについてはこちら。
NVEncCオプション一覧>

ソースはこちら>>


スポンサーサイト



コメントの投稿

非公開コメント

No title

メモリアクセス違反によるものと思われる不安定性があり、4.45以降はあきらめていたが、久しぶりに4.69と5.0を試してみたが上記不具合は治っているようです。
GT1080グラフィックカードのドライバーをアップデートしないと使用できないようだ。
なお、以前2つまでしか同時に変換できなかったが3つできるみたいだが、CPUコアの処理がボトルネックになり数が8-12コアくらいないと恩恵が得られないですね。
私のマシンは4コアしかないこともあり安定して動くかは確認していません。
残る問題はまれに音声エンコードの終了待ちでフリーズすることがあることですが、24fps化などにより映像と音声の長さが異なってしまうことが原因みたいです。
道津ソースを、同一条件で変換しても再現しないのは気になりますが、後ろにダミーフレームを設けておき、変換終了フレームを指定してやれば防げそうですね。

No title

5.00の時にdecimateの要望をした者です。30P>24P変換は期待通り動いております。ffmpeg(hevc_nvencとdecimateの組み合わせ)とnvenccでだいたい同じオプションにて比べると私の環境(RTX2070)でも圧倒的にnvenccの方が速い(概ね160fps対300fps)です。10bitエンコードだとさらに差が開く状況ですね。早速対応いただきましてありがとうございます。

No title

Linux対応のIssueを見たとき、まあ難しそうだよなと思ってそっとじした記憶がありますがまさか対応するとは思ってませんでした。Ubuntu 20.04でも動くといいですね。

No title

> decimate対応
無事、高速に動作しているとのことでよかったです!

> Linux対応
> まあ難しそうだよなと思ってそっとじした
たしかに結構改変が必要で大変でした。もともとWindowsべったりなコードでしたからねえ…。

Windows/Linuxの違いとVisualC++/gccの違いの両方を吸収しないといけないので、なかなか時間がかかりました。

本当はWindowsでgccとかもできるようにしようかと一瞬考えたのですが、余計ややこしくなり、テストが大変になるだけだと思ったのでやめました。

No title

decimateオプションを使ってエンコードすると入力ファイルによっては必ずエラーが発生するものがあります。エラーメッセージは
[mp4 @ 000001de42a42dc0] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 21040640 >= 15782784
といった具合です。
この際、エンコードオプションはこんな具合です。
NVEncC64 --avhw -i in.ts -c hevc --cqp 22:25:28 -b 3 --aq --output-depth 10 --input-analyze 60 --lookahead 30 --audio-copy --vpp-decimate --vpp-smooth -o out.mkv
decimateを外すと正常に終了します。
なお、ここで生成されたファイルをffmpegでremuxしようとするとこのような表示が出ます。
[mp4 @ 000001de94e3a880] Non-monotonous DTS in output stream 0:0; previous: 0, current: 0; changing to 1. This may result in incorrect timestamps in the output file.
decimateをつけていても正常終了するファイルもあり理由がよくわからないのですが、タイムスタンプ関係のエラーでしょうか。

Re: No title

ご推察の通り、タイムスタンプ関係のエラーと思われます。

decimateはcycle内のフレームのタイムスタンプを使って、出力フレームのタイムスタンプを再計算するので、そこで生じているものと思います。完全に入力ファイル依存なので、decimateをつけていても正常終了するのは、タイムスタンプが正常に得られているためと思われます。

それにしてもこんなに大きくずれるというのは…。(21040640 >= 15782784)

音声トラックについて

教えてほしいことがあります。

ある動画に2つの音声が含まれているものをエンコードする場合、
1トラックと2トラックを逆に格納するか、2トラックを強制優先に
する方法はあるでしょうか?

一旦バラバラにしてmuxしなければならないでしょうか?

Re: 音声トラックについて

現状ではそういった指定はできないので、バラバラにしてmuxしなければならないと思います。

同様の要望が別途来ているので、時間があればデフォルトストリームの指定(強制優先)は実装しようと思います。
https://github.com/rigaya/NVEnc/issues/226

Re: 音声トラックについて

お返事ありがとうございます。
実装を楽しみにします。

利用可能のはず?

教えていただきたいのですが

NVENCが利用可能か確認 [ダブルクリック]
を実行したときには利用可能と出ますが(以下ログ)

NVEncC (x86) 5.01 (r1507) by rigaya, May 7 2020 20:16:38 (VC 1900/Win/avx2)
[NVENC API v9.1, CUDA 8.0]
reader: raw, y4m, avi, avs, vpy, avsw, avhw [H.264/AVC, H.265/HEVC, MPEG2, VP8, VP9, VC-1, MPEG1, MPEG4]
InitCuda: device #0.

Checking Environment Info...
NVEncC (x86) 5.01 (r1507) by rigaya, May 7 2020 20:16:38 (VC 1900/Win/avx2)
OS Version Windows 10 x64 (18362)
CPU Intel Core i5-8400 @ 2.80GHz [TB: 3.90GHz] (6C/6T)
cuInit: Success.
cuvidInit: Success.
InitCuda: Success.
cuDeviceGetCount: Success.
gpuinfo: checking for device #0.
gpuinfo: cuDeviceGet(0): success
gpuinfo: cuDeviceGetName(0): GeForce GTX 1050 Ti
gpuinfo: cudaDeviceGetAttribute: CUDA 6.1
gpuinfo: PCIBusId: 0000:01:00.0
gpuinfo: NV Driver version: 2147483647.
gpuinfo: CUDA Driver version: 10010.
gpuinfo: using cuda schedule mode: auto.
gpuinfo: cuCtxCreate: Success.
gpuinfo: cuCtxPopCurrent: Success.
gpuinfo: cuvidCtxLockCreate: Success.
nvenc : Loaded nvEncodeAPI.dll.
nvenc : nvEncodeAPICreateInstance(APIVer=0x71020009): Success.
nvenc : Error on nvEncOpenEncodeSessionEx: 15 (NVENC indicates that an invalid struct version was used by the client)
nvenc : Failed to create instance of NvEncOpenEncodeSessionEx(device_type=NV_ENC_DEVICE_TYPE_CUDA), please consider updating your GPU driver.
gpuinfo: Failed to init encoder session.
gpuinfo: Closing device #0: GeForce GTX 1050 Ti...
gpuinfo: Closing Encoder...
gpuinfo: Closed Encoder.
gpuinfo: Closed cuvid Ctx Lock...
gpuinfo: Closed cuvid Ctx Lock.
gpuinfo: Closed CUDA Context...
gpuinfo: Closed CUDA Context.
gpuinfo: Closed device #0: GeForce GTX 1050 Ti.
No GPU found suitable for NVEnc Encoding.
Failed to initialize CUDA.
Closed EncodeStatus.
Closing perf monitor...
Closing logger...
NVENCは利用可能です。
続行するには何かキーを押してください . . .
(以上ログ)


拡張NVEnc出力の欄ではロゴがカラーではなく白黒であり利用不可となってしまっているようです
事実出力をしようとするとaviutl が固まり動かなくなってしまいます






Re: 利用可能のはず?

ログにも「please consider updating your GPU driver.」とございますように、このエラーは多くの場合、GPUのドライバが古いために発生するものです。

現状少なくともドライバの436.15以降である必要がありますので、ドライバのバージョンを確認いただき、必要であれば更新を行って再度お試しください。

Re: 利用可能のはず?

GPUIドライバー更新で動くようになりました、ありがとうございます!!
プロフィール

rigaya

Author:rigaya
アニメとか見たり、エンコードしたり。
連絡先: rigaya34589@live.jp
github twitter

最新記事
最新コメント
カテゴリ
月別アーカイブ
カウンター
検索フォーム
いろいろ
公開中のAviutlプラグインとかのダウンロード

○Aviutl 出力プラグイン
x264guiEx 3.xx
- x264を使用したH264出力
- x264guiExの導入紹介動画>
- x264guiExの導入
- x264guiExのエラーと対処方法>
- x264.exeはこちら>

x265guiEx
- x265を使用したH.265/HEVC出力
- x265guiExの導入>
- x265.exeはこちら>

QSVEnc + QSVEncC
- QuickSyncVideoによるHWエンコード
- QSVEnc 導入/使用方法>
- QSVEncCオプション一覧>

NVEnc + NVEncC
- NVIDIAのNVEncによるHWエンコード
- NVEnc 導入/使用方法>
- NVEncCオプション一覧>

VCEEnc + VCEEncC
- AMDのVCE/VCNによるHWエンコード
- VCEEnc 導入/使用方法>
- VCEEncCオプション一覧>

svtAV1guiEx
- SVT-AV1によるAV1出力
- svtAV1guiExの導入>
- SVT-AV1単体はこちら>

VVenCguiEx
- VVenCによるVVC出力
- VVenCguiExの導入>

ffmpegOut
- ffmpegを使用した出力
- ffmpegOutの導入>


○Aviutl フィルタプラグイン
自動フィールドシフト (ミラー)
- SSE2~AVX512による高速化版
- オリジナル: aji様

clfilters 
- OpenCLベースの複数のGPUフィルタ集
- 対応フィルタの一覧等はこちら

エッジレベル調整MT (ミラー)
- エッジレベル調整の並列化/高速化
- SSE2~AVX512対応
- オリジナル: まじぽか太郎様

バンディング低減MT (ミラー)
- SSE2~AVX512による高速化版
- オリジナル: まじぽか太郎様

PMD_MT
- SSE2~AVX512による高速化版
- オリジナル: スレ48≫989氏

透過性ロゴ (ミラー)
- SSE2~FMA3によるSIMD版
- オリジナル: MakKi氏

AviutlColor (ミラー)
- BT.2020nc向け色変換プラグイン
- BT.709/BT.601向けも同梱

○その他
Amatsukaze改造版
- AmatsukazeのAV1対応版

x264afs (ミラー)
- x264のafs対応版

aui_indexer (ミラー使い方>)
- lsmashinput.aui/m2v.auiの
 インデックス事前・一括生成

auc_export (ミラー使い方>)
- Aviutl Controlの
 エクスポートプラグイン版
 エクスポートをコマンドから

aup_reseter (ミラー)
- aupプロジェクトファイルの
 終了フラグを一括リセット

CheckBitrate (ミラー, 使い方, ソース)
- ビットレート分布の分析(HEVC対応)

チャプター変換 (使い方>)
- nero/appleチャプター形式変換

エッジレベル調整 (avisynth)
- Avisynth用エッジレベル調整

メモリ・キャッシュ速度測定
- スレッド数を変えて測定
- これまでの測定結果はこちら

○ビルドしたものとか
L-SMASH (ミラー)
x264 (ミラー)
x265 (ミラー)
SVT-AV1 (ミラー)

○その他
サンプル動画
その他

○読みもの (ミラー)
Aviutl/x264guiExの色変換
動画関連ダウンロードリンク集
簡易インストーラの概要

○更新停止・公開終了
改造版x264gui
x264guiEx 0.xx
RSSリンクの表示
リンク
QRコード
QR