BK-Morpheus
Active Member
Over the last weeks I was reading and posting in this forum a lot.
It seems that many people do the same mistakes over and over again, because they don't understand how game capture, scene rendering and video encoding works.
Maybe some one could make a sticky thread for the most common problems and how to avoid them.
I will try to give a guide-line with this thread.
1. Don't upload empty OBS log files
Here is the guide, how to create and upload your OBS log file: https://obsproject.com/forum/threads/please-post-a-log-with-your-issue-heres-how.23074/
If people provide their log file, they often use an empty one (sure it's not completely empty, but the recording/streaming attempt is missing).
Make sure to start your test recording/stream and don't forget to stop that recording/stream, before you upload the log file.
2. Bad quality, but why?
The quality of your recording/stream is influenced by many factors:
Your content can be very hungry for bitrate (shooters with many details and a lot of fast movement) or very compression-friendly (Hearthstone, League of Legends...).
That's why a setting that might look very good for one game, might look very blurry/pixelated in other games.
The higher the resolution and frame rate, the more bitrate is needed, to get decent quality.
Recommendation: Never use 1080p 60fps for streaming, if the content is bitrate-hungry.
In most scenarios you might have to test and decide if you prefer the smoothness of 720p 60fps or the less pixelated / blurry quality of 720p 30fps.
Encoder impact:
Depending on your CPU and GPU you can choose between x264 (CPU), Quicksync (integrated GPU), AMD AMF or VCE (don't know which one is the newer one) and Nvidia NVENC.
The GPU based encoders have on thing in common:
They have only a small impact on your gaming performance, but they are not efficient when it comes to encoding on low bitrates.
So GPU based encoders are ideal if you want to do local recordings, where Bitrate is not limitied (in that case I would choose quality based encoder settings like CRF/QCP instead of constant bitrate).
For streaming or lower bitrates in general, x264 will deliver better quality on Very Fast preset than the GPU based encoders, although actual Nvidia cards with Pascal architecture are not far behind.
If you have a fast processor or way more CPU cores than you game will utilize, you might be able to choose a slower x264 preset (faster or medium for example) to get even better encoding quality. Keep in mind, that "very fast" preset is the best compromise between CPU load and quality/efficiency. Switching down to "fast" preset will increase the CPU load quite drastically.
Don't expect wonders here. From my testing, the difference between "very fast" and "medium" is visible but not very impressive, where as the CPU load on my 8core 16thread Ryzen CPU will jump from barely noticeable to pretty high.
3. How to check your log file for ~4 common problems
If you are using Windows 10, check the beginning of your log file and make sure that you run OBS as an administrator, disable Game Bar and Game DVR:
https://support.steampowered.com/kb_article.php?ref=6239-DZCB-8600
Now scroll down or search your log for
"==== Recording Start" or "==== Streaming Start" and
"==== Recording Stop" or "==== Streaming Stop".
When you see "Total frames output", the interesting part begins.
After the Total frames output and Total drawn frames you might see one (or many) of the following lines:
Theses lines only appear, if there were any rendering, encoding or bandwidth problems.
Short explanation, what component might cause this:
Rendering problem = GPU
Encoding problem = CPU (if you use x264)
Bandwidth problem = Internet
The next chapter will explain what might cause these problems and how to solve them.
4. Rendering, Encoding, Bandwidth problems
4.1 Rendering lag
OBS uses the GPU to render your scene, as the GPU can handle that task very fast. After that, the rendered frames will be encoded (for example via CPU by using x264 codec) into a video.
In order to do this without dropping frames, you need to make sure, that the GPU is not fully utilized already.
On older Windows versions, the GPU access behavior was slightly different. Maybe OBS had a higher GPU priority on Windows 7/8, I don't know for sure. But right now on Win10 Creator and Creator Fall Version you need to make sure, that your game is not eating up all GPU power.
You can check your GPU load by downloading GPU-Z and check the sensors.
If you change the Window focus from your game to OBS or any other window, most games automatically reduce their framerate, until you switch back into the game. Reports about "OBS framerate is ok, as long as the OBS window is in focus" often are just caused by using >90% GPU load while gaming.
So if your game is not already running on a CPU bottleneck, you need to limit your ingame fps.
Either by using Vsync, max fps settings in your game (or game config file) or by using tools like Rivatuner Statistics Server (which is part of MSI Afterbuner) or Nvidia Inspector.
Reducing ingame details or buying a high end GPU will not solve rendering lag, if you don't limit your fps.
Exception: If your GPU is way faster than your CPU or the game engine has a limited max fps, it's possible that you can't utilize 100% GPU (CPU bottleneck) and therefore you won't need vsync or an additional fps limit.
By the way: You can't see a CPU bottleneck by checking your CPU load. Even when a game is running on a CPU limit, there might be no core showing more than 60% load. This is because of how games can utilize threads and how Windows is trying to spread this load on all available cores.
The only fast way to check for a CPU bottleneck is watch your GPU load and test without fps limit. If the GPU is not utilized 96-100% then this game is running on a CPU limit (or fps cap of the engine).
4.2 Encoding lag
If you encounter encoding lags, your CPU can't handle your OBS settings and the game at the same time.
To reduce the CPU load of the encoder, you can do one or more of the following steps:
reduce OBS framerate
reduce OBS resolution
choose a faster x264 preset
switch to GPU based encoder (NVENC for example)
limit ingame fps (which you should do anyway, see "4.1 Rendering lag")
High bitrates and fast motion will also increase encoder load, but reducing bitrate or not moving in your game might not be a useful solution :-)
4.3 Bandwidth problems
This can be caused by choosing a higher bitrate than your upload speed can handle (don't forget that audio bitrate will be added on top of your video bitrate and your game, discord, teamspeak also needs some upload).
It can also be caused by problems with some Twitch servers, or some other nodes on your route to the server or simply by packet loss and ISP problems in general.
More details:
https://obsproject.com/wiki/Dropped-Frames-and-General-Connection-Issues
5. "Gaming" Monitor + 60Hz Monitor
Windows doesn't handle GPU accelerated programs on a multi-monitor setup with different refresh rates very well.
If you run a game on a 144Hz monitor for example and you have a second monitor with only 60Hz, this will work, as long as you use fullscreen mode in the game and you don't open a program with GPU acceleration on the 60Hz monitor at the same time.
GPU accelerated programs can be OBS with preview, web browser with youtube/twitch or other video content.
So maybe you need to disable hardware acceleration in your web browser and disable OBS preview, if you have those programs on your 60Hz monitor.
6. Problems with Sources and Devices/Drivers
Try to avoid window_capture or monitor_capture, if you can use game_capture, as game_capture will provide the best performance. Some programs will not work with game capture, so you need to switch to window or monitor capture but at least try game capture first.
Avoid having game capture, window capture and monitor capture or having multiple game capture sources in the same scene.
Did you know, that you don't need to configure game capture to use a specific game/process? It will hook whatever game it can find, so you only need one game source.
Tip: The multi adapter compatibility option for game capture is meant for computers with more than one GPU, not for systems with one GPU and multiple monitors :-)
Browser sources can cause problems as well. Try to use as few as possible and check your CPU+GPU load with and without those browser sources, to identify possible problems. You might find a "number of memory leaks" at the end of your OBS log file. This usually comes from browser sources and a few memory leaks are no problem. If you see a high amount (>70 for exampe) of memory leaks, check your browser sources.
If you encounter high CPU load, when starting OBS, without even recording/streaming and you already checked your browser sources, than it might be a device driver that causes this CPU load.
Remove webcam/capture card sources from OBS and see if it helps. If you can identify the device, that is causing the CPU load, you should check for driver updates and maybe reduce the webcam resolution (as 1080p for a small webcam picture in a 720p stream is not necessary).
7. New scene collection to identify problems
If you already have a big scene collection with many scenes and even more sources in those scenes and you encounter some problems, I suggest that you create a new scene collection that will start empty.
Just add one scene in there (game_capture for example) and test your recording/stream again.
If it is working fine, you can add your next source to the scene (maybe the webcam) and test again.
This way you can find out which source or filter might cause problems and remove or change it in your original scene collection.
It seems that many people do the same mistakes over and over again, because they don't understand how game capture, scene rendering and video encoding works.
Maybe some one could make a sticky thread for the most common problems and how to avoid them.
I will try to give a guide-line with this thread.
1. Don't upload empty OBS log files
Here is the guide, how to create and upload your OBS log file: https://obsproject.com/forum/threads/please-post-a-log-with-your-issue-heres-how.23074/
If people provide their log file, they often use an empty one (sure it's not completely empty, but the recording/streaming attempt is missing).
Make sure to start your test recording/stream and don't forget to stop that recording/stream, before you upload the log file.
2. Bad quality, but why?
The quality of your recording/stream is influenced by many factors:
- bitrate
- content (details, contrast, movement)
- resolution
- frame rate
- encoder (and it's encoder settings)
Your content can be very hungry for bitrate (shooters with many details and a lot of fast movement) or very compression-friendly (Hearthstone, League of Legends...).
That's why a setting that might look very good for one game, might look very blurry/pixelated in other games.
The higher the resolution and frame rate, the more bitrate is needed, to get decent quality.
Recommendation: Never use 1080p 60fps for streaming, if the content is bitrate-hungry.
In most scenarios you might have to test and decide if you prefer the smoothness of 720p 60fps or the less pixelated / blurry quality of 720p 30fps.
Encoder impact:
Depending on your CPU and GPU you can choose between x264 (CPU), Quicksync (integrated GPU), AMD AMF or VCE (don't know which one is the newer one) and Nvidia NVENC.
The GPU based encoders have on thing in common:
They have only a small impact on your gaming performance, but they are not efficient when it comes to encoding on low bitrates.
So GPU based encoders are ideal if you want to do local recordings, where Bitrate is not limitied (in that case I would choose quality based encoder settings like CRF/QCP instead of constant bitrate).
For streaming or lower bitrates in general, x264 will deliver better quality on Very Fast preset than the GPU based encoders, although actual Nvidia cards with Pascal architecture are not far behind.
If you have a fast processor or way more CPU cores than you game will utilize, you might be able to choose a slower x264 preset (faster or medium for example) to get even better encoding quality. Keep in mind, that "very fast" preset is the best compromise between CPU load and quality/efficiency. Switching down to "fast" preset will increase the CPU load quite drastically.
Don't expect wonders here. From my testing, the difference between "very fast" and "medium" is visible but not very impressive, where as the CPU load on my 8core 16thread Ryzen CPU will jump from barely noticeable to pretty high.
3. How to check your log file for ~4 common problems
If you are using Windows 10, check the beginning of your log file and make sure that you run OBS as an administrator, disable Game Bar and Game DVR:
Running as administrator: true
Aero is Enabled (Aero is always on for windows 8 and above)
Windows 10 Gaming Features:
Game Bar: Off
Game DVR Allowed: Yes
Game DVR: Off
Game DVR Background Recording: Off
Game Mode: Off
Google will tell you how to do that, but here is a guide:Aero is Enabled (Aero is always on for windows 8 and above)
Windows 10 Gaming Features:
Game Bar: Off
Game DVR Allowed: Yes
Game DVR: Off
Game DVR Background Recording: Off
Game Mode: Off
https://support.steampowered.com/kb_article.php?ref=6239-DZCB-8600
Now scroll down or search your log for
"==== Recording Start" or "==== Streaming Start" and
"==== Recording Stop" or "==== Streaming Stop".
When you see "Total frames output", the interesting part begins.
After the Total frames output and Total drawn frames you might see one (or many) of the following lines:
- Number of lagged frames due to rendering lag/stalls:
- Number of skipped frames due to encoding lag:
- Number of dropped frames due to insufficient bandwidth/connection stalls:
Theses lines only appear, if there were any rendering, encoding or bandwidth problems.
Short explanation, what component might cause this:
Rendering problem = GPU
Encoding problem = CPU (if you use x264)
Bandwidth problem = Internet
The next chapter will explain what might cause these problems and how to solve them.
4. Rendering, Encoding, Bandwidth problems
4.1 Rendering lag
OBS uses the GPU to render your scene, as the GPU can handle that task very fast. After that, the rendered frames will be encoded (for example via CPU by using x264 codec) into a video.
In order to do this without dropping frames, you need to make sure, that the GPU is not fully utilized already.
On older Windows versions, the GPU access behavior was slightly different. Maybe OBS had a higher GPU priority on Windows 7/8, I don't know for sure. But right now on Win10 Creator and Creator Fall Version you need to make sure, that your game is not eating up all GPU power.
You can check your GPU load by downloading GPU-Z and check the sensors.
If you change the Window focus from your game to OBS or any other window, most games automatically reduce their framerate, until you switch back into the game. Reports about "OBS framerate is ok, as long as the OBS window is in focus" often are just caused by using >90% GPU load while gaming.
So if your game is not already running on a CPU bottleneck, you need to limit your ingame fps.
Either by using Vsync, max fps settings in your game (or game config file) or by using tools like Rivatuner Statistics Server (which is part of MSI Afterbuner) or Nvidia Inspector.
Reducing ingame details or buying a high end GPU will not solve rendering lag, if you don't limit your fps.
Exception: If your GPU is way faster than your CPU or the game engine has a limited max fps, it's possible that you can't utilize 100% GPU (CPU bottleneck) and therefore you won't need vsync or an additional fps limit.
By the way: You can't see a CPU bottleneck by checking your CPU load. Even when a game is running on a CPU limit, there might be no core showing more than 60% load. This is because of how games can utilize threads and how Windows is trying to spread this load on all available cores.
The only fast way to check for a CPU bottleneck is watch your GPU load and test without fps limit. If the GPU is not utilized 96-100% then this game is running on a CPU limit (or fps cap of the engine).
4.2 Encoding lag
If you encounter encoding lags, your CPU can't handle your OBS settings and the game at the same time.
To reduce the CPU load of the encoder, you can do one or more of the following steps:
reduce OBS framerate
reduce OBS resolution
choose a faster x264 preset
switch to GPU based encoder (NVENC for example)
limit ingame fps (which you should do anyway, see "4.1 Rendering lag")
High bitrates and fast motion will also increase encoder load, but reducing bitrate or not moving in your game might not be a useful solution :-)
4.3 Bandwidth problems
This can be caused by choosing a higher bitrate than your upload speed can handle (don't forget that audio bitrate will be added on top of your video bitrate and your game, discord, teamspeak also needs some upload).
It can also be caused by problems with some Twitch servers, or some other nodes on your route to the server or simply by packet loss and ISP problems in general.
More details:
https://obsproject.com/wiki/Dropped-Frames-and-General-Connection-Issues
5. "Gaming" Monitor + 60Hz Monitor
Windows doesn't handle GPU accelerated programs on a multi-monitor setup with different refresh rates very well.
If you run a game on a 144Hz monitor for example and you have a second monitor with only 60Hz, this will work, as long as you use fullscreen mode in the game and you don't open a program with GPU acceleration on the 60Hz monitor at the same time.
GPU accelerated programs can be OBS with preview, web browser with youtube/twitch or other video content.
So maybe you need to disable hardware acceleration in your web browser and disable OBS preview, if you have those programs on your 60Hz monitor.
6. Problems with Sources and Devices/Drivers
Try to avoid window_capture or monitor_capture, if you can use game_capture, as game_capture will provide the best performance. Some programs will not work with game capture, so you need to switch to window or monitor capture but at least try game capture first.
Avoid having game capture, window capture and monitor capture or having multiple game capture sources in the same scene.
Did you know, that you don't need to configure game capture to use a specific game/process? It will hook whatever game it can find, so you only need one game source.
Tip: The multi adapter compatibility option for game capture is meant for computers with more than one GPU, not for systems with one GPU and multiple monitors :-)
Browser sources can cause problems as well. Try to use as few as possible and check your CPU+GPU load with and without those browser sources, to identify possible problems. You might find a "number of memory leaks" at the end of your OBS log file. This usually comes from browser sources and a few memory leaks are no problem. If you see a high amount (>70 for exampe) of memory leaks, check your browser sources.
If you encounter high CPU load, when starting OBS, without even recording/streaming and you already checked your browser sources, than it might be a device driver that causes this CPU load.
Remove webcam/capture card sources from OBS and see if it helps. If you can identify the device, that is causing the CPU load, you should check for driver updates and maybe reduce the webcam resolution (as 1080p for a small webcam picture in a 720p stream is not necessary).
7. New scene collection to identify problems
If you already have a big scene collection with many scenes and even more sources in those scenes and you encounter some problems, I suggest that you create a new scene collection that will start empty.
Just add one scene in there (game_capture for example) and test your recording/stream again.
If it is working fine, you can add your next source to the scene (maybe the webcam) and test again.
This way you can find out which source or filter might cause problems and remove or change it in your original scene collection.
Last edited: