Update NVIDIA NVENC guides for StreamFX v0.11.1

This commit is contained in:
Michael Fabian 'Xaymar' Dirks
2022-02-18 04:55:56 +01:00
parent 2f670ca134
commit 8557e88155
2 changed files with 420 additions and 162 deletions
+87 -73
View File
@@ -10,12 +10,12 @@ redirect_from:
{% capture content %}Streaming with more than one PC has been the leader in H.264 encoding for years, but NVIDIAs Turing and Ampere generation has put a significant dent into that lead. The new generation of GPUs with the brand new encoder brought comparable quality x264 medium if you can find a GPU that is. Lets take a look at whats needed to set up your stream for massively improved quality.{% endcapture %}{% include blocks/paragraph.liquid content=content %}
{% capture content %}<b>The guide has been updated for:</b><br/>
StreamFX v0.11 and OBS Studio 27.0{% endcapture %}{% include blocks/paragraph.liquid align="center" content=content %}
StreamFX v0.11.1 and OBS Studio 27.2{% endcapture %}{% include blocks/paragraph.liquid align="center" content=content %}
{% capture content %}Setting up NVENC (for Streaming){% endcapture %}{% include blocks/heading.liquid content=content level=1 %}
{% capture content %}Modern OBS Studio has two ways to achieve the expected quality: the built-in NVENC H.264 (new) and the addition from StreamFX called NVIDIA NVENC H.264/AVC (via FFmpeg). Both Options can achieve similar quality to x264 medium, but the latter is able to exceed that and rival x264 medium/slow in various situations. Whichever you pick, both of them support zero-copy encoding, and theyre both valid options for streaming.{% endcapture %}{% include blocks/paragraph.liquid content=content %}
{% capture content %}Built-In: OBS Studio NVENC H.264 (new){% endcapture %}{% include blocks/heading.liquid content=content level=3 %}
{% capture content %}Built-In: OBS Studio NVENC H.264 (new){% endcapture %}{% include blocks/heading.liquid content=content level=2 %}
{% capture content %}The built-in NVENC option in OBS Studio is by far the simplest option and will give you almost identical quality on Maxwell, Pascal, Turing and Ampere, though Turing and Ampere will make use of the new improvements of the NVENC chip. Maxwell and Pascal users can expect to reach x264 veryfast/faster-like quality, while Turing and Ampere users can expect to hit fast/medium-like quality. Below are the settings you need to set:{% endcapture %}{% include blocks/paragraph.liquid content=content %}
{% capture content %}
<thead><tr>
@@ -25,133 +25,149 @@ StreamFX v0.11 and OBS Studio 27.0{% endcapture %}{% include blocks/paragraph.li
</tr></thead>
<tr>
<td>Preset</td>
<td>Quality</td>
<td>Max Quality<br/><b>or:</b> Quality</td>
<td colspan=2>Quality or Max Quality</td>
</tr>
<tr>
<td>Profile</td>
<td>high</td>
<td>high</td>
<td colspan=2>high</td>
</tr>
<tr>
<td>Look-ahead</td>
<td>Enabled/Checked</td>
<td>Enabled/checked</td>
<td colspan=2>Enabled/Checked</td>
</tr>
<tr>
<td>Psycho-Visual Tuning</td>
<td>Enabled/Checked</td>
<td>Enabled/Checked</td>
<td colspan=2>Enabled/Checked</td>
</tr>
<tr>
<td>Max B-Frames</td>
<td>1 or 2</td>
<td>3 or 4</td>
<td colspan=2>2 to 4 <i>(Use less for action packed games)</i></td>
</tr>
{% endcapture %}{% include blocks/table.liquid content=content caption="Best built-in NVENC settings." %}
{% capture content %}StreamFX: NVIDIA NVENC H.264/AVC (via FFmpeg){% endcapture %}{% include blocks/heading.liquid content=content level=3 %}
{% capture content %}StreamFX: NVIDIA NVENC H.264/AVC (via FFmpeg){% endcapture %}{% include blocks/heading.liquid content=content level=2 %}
{% capture content %}If youre new to StreamFXs NVENC integration, it will most likely overwhelm you with the settings it offers. But thanks to all those settings, you can actually go above the default quality by quite a significant amount. Note that I will only cover critical settings, as other settings like Bitrate, Buffer Size and Key Frame Interval are explained elsewhere. {% endcapture %}{% include blocks/paragraph.liquid content=content %}
{% capture content %}
<thead><tr>
<th width="20%">Option</th>
<th width="40%">Kepler, Maxwell & Pascal</th>
<th width="40%">Turing & Ampere</th>
<th width="25%">Kepler, Maxwell</th>
<th width="25%">Pascal, Volta</th>
<th width="25%">Turing & Ampere</th>
</tr></thead>
<tr>
<td>Preset</td>
<td colspan=2>High Quality</td>
<td colspan=3>Medium (P4) <i>or slower</i></td>
</tr>
<tr>
<td colspan=3><b>H264</b></td>
<td>Tune</td>
<td colspan=3>High Quality</td>
</tr>
<tr>
<td>► Profile</td>
<td colspan=2>High</td>
<th colspan=4>H264</th>
</tr>
<tr>
<td>► Level</td>
<td colspan=2>Automatic</td>
<td>Profile</td>
<td colspan=3>High</td>
</tr>
<tr>
<td colspan=3><b>Rate Control Options</b></td>
<td>Level</td>
<td colspan=3>Automatic</td>
</tr>
<tr>
<td>► Mode</td>
<td colspan=2>High Quality Constant Bitrate</td>
<th colspan=4>Rate Control Options</th>
</tr>
<tr>
<td>► Two Pass</td>
<td>Disabled</td>
<td>Enabled</td>
<td>Mode</td>
<td colspan=3>Constant Bitrate</td>
</tr>
<tr>
<td>► Look Ahead</td>
<td>8 - 12</td>
<td>16 - 32</td>
<td>Multi-Pass</td>
<td colspan=2>Two Pass at Quarter Resolution</td>
<td>Two Pass at Quarter Resolution<br><i>or:</i> Two Pass at Full Resolution</td>
</tr>
<tr>
<td>► Adaptive I-Frames</td>
<td colspan=2>Enabled</td>
<td>Look Ahead</td>
<td colspan=2>8 frames <i>or more</i></td>
<td>16 frames <i>or more</i></td>
</tr>
<tr>
<td>Adaptive B-Frames</td>
<td colspan=2>Enabled</td>
<td>Adaptive I-Frames</td>
<td colspan=3>Enabled</td>
</tr>
<tr>
<td colspan=3><b>Adaptive Quantization</b></td>
<td>Adaptive B-Frames</td>
<td colspan=3>Enabled</td>
</tr>
<tr>
<td>► Spatial (AQ)</td>
<td colspan=2>Enabled</td>
<th colspan=4>Limits</th>
</tr>
<tr>
<td>► Spatial (AQ) Strength</td>
<td colspan=2>&lt;Any&gt;</td>
<td>Target Bitrate</td>
<td colspan=3><i>Any</i></td>
</tr>
<tr>
<td>► Temporal (AQ)</td>
<td colspan=2>Enabled</td>
<td>Buffer Size</td>
<td colspan=3>0 kbit</td>
</tr>
<tr>
<td colspan=3><b>Other Options</b></td>
<th colspan=4>Adaptive Quantization</th>
</tr>
<tr>
<td>► Maximum B-Frames</td>
<td>1 or 2</td>
<td>3 or 4</td>
<td>Spatial Adaptive Quantization</td>
<td colspan=3>Enabled</td>
</tr>
<tr>
<td>► B-Frame References</td>
<td colspan=2>"middle"</td>
<td>Spatial Adaptive Quantization Strength</td>
<td colspan=3>8 (Normal) to 15 (Strongest)</td>
</tr>
<tr>
<td>► Zero Latency</td>
<td colspan=2>Disabled</td>
<td>Temporal Adaptive Quantization</td>
<td colspan=3>Enabled</td>
</tr>
<tr>
<td>► Weighted Prediction</td>
<td colspan=2>Disabled</td>
<th colspan=4>Other Options</th>
</tr>
<tr>
<td>► Non-reference P-Frames</td>
<td colspan=2>Enabled</td>
<td>Maximum B-Frames</td>
<td>1 to 2</td>
<td>2 to 3</td>
<td>2 to 4</td>
</tr>
<tr>
<td> Reference Frames</td>
<td colspan=2>-1 (Automatic)</td>
<td>B-Frame Reference Mode</td>
<td colspan=3><i>Any except Disabled</i></td>
</tr>
<tr>
<td colspan=3><b>FFmpeg Options</b> (Optional)</td>
<td>Zero Latency</td>
<td colspan=3>Default</td>
</tr>
<tr>
<td>► Custom Settings</td>
<td colspan=2></td>
<td>Weighted Prediction</td>
<td colspan=3>Default</td>
</tr>
{% endcapture %}{% include blocks/table.liquid content=content caption="Ideal NVENC Settings for StreamFX's NVENC." %}
{% capture content %}For certain platforms it may be necessary to turn off Adaptive I-Frames due to how their internal processing works, such as Twitch. This has a drastic quality impact and should only be done if you rely on that platform alone to reach your audience.{% endcapture %}{% include blocks/paragraph.liquid content=content %}
<tr>
<td>Non-reference P-Frames</td>
<td colspan=3>Enabled</td>
</tr>
<tr>
<td>Reference Frames</td>
<td colspan=5>-1 frames</td>
</tr>
<tr>
<td>Low Delay Key-Frame Scale</td>
<td colspan=5>-1</td>
</tr>
{% endcapture %}{% include blocks/table.liquid content=content caption="Ideal settings for StreamFX's NVENC integration." %}
{% capture content %}Setting up Resolution and Framerate to match the Bitrate{% endcapture %}{% include blocks/heading.liquid content=content level=1 %}
{% capture list %}
<li><i>Adaptive I-Frames</i> may not work well with certain platforms and must be turned off if you encounter issues.</li>
<li>Stronger <i>Spatial Adaptive Quantization</i> will focus more bitrate towards visually complex areas, but may starve smoother areas of the bitrate it needs.</li>
<li>The old presets were deprecated by NVIDIA and now map to the new P1-P7 presets, which come with massive performance or quality boosts. <i>High Quality</i> is now <i>Medium (P4)</i>, while <i>High Performance</i> is closer to <i>Faster (P2)</i>.</li>
<li>When <i>Maximum B-Frames</i> is set to 4 and <i>B-Frame Reference Mode</i> is set to Each, it may be necessary to manually increase the <i>Reference Frames</i> or a Driver crash may be observed..</i></li>
<li>Increasing the <i>Reference Frames</i> can improve quality significantly, but will require more powerful decoders, and at times can hurt quality.</li>
{% endcapture %}{% include blocks/list.liquid content=list %}
{% capture content %}Matching your Resolution and FPS with your Bitrate{% endcapture %}{% include blocks/heading.liquid content=content level=1 %}
{% capture content %}It is no secret than H.264/AVC is an outdated codec and that platforms should have paved the way for better codecs a long time ago, but it is the solution that we are stuck with until AV1 is adopted by the masses. So in order to get the best quality out of our stream, we should aim to also set up our stream according to the bitrate and codec we use. Below is the average result of a few hundred thousand tests at various resolutions and bitrates, according to PSNR and VMAF (weighted PSNR 30:70 VMAF):{% endcapture %}{% include blocks/paragraph.liquid content=content %}
{% capture content %}
<thead><tr>
@@ -165,12 +181,12 @@ StreamFX v0.11 and OBS Studio 27.0{% endcapture %}{% include blocks/paragraph.li
</tr></thead>
<tr>
<td>640x360</td>
<td>5</td>
<td>5</td>
<td>6</td>
<td>6</td>
<td>8</td>
<td>7</td>
<td>9</td>
<td>8</td>
<td>6</td>
</tr>
<tr>
<td>960x540</td>
@@ -178,26 +194,26 @@ StreamFX v0.11 and OBS Studio 27.0{% endcapture %}{% include blocks/paragraph.li
<td>4</td>
<td>6</td>
<td>5</td>
<td>7</td>
<td>7</td>
<td>6</td>
<td>5</td>
</tr>
<tr>
<td>1280x720</td>
<td>4</td>
<td>3</td>
<td>5</td>
<td>4</td>
<td>3</td>
<td>5</td>
<td>4</td>
</tr>
<tr>
<td>1536x864</td>
<td>3</td>
<td>2</td>
<td>4</td>
<td>2</td>
<td>3</td>
<td>3</td>
<td>4</td>
<td>4</td>
<td>3</td>
</tr>
<tr>
<td>1600x900</td>
@@ -210,7 +226,7 @@ StreamFX v0.11 and OBS Studio 27.0{% endcapture %}{% include blocks/paragraph.li
</tr>
<tr>
<td>1920x1080</td>
<td>2</td>
<td>1</td>
<td>1</td>
<td>2</td>
<td>2</td>
@@ -224,5 +240,3 @@ StreamFX v0.11 and OBS Studio 27.0{% endcapture %}{% include blocks/paragraph.li
{% capture content %}Final Words{% endcapture %}{% include blocks/heading.liquid content=content level=3 %}
{% capture content %}In the past few years NVIDIA has made massive improvements to their encoder, which has evened the playing field far beyond what was expected. With no need to transfer frames from the GPU to the CPU, and quality comparable to x264 medium (or better), NVIDIAs Turing NVENC is pushing the boundaries of what is possible in a single consumer PC.{% endcapture %}{% include blocks/paragraph.liquid content=content %}
{% capture content %}Whether you use it or not is entirely up to you however. If you already have a working Dual-PC setup that can achieve x264 medium (or better) quality, then you dont gain much from moving to Turing NVENC. But if youre currently stuck on anything below x264 medium, or have a Turing GPU ready to test it out why not give it a shot?{% endcapture %}{% include blocks/paragraph.liquid content=content %}
{% capture content %}Video Examples{% endcapture %}{% include blocks/heading.liquid content=content level=1 %}