Question / Help Pixelated stream while moving (just started)

My stream quality was “ok” while using nvenc but would have parts of them stream somewhat pixelated. I watched some YT videos on how to stop that and changed my encoder to x264, increased my bit rate to 4000, encoder preset to very fast, down-scaled from 1080 to 720 using lanczos at 59.4 fps. My viewers were complementing me on how clear the game looked so I didn't want to change anything else. Last night I tried to start recording while streaming using NVENC, 8k bit rate CBR (just read that I should of used CQP so don't hate on me), .mp4, 1080p, all being recorded to a SSD. I didn't notice anything different in game but started getting a lot of people complaining of bad quality. I stopped recording, lowered my bit rate (thought I might of had the case of throttling) all with no increase in quality. So today before I started, I dropped my fps down to 30, bit rate to 3800, and didn't record while streaming. It was worse! When I stood still, it looked extremely crisp but when I would move, the game looked pretty rough. I thought it could of been from the in-game affects from the pain-pills since it makes the contrast so high that even very high end computers, from much larger streamers, have pixelated streams. This wasn't the case since my face was the same quality. I changed the CPU preset to ultra-fast, and it helped out a lot but still a decent amount of artifacts on screen. My specs are as follows:
CPU: i7-4790k (not overclocked)
Ram: 32 GB
GPU: 1070 FE
3 ssd's and 2 hdd's
Ill link to my log files below as well. I hope someone can point my crayon eating behind in the right direction and many many thanks to that person in advance.

https://gist.github.com/05a35bf8c7a9d222cb0a2a4719b46576
 
In your logfile I noticed you have Windows GameDVR enabled. This may be a cause of the performance issue as even when you are not using it, just having it enabled in Windows settings it will always hook into the game process and commit resources (Similar to what OBS does when OBS is open, though more aggressively as it also buffers for replay recording)

If you don't already:
Limiting your frame rate in-game will help a lot in getting the best quality out of your hardware in regards to recording/streaming. I recommend using MSI AfterBurner or EVGA Precision to cap your fps to your monitor refresh rate, or 1-3 frames higher than your monitor refresh rate will generally resolve the issue of screen tearing. Try to avoid V-Sync as it can induce input lag.

The below options will allow you to record in 1080p60fps, stream in 720p60fps:

In Video Settings:
Base (Canvas) Resolution: 1920x1080
Output (Scaled) Resolution: 1920x1080
Downscale Filter: Lanczos
FPS Value: 60
In Output - Stream Settings:
Encoder: x264
Enforce stream service encoder settings: unchecked
Rescale Output: Checked, 1280x720
Rate Control: CBR
Bitrate: 3500
Keyframe Interval: 0 or 2
CPU Usage Preset: veryfast
Profile: High
Tune: None or Film/Animation (This configures the encoder options slightly for more de-blocking, may help with heavily contrasted areas, smooth surfaces, smoke, etc - YMMV depending upon the game/application you record/stream)
x264 Options: None/Leave Blank
In Output - Recording Settings:
Encoder: NVENC
Rate Control: CQP
CQP: 15-25
Preset: High-Quality
Profile: high

Given you have a 4790k (Overclocking it will help in doing simultaneous recording and streaming) and a GTX 1070, your system should be able to handle the workload.

You should not be forcing compatibility mode (Now X-Fire/SLI mode in the latest version of OBS) as it forces the capture method of using RAM, which is far less efficient than directly grabbing the frame from the video card and will be detrimental to performance. The only time you should have need for compatibility mode is if you have a SLI/X-Fire setup or if you can't directly hook via Game/Window Capture into a process to record/stream.

In your log file you have several scenes that have both Game/Window Capture and Monitor Capture as sources:

Game capture grabs the frame directly from the graphics card for OBS to encode before sending it back to the graphics card for final rendering of the frame.
Monitor capture has the graphics card write the frame to system RAM (Which is really slow to write/read from) before OBS grabs it to encode, then sends it back to the graphics card to render for final output.

If you want to use Monitor Capture, you should create a scene for it by itself without any other capture methods included in that scene.

Can you post an updated logfile after trying those above settings out, with a few minutes' worth of recording/streaming (Doing what you would normally do in-game) then stopping the recording/streaming session.

I hope this helps you out!
 
I've adjusted the settings and will run a test stream during lunch. I thought I already turned off game DVR, but went in again and turned everything to off. I'm not sure how/why I've been running forced compatibility mode and not sure how to correct that. I cleaned up my sources in that particular scene, with only one game capture and req'd images/browser sources. When recording should I have the 2 pass encoding on and not sure what b-frames are so I just left it to default as well. To sum up the above mumble... How do I stop running in forced comp. mode? 2-pass enc. or not? bi-frames at 2? Should I be using mp4 as my recording format? If not not sure how to watch flv/mkv.
 
08:23:45.070: CPU Name: Intel(R) Core(TM) i7-4790K CPU @ 4.00GHz
08:23:45.070: CPU Speed: 4080MHz
08:23:45.070: Physical Cores: 4, Logical Cores: 8
08:23:45.070: Physical Memory: 32640MB Total, 25171MB Free
08:23:45.071: Windows Version: 10.0 Build 16299 (revision: 248; 64-bit)
08:23:45.071: Running as administrator: true
08:23:45.071: Aero is Enabled (Aero is always on for windows 8 and above)
08:23:45.071: Windows 10 Gaming Features:
08:23:45.071: Game Bar: Off
08:23:45.071: Game DVR: Off
08:23:45.071: Game DVR Background Recording: Off
08:23:45.074: Sec. Software Status:
08:23:45.075: Windows Defender Antivirus: disabled (AV)
08:23:45.075: Norton Security Suite: enabled (AV)
08:23:45.075: Windows Firewall: disabled (FW)
08:23:45.075: Norton Security Suite: enabled (FW)
08:23:45.075: Windows Defender Antivirus: disabled (ASW)
08:23:45.075: Norton Security Suite: enabled (ASW)
08:23:45.075: Portable mode: false
08:23:45.090: OBS 21.0.1 (64bit, windows)
08:23:45.090: ---------------------------------
08:23:45.099: ---------------------------------
08:23:45.099: audio settings reset:
08:23:45.099: samples per sec: 48000
08:23:45.099: speakers: 2
08:23:45.100: ---------------------------------
08:23:45.100: Initializing D3D11...
08:23:45.100: Available Video Adapters:
08:23:45.101: Adapter 1: NVIDIA GeForce GTX 1070
08:23:45.101: Dedicated VRAM: 4185915392
08:23:45.101: Shared VRAM: 4227878912
08:23:45.101: output 1: pos={0, 0}, size={1920, 1080}, attached=true
08:23:45.101: Adapter 2: Intel(R) HD Graphics 4600
08:23:45.101: Dedicated VRAM: 117964800
08:23:45.101: Shared VRAM: 2147483648
08:23:45.102: Loading up D3D11 on adapter NVIDIA GeForce GTX 1070 (0)
08:23:45.125: D3D11 loaded successfully, feature level used: 45056
08:23:45.619: ---------------------------------
08:23:45.619: video settings reset:
08:23:45.619: base resolution: 1920x1080
08:23:45.619: output resolution: 1280x720
08:23:45.619: downscale filter: Lanczos
08:23:45.619: fps: 30/1
08:23:45.619: format: NV12
08:23:45.620: Audio monitoring device:
08:23:45.620: name: Default
08:23:45.620: id: default
08:23:45.620: ---------------------------------
08:23:45.622: Required module function 'obs_module_load' in module '../../obs-plugins/64bit/chrome_elf.dll' not found, loading of module failed
08:23:45.623: [CoreAudio encoder]: CoreAudio AAC encoder not installed on the system or couldn't be loaded
08:23:45.665: [AMF] <obs_module_load> AMF not supported (no AMD graphics)
08:23:45.665: Failed to initialize module 'enc-amf.dll'
08:23:45.681: Required module function 'obs_module_load' in module '../../obs-plugins/64bit/libcef.dll' not found, loading of module failed
08:23:45.682: Required module function 'obs_module_load' in module '../../obs-plugins/64bit/libEGL.dll' not found, loading of module failed
08:23:45.682: Required module function 'obs_module_load' in module '../../obs-plugins/64bit/libGLESv2.dll' not found, loading of module failed
08:23:45.683: Failed to load 'en-US' text for module: 'obs-browser.dll'
08:23:45.683: [browser_source: 'Version: 1.29.0']
08:23:45.687: NVENC supported
08:23:45.717: Couldn't find VLC installation, VLC video source disabled
08:23:45.719: No blackmagic support
08:23:45.867: ---------------------------------
08:23:45.867: Loaded Modules:
08:23:45.867: win-wasapi.dll
08:23:45.867: win-mf.dll
08:23:45.867: win-ivcam.dll
08:23:45.867: win-dshow.dll
08:23:45.867: win-decklink.dll
08:23:45.867: win-capture.dll
08:23:45.867: vlc-video.dll
08:23:45.867: text-freetype2.dll
08:23:45.867: rtmp-services.dll
08:23:45.867: obs-x264.dll
08:23:45.867: obs-vst.dll
08:23:45.867: obs-transitions.dll
08:23:45.867: obs-text.dll
08:23:45.867: obs-qsv11.dll
08:23:45.867: obs-outputs.dll
08:23:45.867: obs-filters.dll
08:23:45.867: obs-ffmpeg.dll
08:23:45.867: obs-browser.dll
08:23:45.867: image-source.dll
08:23:45.867: frontend-tools.dll
08:23:45.867: enc-amf.dll
08:23:45.867: coreaudio-encoder.dll
08:23:45.867: ---------------------------------
08:23:45.867: ==== Startup complete ===============================================
08:23:45.871: All scene data cleared
08:23:45.871: ------------------------------------------------
08:23:45.898: WASAPI: Device 'Headset Earphone (HyperX Virtual Surround Sound)' initialized
08:23:45.908: WASAPI: Device 'Microphone (Yeti Stereo Microphone)' initialized
08:23:45.960: adding 42 milliseconds of audio buffering, total audio buffering is now 42 milliseconds
08:23:46.222: ---------------------------------
08:23:46.222: [DShow Device: 'Logitech Webcam'] settings updated:
08:23:46.222: video device: C922 Pro Stream Webcam
08:23:46.222: video path: \\?\usb#vid_046d&pid_085c&mi_00#6&d277f92&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global
08:23:46.222: resolution: 640x480
08:23:46.222: fps: 30.00 (interval: 333333)
08:23:46.222: format: YUY2
08:23:46.224: [window-capture: 'Chrome'] update settings:
08:23:46.224: executable: chrome.exe
08:23:46.229: [Media Source '(null)']: settings:
08:23:46.229: input:
08:23:46.229: input_format: (null)
08:23:46.229: is_looping: no
08:23:46.229: is_hw_decoding: yes
08:23:46.229: is_clear_on_media_end: yes
08:23:46.229: restart_on_activate: yes
08:23:46.229: close_when_inactive: no
08:23:46.240: Switched to scene 'Gaming Overlay'
08:23:46.241: ------------------------------------------------
08:23:46.241: Loaded scenes:
08:23:46.241: - scene 'Stream Starting':
08:23:46.241: - source: 'yt' (browser_source)
08:23:46.241: - scene 'Gaming Overlay':
08:23:46.241: - source: 'EFT' (game_capture)
08:23:46.241: - filter: 'Color Correction' (color_filter)
08:23:46.241: - source: 'Miscreated' (game_capture)
08:23:46.241: - source: 'Logitech Webcam' (dshow_input)
08:23:46.241: - filter: 'Chroma Key' (chroma_key_filter)
08:23:46.241: - filter: 'Chroma Key2' (chroma_key_filter)
08:23:46.241: - filter: 'lime chroma key' (chroma_key_filter)
08:23:46.241: - filter: 'Crop/Pad' (crop_filter)
08:23:46.241: - filter: 'Color Correction' (color_filter)
08:23:46.241: - filter: 'Color Key' (color_key_filter)
08:23:46.241: - source: 'Overlay' (image_source)
08:23:46.241: - source: 'Recent Dono' (text_gdiplus)
08:23:46.241: - source: 'Recent Follower' (text_gdiplus)
08:23:46.241: - source: 'Alerts' (browser_source)
08:23:46.241: - source: 'Display Capture' (monitor_capture)
08:23:46.241: - filter: 'Color Correction' (color_filter)
08:23:46.241: - scene 'BRB':
08:23:46.241: - source: 'BeRightBack' (browser_source)
08:23:46.241: - scene 'chrome YT':
08:23:46.241: - source: 'Chrome' (window_capture)
08:23:46.241: - source: 'Game Capture' (game_capture)
08:23:46.241: - source: 'Display Capture' (monitor_capture)
08:23:46.241: - source: 'Logitech Webcam' (dshow_input)
08:23:46.241: - filter: 'Chroma Key' (chroma_key_filter)
08:23:46.241: - filter: 'Chroma Key2' (chroma_key_filter)
08:23:46.241: - filter: 'lime chroma key' (chroma_key_filter)
08:23:46.241: - filter: 'Crop/Pad' (crop_filter)
08:23:46.241: - filter: 'Color Correction' (color_filter)
08:23:46.241: - filter: 'Color Key' (color_key_filter)
08:23:46.241: ------------------------------------------------
08:35:10.587: ---------------------------------
08:35:10.588: video settings reset:
08:35:10.588: base resolution: 1920x1080
08:35:10.588: output resolution: 1920x1080
08:35:10.588: downscale filter: Lanczos
08:35:10.588: fps: 60/1
08:35:10.588: format: NV12
08:35:10.594: Settings changed (outputs, video)
08:35:10.594: ------------------------------------------------
08:36:26.314: User Removed source 'Miscreated' (game_capture) from scene 'Gaming Overlay'
08:36:36.211: User Removed source 'Display Capture' (monitor_capture) from scene 'Gaming Overlay'
08:36:49.186: User switched to scene 'chrome YT'
08:36:53.451: User switched to scene 'BRB'
08:36:53.451: User Removed scene 'chrome YT'
08:36:54.479: User switched to scene 'Gaming Overlay'
08:36:55.642: User switched to scene 'Stream Starting'
Here is the current log file before test stream. Everything look squared away?
 
In a 30 min test stream I had 4 moderate drops (54-57) in frames (according to Twitch Inspector) and 2 small ones (58-59). I still averaged 60fps, but the stream didn't look all that great. It looked better than last nights but still pixelated. Anything else I could do?
 
Sorry for late reply, I'm in Australia so guessing big difference in time zone.

You should leave B-Frames at 2, your NVENC encoder should have no trouble at all in handling that and it will provide better quality output and compression in the recording.
Below is a link to Wikipedia's Video Compression Types page, to provide an explanation of I, P & B frames:
https://en.wikipedia.org/wiki/Video_compression_picture_types
Below is a link to an archived thread from Doom9 forums (Really handy forums for info on encoding etc - Lots and lots of info) that provides a more verbose explanation:
http://forum.doom9.org/archive/index.php/t-19436.html

2-Pass encoding is a method to try and optimize the bitrate placement to provide better quality in the final display image of each frame that is rendered. during the encoding process, in order to achieve a better quality to bitrate usage ratio for the whole output.
Below is a link to give a much better explanation of 2-Pass encoding, from Wikipedia:
https://en.wikipedia.org/wiki/Variable_bitrate#Multi-pass_encoding_and_single-pass_encoding

Most important thing to do first is to stabilize your stream output, then work on quality improvement:

You have some very minor bandwidth related frame drops (0.9%)
Can you go to the below site and download r1ch's TwitchTest utility, then run it with your region checkbox selected. It will assist you in making sure you have selected the best Twitch ingest server based upon your location:
https://r1ch.net/projects/twitchtest
Always give first priority for highest RTT (Round Trip Time) then second priority for lowest ping when selecting an ingest server.

You still have some very minor rendering lag (0.6%)
Once we sort out bandwidth issues, will try to fine-tune settings to get rid of the rendering lag.

In-game did you have those fps drops as well?
How was the recording output?

Can you do a 3-5 minute test stream/record (Using current settings, don't change anything) with a fresh OBS logfile output please (Just need to close and start OBS so it creates a new logfile) then once the test stream/record attempt is done can you please close OBS, then start OBS again and upload the last logfile. Doing so will provide the profiler analysis portion of the logfile and will include memory leak number, which we can try to improve on if needed.
 
Sorry forgot to answer your two other questions:

Using .mp4 file format is also not the best idea as when there is a crash of OBS/system your recording is pretty much completely useless. Use .flv for single audio track recordings, .mkv for multi-track audio recordings as they will be recoverable to almost the entirety of the recording in the event of a crash of OBS/system.
.flv and .mkv are the two most widely used formats and should have no issues with uploading raw files to YouTube if you want. If you want to trans-code back to .mp4 there is the option within OBS to do so:
File tab ---> Remux Recordings
You can also change the file title of the output remux when selecting the output file location.

To remove forced compatibility mode, right-click your target source (Game/Window/Monitor Capture) in the source window and select Properties. You will see in the new window the option of SLI/Crossfire capture mode (Latest version of OBS, Force Multi-Adapter Compatibility for prior versions) which you just need to un-check the checkbox.
 
Removed forced comp. mode and thank you VERY MUCH for the info. I did the test and Miami, Fl was the best with 100 quality and the lowest RTT. I switched to Miami, FL and ran the above recommendations but still getting some choppy/pixelations. All while I have low gpu/cpu usage. My upload is 26.7mps and since bumped my bitrate to 3800 and have been playing around with Qsync/NVENC and basically changing settings then restarting stream. TBH, nvidias encoder looked better (might of been qsync... I've been reasearching, inputing different settings, starting and stopping stream... not writing down what settings do what to the quality). I can change to the Miami, Fl server, run your rec. settings, and re-send log if that would help you.
 
Sorry to copy/paste then edit,

Can you do a 3-5 minute test stream/record (Using settings I suggested, changing to Miami, Fl ingest server) with a fresh OBS logfile output please (Just need to close and start OBS so it creates a new logfile) then once the test stream/record attempt is done can you please close OBS, then start OBS again and upload the last logfile. Doing so will provide the profiler analysis portion of the logfile and will include memory leak number, which we can try to improve on if needed.
 
From the streaming attempt:
13:41:21.663: Output 'adv_stream': Total frames output: 42776
13:41:21.663: Output 'adv_stream': Total drawn frames: 42835 (42858 attempted)
13:41:21.663: Output 'adv_stream': Number of lagged frames due to rendering lag/stalls: 23 (0.1%)
From the recording attempt:
13:41:22.213: Output 'adv_file_output': Total frames output: 42446
13:41:22.213: Output 'adv_file_output': Total drawn frames: 42457 (42473 attempted)
13:41:22.213: Output 'adv_file_output': Number of lagged frames due to rendering lag/stalls: 16 (0.0%)
13:41:22.215: Video stopped, number of skipped frames due to encoding lag: 15/42840 (0.0%)

I would say your encoding lag is mostly due to the game not being optimized, from what I have read so far about EFT is it mostly uses 1-2 cores. This is something you cannot do anything about, you will have to wait for the game engine to be updated and optimized for multi-core processors.

Just making sure, you do cap your fps to 60 in-game whilst recording/streaming? If not then it should actually be all you need to do given the minor frame drops you have.
If you do cap your fps already, I think just need to fine-tune some in-game options and you should be able to get a smooth output for simultaneous recording/streaming.

Best way to do that is to run your game without a frame limiter (not recording/streaming either) and individually test each setting to find the sweet spot, whilst running a pre-defined 'benchmark' route where you have three locations:
First is a starting location:
- This can be anywhere you want, any type of scenery you want I generally choose the spawn-in location unless it is too far from the second location to get to within 1-2 minutes' time of running)
Second is a heaviest on fps location:
- This will be in the center of your benchmark route, It requires to be far enough away from the starting location that it has to be rendered whilst running to it (This location will generally have lots of debris/foliage/smoke/particle effects, shadows, lighting, etc)
Third location is a turn-around location:
- This will be the mid-point of your benchmark in regards to time duration of the route:
- The only requirement is it has to be far enough from the second location in order for it to be re-rendered again when you turn around (I generally choose a high vantage point for the turn-around location, so when you turn around the game has to render everything across the area you ran through)

That way you have a good consistency in regards to fps values, as well as a defined area for testing the effects of the settings in regards to quality of graphics changes.
It is always better if you can do the testing offline or on an empty map (If that is possible with EFT)

As a general rule of thumb you want roughly 10-15% higher frames than what you stream/record at, so you have headroom for the reduction in fps recording or streaming causes in heavy fps areas. Because you are doing both simultaneously I would look for around ~75-80fps minimum when testing settings (maybe even 80-85fps due to lack of game optimization) as the game is multiplayer.

Last thing to do after making sure you have got rid of the remaining rendering lag:
For your stream output quality:
- You should be able to bump up the bitrate a tad, start with increments of 500 and do a few minutes' worth of testing each time, checking for the below line:
- Output 'adv_stream': Number of dropped frames due to insufficient bandwidth/connection stalls:
Once you start seeing that line then just drop down 500kb and test for double the length of time and check again, if it crops up again then drop down another 250 and re-test just to make sure the dropped frames are gone.
For your recording output quality:
- Just lower CQP value, below 15 is really placebo territory. If possible try not have the recording being written to the same HDD/SSD as the game or OS is on.
 
Back
Top