TenderSausage
So here's my take: According to many reputable guides on the internet, there are some "ideal settings" that you should be using to stream to Twitch. These settings are fine for Affiliates and Partners but aren't ideal for those of us still on the path. Why? Well, there are two big reasons that I see: 1. Transcoding. This technology lets viewers select a different stream quality according to what their device/internet connection will allow. Twitch guarantees transcoding to Affiliates and Partners and only offers it as available to the general public. So what does this have to do with anything? I wanted to talk about this before talking about performance because there is a legitimate case to be made that setting your stream quality too high will stifle growth. But more on that later. 2. Bandwidth. Bandwidth is the keyword of choice for streaming, because there are so many systems that we working with and each has its own bandwidth considerations. For example, your upload speed from your ISP is a key bandwidth consideration for streaming. For Twitch, the maximum upload bandwidth that their ingest servers allow is 6,000kbps, according to their documentation. So as long as you have internet upload speeds of 6Mbps or better, you're good, right? No, not quite. Remember when I said "many systems?" Yeah, we gotta think outside the lines here and understand a few of them, like the encoder its bandwidth constraints. One issue I see from many new streamers is jacking the settings to the sky in OBS and then getting performance issues. The guides are not very clear on how to set up the encoder, and I posit that the guides that are out there do a poor job of explaining why. I want to break down why that is. For every second of video rendered, there are a certain number of pixels. Depending on a few settings, this number can change drastically. Example: One second of 1280x720 at 30FPS (720p30) has 27,648,000 pixels. Similarly, one second of 1920x1080 at 60FPS (1080p60) has 124,416,000, or 4.5x more than 720p30, every second. To recap, you're asking the encoder to capture and encode that many pixels each second. This doesn't factor in audio that also has to be encoded, but we'll ignore that for the most part (just know it's in there, too). So what does this mean as far as bandwidth? Well, from a GPU standpoint, it could mean a decrease in in-game performance because NVENC is consuming resources. As well, depending on how hard you tell the encoder to work, that will also affect your in-game performance. This is all settings in OBS, like Psycho Visual Tuning, B-Frames, and your Bitrate setting. (edited)
Example 1: You have an image loaded up as your current scene in OBS, and that is it (think your "BRB" screen). OBS sends this data to your encoder to be rendered and streamed to Twitch. Because the scene has mostly non-dynamic content, the encoder doesn't have to work as hard because you're sending the same data to the encoder frame after frame. Example 2: You have a scene loaded up that includes rich game content, a few web sources, a webcam source, and maybe a few more things, you know, a typical stream. Not only does each source need to be encoded, but the composite output will need to refresh that many times per second in the output encoder. So, more sources (and more demanding sources) will require more PC resources, usually CPU and GPU consumption. What can you do to change this? My recommendation is to remember each sub-system and maximize them based on Twitch's limitation of 6Mbps. Time for maths and stuff. To start, let's set up the Video tab. We'll check the Canvas, Output, downscale filter, and the FPS value settings, which will tell the encoder what to stream. Canvas Resolution: Based on Display. Just match what you have set up in Windows or in-game. Output Resolution: A resolution with a height no more than 900px, maintaining the same aspect ratio as your Canvas. Example 1: Base Canvas Resolution: 1920x1080 (16:9, 2.0MP/frame) Output Resolution: 1280x720 (16:9, 0.9MP/frame) Example 2: Base Canvas Resolution: 3840x2160 (16:9, 8.3MP/frame) Output Resolution: 1536x864 (16:9, 1.3MP/frame) Downscale Filter: Bicubic. There are a lot of guides that suggest Lanczos, but for the downsampled video, I feel like it introduces artifacts that I don't like, and bicubic has always worked well enough, given our bandwidth cap. FPS Value: Start at 30FPS. In all likelihood, 30FPS will be the sweet spot for a long time. Putting it together and run the numbers using 10-bit pixel depth, we find that our video bandwidth requirements are 2,900Kbps for example 1 and 4,100kbps for example 2. Remember when I talked about transcoding? It becomes essential to consider it here because whatever we set in the settings here sets the MINIMUM requirements for viewing your stream without transcoding it. For example, if you have a lot of viewers on mobile or who have slower ISP connections, mandating a 1080p60 stream for all viewers may be prohibitive to them, and they won't view or may have a sub-par experience because you're essentially requiring a 6Mbit connection to view your stream. Until Affiliate/Partner, that could be a huge impediment. With example 1, we're setting that mark much lower, around the 3Mbps mark. (edited)