すたいるのメモ帳ブログ

主にOBS Studioの事。たまに違う事も書くかも。

OBS の NVENC について

OBS Studioに搭載されているNVENCは、Kepler以降のアーキテクチャーを採用するNVIDIA GPU (GeForce GTX 600番台以降) を搭載したWindows PCで利用出来ます。
OBSを使用する事によって、ShadowPlay(Shere)より画面を凝って配信出来ます!
この記事ではOBS Studioに搭載されているNVENCに関してのメモ記事となります。
※内容は「OBSのNVENCについて」のままです。(移転しました)

はじめに

この記事を作成する為に使用したPCスペック

Windows 10 Pro 64bit(21H2) / Core i7 11700k / 32GB / GTX 1660 Ti

macOS環境 / Linux環境

-macOS
NVIDIAmacOS上で動作するためのメカニズムを提供していないので利用出来ません。
macOSの場合はVideoToolboxで実装されているQuickSynkが出力モード「詳細」で利用する事が出来ます。(もし使う場合は「限界ビットレート」にチェックをおすすめ)

-Linux
使ってないので、情報収集中。
バージョン 23.0からはVAAPIエンコードのサポートが追加。(x264の代わりにIntelのQuick Sync VideoやAMDのVideo Coding Engineなどの特定のハードウェアエンコーダを使用可)

AMDグラフィックボードをお使いの方向けの情報

著者にはAMD環境がない為記事作成が出来ないのですが、AMDのグラフィックボード向けのハードウェアエンコードも実はOBS Studioには搭載(実装)されています!!(VCE)
AMD Advanced Media Framework Encoder Plugin for OBS Studio」

NVIDIAドライバについて

NVENCを使用する場合は、追加するNVENCアップデートに問題が生じないように、NVIDIAドライバを最新バージョンに更新してください。
(との事らしいですが、たまに地雷ドライバーがあるので様子見して最新版ドライバに更新してみるのが良い)

OBS Studio の NVENC を使用する方法

バージョン 23.0以降の設定に関して

若干記述していますが、NVIDIAが公式に出してるガイドを参考にする事をおすすめします。
NVIDIA NVENC OBS Guide (英語ページ)
(当記事に将来的には上記ガイドを翻訳して反映する予定)

※NVENCをサポートしないGPUに関して (一覧)
NVENC support in OBS · obsproject/obs-studio Wiki

配信の場合

「設定 -> 出力」にある「エンコーダ」を変更する。

出力モードが「基本」の場合

配信にある「エンコーダ」より「ハードウェア (NVENC)」を選択
f:id:style1925:20210923142718p:plain
Windows 10/8.1環境の方はバージョン 23.0以降は「ハードウェア (NVENC)」を選択すると内部的に「FFmpegのNVENC」から「新しいjim-nvenc」に変わっています。

出力モードが「詳細」の場合

★バージョン23.0以降
「エンコーダ」で「NVIDIA NVENC H.264 (new)」を選択する
f:id:style1925:20210923142721p:plain
※「NVIDIA NVENC H.264」(22.0.2までのFFmpeg実装のNVENC)は25.0で一覧から非表示に変更されました。(一部の設定を使うと自動的にフォールバックします。)
※フォールバックする一部設定に関して : 出力をリスケール , GPU変更を利用した時
※バージョン22.0.2まではエンコーダ名が「NVENC H.264」でした。(23.0で変更)

★出力モード「詳細」Tips
レート制御 : 無損失(Lossless)はGTX 700番台以降じゃないと利用出来ません。
NVIDIA の GPU エンコーダー NVENC の現状と今後について #GTC15 | ニコラボ

・出力をリスケールする
「設定 > 映像」で映像をリスケールする事をおすすめ。
※「出力をリスケールする」を利用すると映像が綺麗にリスケールされません。
新しいNVENC(jim-nvenc)を利用した場合は、この設定を使用すると自動的に古い実装のNVENC(FFmpeg実装)にフォールバックします!

・プリセット
デフォルトは「Quality」です。
エンコードオーバーロードする場合(重い時)は「Max Performance」に変更。

・Look-ahead / 心理視覚チューニング
文字にカーソルを合わせておくと説明が出ます。

GPU : 0
デスクトップPCで複数のGPUがある場合にNVENCを実行するGPUを変更出来ます。
1枚しか搭載していない場合は、初期の0から変更しないでください。(エラーで開始出来ない)
※実際この変更はパフォーマンス低下を招くので、同じGPU上でゲームとエンコードを行うのが最善です。また新しい「NVENC(new)」の場合、GPU変更は対応していない(異なるGPU間でテクスチャ共有が出来ない為)ので古いFFmpeg実装のNVENCに自動的にフォールバックします。注意してください。※新しいNVENCの恩恵が受けれなくなります。
※フォールバックのコミット → obs-ffmpeg: Do not allow new NVENC on gpu idx > 0

録画の場合

※高画質で録画だけをする場合の設定例を紹介

★録画だけをする場合は「自動構成ウィザード」をお試しください。
1、録画するゲームなどを起動しておく。(負荷がある状態にする)
2、OBS Studioを起動する。
3、メニュー「プロファイル」で「新規」を選択して新しいプロファイルを作成する。
※録画専用で設定を分ける為に、プロファイルを新規作成します。
4、メニュー「ツール」から「自動構成ウィザード」を開く
5、開いたら「録画のために最適化し、配信はしない」を選択してウィザードに従う。

出力モードが「基本」の場合

※録画品質で重い場合は「詳細」でプリセットを変更して細かく設定してください。

「設定 -> 出力」
・録画品質
[配信と同じ] : 配信と同じ品質で録画されます。
[高品質、ファイルサイズ中] : CQP 23 / preset hq / profile high
[超高品質、ファイルサイズ大] : CQP 16 / preset hq / profile high
[無損失品質、ファイルサイズ特大] : AVI形式で録画されます。

・録画フォーマット
デフォルトのmkvを利用する事をおすすめします。
mp4ファイルが必要な場合は、保存後に「ファイル > 録画の最多重化」からmp4に変換する事が出来ます。(mp4は正常に録画が完了しなかった場合、録画データが破損します。)

・エンコーダ
[ハードウェア (NVENC)]に変更する

「設定 -> 映像」※重い場合は、解像度/FPSは下げてください
[出力 (スケーリング) 解像度] : お好みで変更
[FPS] : お好みで変更

・補足事項
「録画品質」を利用した場合、音声ビットレートは「128kbps」固定になります。
「128kbps」以外を使用したい場合、出力モード「詳細」を利用します。
※注意点 : 「詳細」利用時に「設定 > 配信」が設定されている場合、音声ビットレートの設定が制限される場合があるので必ず空欄にしてください。(またはプロファイルを新規作成して録画だけの設定に変更してください)

出力モードが「詳細」の場合

「設定 -> 出力」
・エンコーダ
22.0.2までは [NVENC H.264]に変更する
23.0.0以降は [NVIDIA NVENC H.264 (new)]または[NVIDIA NVENC H.264]に変更する

・レート制御/CQP/プリセット/Profile
[レート制御] : CQP
[CQP Level] : 14~21 で調節する。(低いほど高画質)
[プリセット] : 初期はQuality、重い場合はMax Performanceなどに変更する
[Profile] : high

「設定 -> 映像」※重い場合は、解像度/FPSは下げてください
[出力 (スケーリング) 解像度] : お好みで変更
[FPS] : お好みで変更

OBS Studio 23.0以降の新しいNVENCに関して

古いNVENC(FFmpeg実装)との違い

■新しいNVENCに関して
OS
Windows 10/8.1 に対応 (Windows 7は非対応)

「設定 -> 出力」 (基本の場合)
・エンコーダを「ハードウェア (NVENC)」にする。
※内部的に23.0以降はWindows 10/8.1では新しいNVENCになっています。

「設定 -> 出力」 (詳細の場合)
・「出力をリスケールする」は非対応 ※変更すると古い実装にフォールバックします。
・「GPU」変更は非対応 (変更すると古いNVENCになります。) ※変更非対応コミット
・「カスタム出力 (FFmpeg)」には表示されない。 (カスタム側はFFmpegなので別。)

「設定 -> 詳細設定」
・ 「カラーフォーマット」を「NV12」のみ対応。故意に変更した場合、新しいNVENCを利用出来ず古いNVENCに自動的にフォールバックします。
※新しいNVENCが利用されているか気になった場合は、一度出力を開始して「ヘルプ > ログファイル > 現在のログを表示」してログファイルに「jim-nvenc」の文字があるか確認!

■期待出来る効果
・「RTX20xx番台などの(Turing世代)」以降で品質の向上
・「GTX6xx番台」以降でパフォーマンスの改善

■プロセスの違い
古いNVENC(FFmpeg実装)
1、OBSがフレームをレンダリングする。
2、OBSは他のエンコーダと同じようにそのテクスチャをGPUからRAMに転送する。
3、FFmpeg NVENCはそれをGPUにアップロードする。
4、FFmpeg NVENCはそれをエンコードする。

新しいNVENC(jim-nvenc)
1、OBSがフレームをレンダリングする。
2、NVENCはそれをエンコードする。

これはOBSのパフォーマンス向上だけではなく、NVENCを使用している間にプレイしているゲームに対するOBSの影響も軽減します。1台のPCでゲームを配信して録画する人にとっては必須です。

こんな時は

ラグる場合 (Windows 10 2004以降を利用してる場合)

Windows 10 May 2020 Updateで利用出来るようになった「ハードウェア アクセラレータによる GPU スケジューリング」をオンに変更してたらオフ(無効)に戻してみてください。

NVENCを使ったのに映像がカクカクしてる!

何処が原因でカクカクしてるか確認しましょう。
配信または、録画をしながら下記ウィンドウを開いてOBSの負荷を確認します。
※これと合わせて下に記載している「PC全体の負荷確認方法」もしてください。

メニュー「表示 > 統計」を開く。(19.0以降利用可能)

各項目に関して簡単に解説
FPS
設定値より下がってる場合は、設定(設定 > 映像)で解像度とFPSを下げてください。
・フレームをレンダリングする平均時間
高い数値(例 : 20ms以上)とかじゃない限り気にする必要がない部分となります。
※著者の環境だと0.5ms~2.0msぐらいで使えています。
レンダリングラグが原因で逃したフレーム
数値が増える場合はGPU負荷を減らしてください。(ゲーム内のFPS制限 / Vsyncを有効など)
特にNVENCを実行している場合はGPU負荷が高いとフレームが失われます。(カクカクする)
エンコードのラグが原因スキップされたフレーム
CPU負荷が原因で数値が増えます。(設定を軽くしたり(設定 -> 出力、映像)など、また開いてるアプリケーションの数を減らすなどしてCPU負荷を抑えてください。)
※出力は「エンコーダプリセットを低負荷に」、映像は「解像度 と FPSを下げる」
・ドロップフレーム (ネットワーク)
0より増えた場合回線(上り)が悪い ビットレート下げる。(回線変更を検討する)
※「ドロップしたフレーム」は増えないけど、右下の接続安定性インジケータが緑色/黄色/赤色と変動する場合は、Windows環境をお使い人は「設定 > 詳細設定」にある「新しいネットワークコードを有効にする」を有効にしてみて改善するかもお試しください。(ゲームのping変動が激しい場合はその下の「低遅延モード」にチェックをする)

PC全体の負荷確認方法
Windows 10の場合
タスクマネージャーを起動する。
CPU/メモリ/GPU(エンコード中はVideo Encodeの値)の値を確認する。

Windows 8.1 / 7の場合
CPU、メモリ使用率はタスクマネージャーで見れます。
GPU負荷は、下記の「GPU-Z」を使って確認してください。

★「GPU-Z」に関して 起動後「Sensors」タブを押し「Video Engine Load」の値を見る。
もし値が高すぎる場合、処理落ちをして映像に影響が出ます。(下記画像は100%に近い)
ShadowPlayと処理負荷が異なる為、処理落ちが起きてる場合はグラボの性能不足です。
(ちなみに著者の元使ってたGTX 680ではChromeのハードウェアアクセラレーションONで1080p 60fpsの配信閲覧しながら1080p 60fpsのNVENC録画は性能不足過ぎて出来ませんでした…)
f:id:style1925:20210923143023p:plain

開始を押すと「出力開始エラー」が表示される!

出力開始に失敗しました。詳細はログを確認してください。
注: NVENCまたはAMDエンコーダを使用している場合は、ビデオドライバが最新のものであるかを確認してください。

f:id:style1925:20210928160921p:plain

★25.0.8以降
※複数のエラーメッセージが追加
「NVENC コーデックを開けませんでした : Generic error in an external library」
「出力エンコーダ設定でGPU %1 を選択しました。 これを0に戻してもう一度お試しください。」
f:id:style1925:20210928160941p:plain

「NVENCエラー: 同時セッションが多すぎます。NVIDIA ShadowplayやWindows 10 Game DVRなどNVENCを使用している可能性のある他の録画ソフトウェアを終了してみてください。」
※NVENCの使用セッション上限(3つまで)です。(古いドライバだと2つまで)
f:id:style1925:20210928160959p:plain

「NVENC Error: init_encoder: nv.nvEncInitializeEncoder(enc->session, params) failed: 8 (NV_ENC_ERR_INVALID_PARAM)」
出力モードが「詳細」の場合に「無損失(ロスレス)」で開始しようとした場合にこのエラーが発生します。「心理視覚チューニング」を無効にすると回避する事が可能なようです。
※27.0.1でエラーが出ないように修正されました。困ってる人はアップデートしてね。
f:id:style1925:20210928161009p:plain

エラー発生原因&解決方法
※バージョン 18.0以降

・NVENCを3つ使用中 (3セッション) ※2020年08月30日追記
セッション制限の上限数が2→3にサイレントで変更されたようです。(06月頃?)
もしNVENCを2つ以上使う場合はドライバ更新をしてみてください。

Nvidiaが消費者向けGPUに同時NVENCセッションの最大数を3に設定(制限)しています。
例えば下記の使い方をするとエラーが発生します。
エラーが発生しないように4つ目のNVENCを利用してるソフトを終了してください。

★使い方例 (3つの場合)
1、ShadowPlayのインスタントリプレイを使う
2、OBS Studioで配信を開始する (NVENCを使用する設定)
3、OBS Studioで録画を開始する (NVENCを使用するが録画用に別設定)
4、NVENCを使用するアプリケーションを利用 (エラーが発生します)

★使い方例 (2つの場合)
※制限の仕様変更前の例です
1、ShadowPlayのインスタントリプレイを使う
2、OBS Studioで配信を開始する (NVENCを使用する設定 / 録画はしない)
3、NVENCを使用するアプリケーションを利用 (エラーが発生します)
※NVENCを3つ使用したい場合は、ドライバ更新をして解決するかお試しください。

・ビデオドライバのバージョンが古い
24.0以降は 390.77 以降のドライバが必要です。(23.0までは確か378.66)
古い場合はドライバの更新をしてください。
NVIDIAをお使いの場合 → こちら (NVIDIA公式サイト)
AMDをお使いの場合 → こちら (AMD公式サイト)

・ビデオドライバの問題
ドライバを更新したのに出力開始エラーが出る場合は、ビデオドライバをクリーンインストールをする必要があります。(ドライバインストール後はPCを再起動してください!)
NVIDIAインストーラーの場合はカスタムインストールを選択するとチェックがあります。
またはDDUを使ってクリーンインストールしてください。

・OBSアップデート後
パソコンを再起動してください。
※再起動後にビデオドライバのバージョンを確認!

NVIDIA搭載ノートパソコン/一体型PCなど
上記PCはNVENCが表示されますが、対応していないので「エンコーダ」を「x264」か「QuickSync」に変更する必要があります。(OBS側「設定 > 出力」の「エンコーダ」部分)

・設定ミスをしている
「出力モード」の「詳細」を利用している場合、値を初期値から変えた場合にグラボ側が対応してない設定をするとエラーが出ます。その場合、設定を戻す必要があります。
設定が戻せない人は、新しくプロファイルを作成して設定を1からしてください。
(プロファイル作成方法 : 「メニュー > プロファイル > 新規」を選んで作成する)

・解像度を下げてみる
NVENCエンコーダが設定解像度に対応してなくてエラーが発生している場合があります。
「設定 -> 映像」で「基本 (キャンバス) 解像度」または「出力 (スケーリング) 解像度」を下げてみて改善するか確認してみてください。(特に4k以上の環境)

・Kepler世代(GTX 600/700)を使用している場合
※2021年6月13日追記
27.0.1で修正が入ったようです。
お困りの方はアップデートしてみてください。

※2021年6月6日追記
古い世代では「心理視覚チューニング」が対応してないようなので、現時点では手動で無効にしないといけないようです。(有効の場合に自動で無効にするPRが作成されているので取り込まれた場合は、手動で無効にする必要が無くなります。)

※2021年6月4日追記
NVIDIAがNVENCのサポートを外した可能性があります。
詳細が分かり次第もう少し詳しく書きます。
GPUのアップグレードを検討しても良いかもしれません。(ドライバ提供が2021年で終了するとの情報もあるので。)

・ニコ生プラグインを利用して放送枠を取らずに配信開始を押した
エラーが出るのは仕様です。気になるならプラグイン作者に要望してください。

・ニコ生プラグインでログインに失敗している
※ログイン失敗ウィンドウも出ます
ログインが正常に出来るようにしてください。

OBS Studio の NVENC を使用してみて

特徴

GPUエンコードなので、x264(CPU処理)と比べるとOBSのCPU使用率はすごく低い。
・グラボの世代次第で「品質(画質)変化」があったり「解像度」と「FPS数値」が高すぎると処理落ちする事があります。
※最新グラボ(RTX世代など)の場合は気にしなくて大丈夫

処理落ちしてる場合

OBS本体左下部分に下記警告メッセージが表示されます。(または「表示 > 統計」を開く)
★OBS Studioの場合(新)「エンコードが高負荷です! 映像設定を下げるかより高速のエンコードプリセットの使用を検討してください。」
★OBS Studioの場合(旧)「エンコードが高負荷です! ビデオ設定を下げるかより高速のエンコードプリセットの使用を検討してください。」
※警告部分を非表示に出来る設定があるので表示がない場合は「メニューバー」から「表示 > ステータスバー」を確認してチェックマークがついている状態に変更してください。

◆OBS Studio NVENC 変更点メモ (バージョン別)
長いので折りたたんでいます。

▶ここをクリックで表示 OBS Studio 27.0
-ロスレスサポート端末のみエンコードされるよう修正

OBS Studio 26.1
-ブラックリストにMX350を追加
(ブロックされるアダプタ一覧 : あとで書く)

OBS Studio 26.0
-上記エラーの翻訳を追加

OBS Studio 25.0.8
-NVENCエラーをわかりやすいようにする為のメッセージ追加

OBS Studio 25.0
-出力モードが詳細の場合に、FFmpeg実装のNVENCを非表示に変更 (混乱を防ぐために)
-出力モードが詳細の場合に、NVENC (new)で再スケーリングをサポート (内部的に古いNVENCにフォールバック)

OBS Studio 23.2
-少数フレームレート(FPS)に設定してた場合のJim-nvnec不具合を修正 (59.94とか)

OBS Studio 23.1
-Quadro P5000でNVENCが表示されない不具合を修正
-同じセッションで最初の出力フレームが誤って次のセッションで表示される不具合を修正
-ブロックしていたアダプタの一部を削除
(23.1現在のブロックされるアダプタ一覧 : 720M , 730M , 740M , 745M , 820M , 830M , 840M , 845M , 920M , 930M , 940M , 945M , 1030 , MX110 , MX130 , MX150 , MX230 , MX250 , M520 , M500 , P500 , K920M)

OBS Studio 23.0
-NVIDIA NVENC H.264 (new)を実装 (Windows 8 以降対応)
-NVENCが利用可能な場合、デフォルトエンコーダをNVENCに変更 (23.0以降にインストールした人)
-出力モードが基本の場合、自動的に新しいNVENC(jim-nvenc)に変更 (23.0以降にインストールした人)
-NVENCが利用出来ないGPUをブロックする機能を実装 (不具合で23.0.1現在ブロックされていない可能性あり)
(ブロックされるアダプタ一覧 : 720M , 730M , 740M , 745M , 820M , 830M , 840M , 845M , 920M , 930M , 940M , 945M , 720A , 730A , 740A , 745A , 820A , 830A , 840A , 845A , 920A , 930A , 940A , 945A , 1030 , MX110 , MX130 , MX150 , MX230 , MX250 , M520 , M500 , P500 , K920M)

OBS Studio 19.0.0 で実装されている NVENC の仕様及び変更点
-defaultプリセットの削除 (defaultの場合、自動的にhqとして扱われます)

OBS Studio 17.0(0.17.0) で実装されている NVENC の仕様及び変更点
-内部エンコーダのネーム変更。(nvenc_h264 → h264_nvenc)

OBS Studio 0.16.0 で実装されている NVENC の仕様及び変更点
-NVENC H.264プロファイルが設定されない問題を修正
-b-fremes設定を追加 (デフォルト値 : 2)

OBS Studio 0.15.0 で実装されている NVENC の仕様及び変更点
-0.14.2で使えなかったレート制御の無損失のバグが修正
-出力モードが基本の場合、1つのコアだけ?を使用していたバグを修正

OBS Studio 0.14.2 で実装されている NVENC の仕様及び変更点
-CBR(固定ビットレート)が正しく動作しないのを修正
-録画時にビットレートを多く使用する問題を修正 (CQP → VBRに変更?)
-プリセット高品質?ビットレートが、50000 → 22000 に変更
-ビットレート上限を増加、90000 → 300000 に変更
-レート制御が変更 今までは「CBR」「VBR」2種だったが「CQP」「無損失」が追加
※無損失は0.14.2では動作しない。0.15.0のリリースで修正済み (1コミット後に修正だった)

OBS Studio 0.14.0 で実装されている NVENC の仕様及び変更点
-Windows 版とLinux(コンパイル必須?)に対応。
-0.12.0 のような Windows 10 必須という事がない。
-NVIDIA ドライバVer 358.xx以降必須 (コメント情報)
-CBR (固定ビットレート)が動作していない (0.14.2で修正済み)
-プリセット : 既定・高画質・高品質・ブルーレイ・低遅延・低遅延高画質・低遅延高品質
-基本モード名称 : ハードウェア (NVENC)
-詳細モード名称 : NVENC H.264

OBS Studio 0.12.0 で実装されている NVENC の仕様及び変更点
-Windows 10が必須の模様。 (仕様上)
-名称 : NVIDIA NVENC H.264 エンコーダ (Media Foundation)
Windows 10環境を持ち合わせてない為不明。 (情報募集中)
※0.14.0 リリースによりこちらは非推奨になった。

コメントでの情報 (2016年04月27日 23時10分頃記載) ※Asterさんありがとうございます!  
  
OBS StudioのNVENCの件のまとめ  
・Ver0.14.0からのNVENCはWindows7でも利用可能になりました。  
・ビルドする際にFFMpegのビルドをする際にコンパイルオプション『--enable-nvenc』を使用しています。  
 ※ご自分でビルドをする際には、このオプションを使用してFFMpegをビルドして下さい。  
  使用せずにビルドしますと、設定項目にNVENCが出現しないOBS Studioが出来上がります。  
・このコンパイルの際にSDK6.0のnvEncodeAPI.hを使用しているようです。  
・この為、NVENCを利用するには最低ドライバVer358.xx以降を要求されます。  
・これ以前のVerのドライバを使用している場合、NVENCの項目自体は設定欄に出現しますが、配信や録画ボタンを押してもエンコードが開始されません。  
・GTX600番台の世代のグラボを使用されている方で、350番台以降のドライバを使用すると応答停止になるなどドライバの安定性が芳しくない等の理由でわざとドライバをVer347.xx等で更新していない場合は注意が必要です。 ```
</details>