GRドライバ445.87
GTX1080Ti
i7 7700K
10pro1809
RAM64GB
環境で5.08から5.11に上書きしたらKP41頻発するようになったので一旦5.08に戻しました
何かしら対応策があればよろしくお願いします
いつもお世話になっております。
`--output_res` と `--vpp-pad` を併用するとリサイズ後にパディングが挿入されますが、これをリサイズ前に挿入することはできないでしょうか。
5.02から5.11に上げたところNVEncCがエラーを起こすようになりました。
環境
Win 10Pro 1909
NVドライバ: 451.48
CPU: i7 7700T
RAM: 32G
同じ動画ファイルに対し常に同じエラーでは無く、また正常終了する場合もあります。5.11から順に下げていったところ、5.07でエラーが発生しなくなりました。
エラー1
Error cudaEventSynchronize: 719 (cudaErrorLaunchFailure).22, GPU 62%, VE 99%
エラー2
cspconv: error at cudaMemcpy2DAsync (convertCspFromYV12(yv12(16bit) -> p010)): unspecified launch failure.
Error while running filter "cspconv".
Error cudaEventSynchronize: 719 (cudaErrorLaunchFailure).
エラー3
cspconv: error at convertYBitDepth(nv12 -> yv12(16bit)): unspecified launch failure.
Error while running filter "cspconv".
> KP41
手元では5.11でも安定して動作しているので、対策が浮かばない状況です。違いとしてはGPUのドライバなどでしょうか…。
こちらの環境は下記のとおりです。
Win10 x64 1909
RTX2070/GTX1060
GPUドライバ451.67
> リサイズ前のパディング
フィルタ適用順は固定のため、リサイズ前にはパディングは適用できません。
> たーぼ様
とりあえず、いろいろなオプションで適当にエンコードさせたりして試していますが、残念ながらこうした問題は再現できていません…。また5.07と5.08ではほとんど差異がなく、思い当たる点がありません。
どのようなGPUで、どのようなオプションで実行されていますでしょうか。ログにいろいろな情報が出ているので、ログをすべてそのまま張り付けていただけると幸いです。
設定ファイルstgが古いままでは?
rigaya様
お手数おかけします。
> どのようなGPUで、どのようなオプションで実行されていますでしょうか。ログにいろいろな情報が出ているので、ログをすべてそのまま張り付けていただけると幸いです。
NVドライバは最新の451.67に上げて、5.11のNVEncCを実行したときのログです。エラー2のパターンではexeが終了せずに固まります。エラー1と3の場合はエラーコードが出力されて終了します。
D:\TVRec>C:\TV\AviUtil\exe_files\NVEncC\x64\NVEncC64.exe -i "D:\TVRec\やはり俺の青春ラブコメはまちがっている。完 ♯1[字] [TBS1] 2020年07月09日 25時58分00秒-dec (TBS1).ts" -o "M:\TVRec\やはり俺の青春ラブコメはまちがっている。完 ♯1[字] [TBS1]-nvenc24.mp4" -c hevc --preset quality --vbrhq 0 --sar 4:3 --vbr-quality 24 --lookahead 32 --gop-len auto --weightp --interlace auto --audio-copy --profile main10 --bref-mode each --level 6 --output-depth 10 -b 3 --vpp-afs top=8,bottom=8,left=16,right=16,method_switch=91,coeff_shift=191,thre_shift=447,thre_deint=47,thre_motion_y=111,thre_motion_c=223,level=0,shift=true,drop=true,smooth=true,24fps=false,tune=false,rff=true,log=false --vpp-delogo "C:\TV\AviUtil\TBS1 1440x1080 20200403.lgd",auto_fade=true,auto_nr=true,nr_value=3,nr_area=1 --vpp-knn radius=2,strength=0.02,lerp=0.20,th_lerp=0.80 --vpp-pmd apply_count=5,strength=15,threshold=200 --vpp-unsharp radius=2,weight=0.2,threshold=10 --vpp-edgelevel strength=2,threshold=20,black=0,white=0,black=1,white=1
--------------------------------------------------------------------------------
M:\TVRec\やはり俺の青春ラブコメはまちがっている。完 ♯1[字] [TBS1]-nvenc24.mp4
--------------------------------------------------------------------------------
weighted prediction with B frames unsupported.
NVEncC (x64) 5.09 (r1590) by rigaya, Jul 5 2020 16:53:44 (VC 1926/Win/avx2)
OS Version Windows 10 x64 (18363)
CPU Intel Core i7-7700T @ 2.90GHz [TB: 3.60GHz] (4C/8T)
GPU #0: GeForce RTX 2070 SUPER (2560 cores, 1815 MHz)[PCIe3x16][451.67]
NVENC / CUDA NVENC API 9.1, CUDA 11.0, schedule mode: auto
Input Buffers CUDA, 44 frames
Input Info avcuvid: MPEG2, 1440x1080, 30000/1001 fps
Vpp Filters cspconv(nv12 -> yv12(16bit))
delgo:TBS1 1440x1080 20200403, auto_fade, auto_nr, nr_value=3, nr_area=1
afs: clip(T 8, B 8, L 16, R 16), switch 91, coeff_shift 191
thre(shift 447, deint 47, Ymotion 111, Cmotion 223)
level 0, shift on, drop on, smooth on, force24 off
tune off, tb_order 1(tff), rff on, timecode off, log off
denoise(knn): radius 2, strength 0.02, lerp 0.20
th_weight 0.01, th_lerp 0.80
denoise(pmd): strength 15, threshold 200, apply 5, exp 1
unsharp: radius 2, weight 0.2, threshold 10.0
edgelevel: strength 2.0, threshold 20.0, black 1.0, white 1.0
cspconv(yv12(16bit) -> p010)
Output Info H.265/HEVC main10 @ Level 6
1440x1080p 4:3 29.970fps (30000/1001fps)
avwriter: hevc, aac => mp4
Encoder Preset quality
Rate Control VBRHQ
Bitrate 0 kbps (Max: 57600 kbps)
Target Quality 24.00
Initial QP I:20 P:23 B:25
VBV buf size auto
Lookahead on, 32 frames, Adaptive I, B Insert
GOP length 300 frames
B frames 3 frames [ref mode: each]
Ref frames 3 frames, MultiRef L0:auto L1:auto
AQ off
CU max / min auto / auto
Others mv:auto
cspconv: error at convertYBitDepth(nv12 -> yv12(16bit)): unspecified launch failure.
Error while running filter "cspconv".
5.09から5.11に更新したらプリセットのH.264 ビットレート指定 高画質とH.264 品質指定とHEVC ビットレート指定 高画質のモードとHEVC 品質指定(10bit)とHEVC 品質指定がVBRでなくCQPになっています。手動で変えれば済むのですが今までデフォルトでVBRになっていたため修正できればお願いいたします。
rigaya様
> また5.07と5.08ではほとんど差異がなく、思い当たる点がありません。
追試をしたところ5.07でもエラーが発生しました。誤った情報を提示してすいませんでした。
5.06v2も試しました。こちらは20回ほど実行してみましたが、エラーは発生していません。
> たーぼ 様
情報ありがとうございます。こちらでもどうやら5.06→5.07の間で発生するようになったところまでわかりました。ただ、非常にまれにしか発生しないため、再現条件の特定と原因の究明がはかどっていません。
5.06→5.07で、vpp-knn/vpp-pmd/vpp-edgelevelのコードを少し変えたのが原因かもしれませんが、5.07だとこれらを外してvpp-afs/vpp-delogoだけでもエラーが発生したりとかなり謎な状況です。
もう少し調べてみます。原因がわかるとよいのですが…。
GitHubのオプションリストには--preset のP1がquality相当でP7がperformance相当と書かれているのですが、エンコーダーのログ表示だと逆になってます。(P1と指定するとEncoder Presetがperformanceと表示される)
エンコーダーの挙動がおかしいのかオプションリストの書き間違いか分からないのですが一応報告させていただきます…
> 5.06→5.07で、vpp-knn/vpp-pmd/vpp-edgelevelのコードを少し変えたのが原因かもしれませんが、5.07だとこれらを外してvpp-afs/vpp-delogoだけでもエラーが発生したりとかなり謎な状況です。
5.06でも発生箇所が異なりますが、エラーが発生しました。発生頻度は5.07以降に比べると低いようです。
delogo: error at delogo_uv_list(yv12(16bit)): unspecified launch failure.%
Error while running filter "delogo".
Error cudaEventSynchronize: 719 (cudaErrorLaunchFailure).
> vpp-afs/vpp-delogoだけでもエラーが発生したりとかなり謎な状況です。
5.11でvpp-afsの代わりにvpp-nnediにするとエラーが発生しないようです。あんまり回数試せてないので、頻度が低いだけかもしれませんが。
いつもお世話になっております。
ffmpegスレで気になる話があったため調べてみたところ、
「HEVCの --bref-mode each って動作してるんだろうか?」
という疑問が出てきましたので報告・提案等です。
(NVIDIA持ちではないので自前検証はできていません)
■概要
〇ffmpegでの挙動を見ると、Turing機でも
NV_ENC_CAPS_SUPPORT_BFRAME_REF_MODE が、
1(each) ではなく 2(only middle) を
返す事例があるように見える。
(つまりeachをサポートしていないと言われる?
仕様?ドライバの問題?ffmpeg側のバグやビルド条件の問題?)
〇ffmpegではeach指定時に NV_ENC_CAPS_SUPPORT_BFRAME_REF_MODE が
1(each)を返しているかどうかチェックしているが、
NVEncCではチェックをしていないように見える。
■詳細リンク
ffmpegならこちらへ 4
https://egg.5ch.net/test/read.cgi/software/1555776689/881-■疑問
1.実際のところ、NV_ENC_CAPS_SUPPORT_BFRAME_REF_MODE は
Turing機でどちらの値を返しているのか。(each?middle?)
2.each ではなく middle が返されていた場合、
それは仕様なのか、それともドライバのバグ(?)なのか。
(これはNVIDIAに聞かないとなんとも言えませんが)
3.仮に middle が返されていた場合、それを無視して
useBFramesAsRef に NV_ENC_BFRAME_REF_MODE_EACH を指定した場合、
どういう挙動になるのか。
(警告やエラーになるのか、ちゃんとeachな動作をするのか
middle相当の動作になるのか、disabled相当になるのか。
https://mevius.5ch.net/test/read.cgi/avi/1551446228/865 を見る限りでは、disabledとeachで違いが出ているので
なんらかの動作はしているはず・・・。
eachとmiddleの比較は見つからず。)
■提案
1.--check-featuresで、複数の値を取りうる
NV_ENC_CAPS_SUPPORT_FIELD_ENCODING
NV_ENC_CAPS_SUPPORT_MEONLY_MODE
NV_ENC_CAPS_SUPPORT_BFRAME_REF_MODE
については「yes/no」ではなく、
数値(できれば意味も)を返すようにすると良いと思いました。
例:NV_ENC_CAPS_SUPPORT_BFRAME_REF_MODEの場合
0(not supported)
1(each)
2(only middle)
2.nvEncodeAPI.hの記述によるとeachは(現状では)H.264では
サポートされないとあるので、NVEncC_Options.ja.mdの
--bref-modeのeachの説明にもその旨の記述があると良いと思いました。
3.調査結果次第かもしれませんが、NVEncCでも
・each指定時にNV_ENC_CAPS_SUPPORT_BFRAME_REF_MODEが
1(each)を返しているかどうか
などのチェックを追加しておくと
ユーザにとってもわかりやすそうだと思いました。
>2020-07-18(13:32)
次回修正したいと思います。
> RXF91 様
ご指摘ありがとうございます、修正しました。
https://github.com/rigaya/NVEnc/blob/master/NVEncC_Options.en.md#-u---preset> たーぼ様
いろいろお試しいただき、誠にありがとうございます。
私の方でも今日一日中エンコードし続け、複数のパターンでエラーの傾向を探っておりました。現時点ではどうもvpp-delogoのauto_nr/auto_fade機能周りの不具合によるものと推定しており、auto_nr/auto_fadeを両方オフにすることにより、エラーは発生しなくなると考えています。
auto_nr/auto_fade機能の実装当初からの問題のようで、おっしゃるように5.06以前でも発生しうる問題です。
具体的にどこが問題なのかはまだつかめていません…。コードを書いたのはだいぶ前なので、思い出しながら修正できるか調べてみようと思います。
こんにちは。ドキュメントの修正ありがとうございました。
質問なのですが、固定品質モードにするために--vbr 0を指定すると自動で最高ビットレートが11520Kbps(1920x1080/24fpsのソース入力時)になるのですが、「VBRモードの一部なので、--max-bitrateを指定する必要がある」、という認識で大丈夫でしょうか?
固定品質というと、特別な操作をしないとビットレートの制限は決められないというイメージがあるので…
> Tac 様
HEVCの--bref-mode eachについて
--check-featuresのルーチンを更新して、数値で取れるようにしてみました。
https://github.com/rigaya/NVEnc/commit/7c690d361f17fc9c5a9f3e5bf343bc04276341c2実際にTuringのNV_ENC_CAPS_SUPPORT_BFRAME_REF_MODE を確認するとこんな感じです。HEVCでは、eachもonly middleもサポートされているみたいですね。一方、H.264はonly middleだけのようです。
https://github.com/rigaya/NVEnc/blob/master/GPUFeatures/rtx2070.txtちなみにPascalでは下記のようになります。
https://github.com/rigaya/NVEnc/blob/master/GPUFeatures/gtx1060.txt次のバージョンからは、ご提案いただいたように、eachとonly middleの違いを考慮して、チェックするようにする予定です。(実装済み)
https://github.com/rigaya/NVEnc/commit/35005e888271396ecf5b4b6e459c843ef351114f> RXF91 様
おっしゃるように、固定品質モードでもVBRモードの一部なので、最大ビットレートを指定すると効き目があります。指定が必須というわけではありませんが、NVEncでは、H.264/HEVCのLevelの上限値との整合を保つために可能な限り設定するようにしています。
https://en.wikipedia.org/wiki/High_Efficiency_Video_Coding#Tiers_and_levels基本的には、最大ビットレートの指定は特に意識する必要はありません。ご指摘のように最大ビットレートの指定のない場合には、解像度やフレームレート、refの設定値等から想定されるH.264/HEVCのLevelに応じた最大ビットレートの96%を自動設定するようにしています。
より大きなビットレートでも構わない場合は明示的な指定が必要です。
> rigaya様
対応ありがとうございます。
内容を見て納得しました。
NV_ENC_CAPS_SUPPORT_BFRAME_REF_MODEの値って、論理和が返るんですね・・・。
「0か1か2」が返るものだと思い込んでました。
ffmpegでもそう考えてしまったようで、eachのサポート状況を
「ret != 1」で判定してしまってるからおかしくなると。
https://github.com/FFmpeg/FFmpeg/blob/master/libavcodec/nvenc.c#L427
後でffmpeg側に報告してみようと思います。
蛇足ながら追記:報告しました。
#8809 (hevc_nvenc / b_ref_mode each is not working) – FFmpeg
https://trac.ffmpeg.org/ticket/8809
こんにちは。
複数トラックのオーディオの取り扱いについて質問があります。
インプットする動画に合計3つの音声トラックが存在し、第1トラックは不要、第2トラックはエンコード無し、第3トラックはAACでエンコードしてアウトプットしたかったので
--audio-copy 2 --audio-codec 3?aac --audio-bitrate 256
と指定したところエンコードされていない第1・第2トラックとAACにエンコードされた第3トラックが含まれた動画が出来上がりました。
希望した挙動(第1トラックはカット)にするにはどうコマンドを指定すればよろしいでしょうか…
> たーぼ 様
引き続き、vpp-delogoのauto_fadeの問題点を調べていましたが、申し訳ありませんが、修正の見通しが立たない状況です。
残念ながらデバッガなどを使用するとエラーが発生しないことなどから、エラーの原因を特定できず、またコード上問題ありそうな箇所が見つかっておらず、現状原因を特定することができていません。
> Tac 様
NVEnc 5.12でeachとonly middleの違いを考慮して、チェックするようにしました。
> RXF91 様
--audio-copy 2 --audio-codec 3?aac --audio-bitrate 3?256
とすると意図した動作になるかと思います。
ありがとうございます。意図した動作となりなした。
> 引き続き、vpp-delogoのauto_fadeの問題点を調べていましたが、申し訳ありませんが、修正の見通しが立たない状況です。
調査いただきありがとうございます。
てきとうな番組を録画して試しましたが、エラーが発生する場合でも何回か繰り返すと正常終了するので傾向が分かりません。
なんとなくエラー頻度の高い番組がありそうなのと、エラーコードを返す場合はエンコード終了間際でエラー、固まる場合はエンコードの前半で起こる、といったぐらいです。
これまで報告が無かったところをみると利用者は少なそうなので、優先度を下げて他の改善の方に注力なさって下さい。