How to record at a lower resolution without rescaling?

captainmorgan

New Member
My GPU is capable of outputting mutliple resolutions. My primary monitor is 2560x1440. I'd like to screen capture at 1920x1080. Is there a way for OBS to tap off a second feed from the GPU at a lower resolution?

Or if I plug in a second monitor can I mirror my main display at a lower resolution?
Or will a capture card allow me to achieve this goal?
Or is there another way?

Thanks
 

TomB

New Member
To do that you'll need rescaling somewhere. You could probably mess around with xrandr to achieve this, but then you're just doing the rescaling in xrandr rather than obs so you won't have achieved anything really.

You could record a 1920x1080 rectangle of your 2560x1440 screen without rescaling.

A capture card will also not allow you to do what you want. While it will convert 1440p to 1080p, you'll just have moved the rescaling to the capture card.
 

captainmorgan

New Member
If I set my display resolution to 1920x1080, everything still looks fine but bigger. I assume this is using some kind of scaling too? This is what I want to achieve but when using scaling in OBS the quality is really poor.
 

TomB

New Member
If I set my display resolution to 1920x1080, everything still looks fine but bigger. I assume this is using some kind of scaling too? This is what I want to achieve but when using scaling in OBS the quality is really poor.

If you change the screen resolution, the scaling is being done by your monitor. Your monitor has a set number of pixels, if you run another resolution, it will try to map the 1920x1080 pixels in the image to the 2560x1440 pixels on the screen. In some cases this works well (e.g. if you had a 2160p screen, the mapping would be 1:4 and it would look ok) in others, such as yours the image quality will suffer because there isn't an exact mapping because the resolution is ~1.33 times bigger there is no exact pixel mapping so some pixels will be wrong.

This might look better in the video because the video is taking a 1080p source image and saving it as 1080p, but it will look worse on your screen. Anyone looking at the video is then seeing an unscaled image (provided they are viewing it fullscreen on a 1080p display, or exactly 1/4 of the screen on a 2160p display, etc)

I'd test it an find out. Scaling down usually produces decent results, record the same thing at both resolutions with a 1080p output resolution and see how it looks.

Alternatively, set your screen resolution to 1440p and set the canvas size in OBS to 1440p and you'll get no scaling either.
 

captainmorgan

New Member
I've done lots of tests and it always looks bad if I use OBS scaling or scale the video after with another encoder. Recording at full resolution (1440) looks fine, but I want to record at 1080p because a lot of my viewers watch on smaller screens and can't make out parts of the video when I record on my large screen.

I have a second monitor which can run at 1080p and I'd tried to setup a mirrored screen so I could work at full res but record from the smaller monitor but it didn't work. The second monitor either automatically jumped to 1440 to match my main screen or it would just give me a 1080 box of the top corner of my main screen.
 

TomB

New Member
You might want to consider just making the screen bigger. Depending on which desktop environment you're on there is a display scaling option that will scale all fonts, windows, etc. You could scale to 1.5x or similar and record that.
 

Tregarth

New Member
Hello,
I've got a similar problem. Fedora 33, Wayland. Latest OBS 26.0.2. I've just updated nvidia drivers 455.45.01 to support kernel 5.9.x (I've got 5.9.10-200).
I've got a NEC display with native resolution 1920x1200. And when I'm using full screen capture I can see in "Screen Capture (XSHM)" that it is recognized resolution.
Now, I would like to capture 1920x1080 - I'm going to nvidia-settings, switching the display to "1920x1080 (scaled)" (this is how it is called in nvidia-settings) and applying the new resolution. But full screen capture still see 1920x1200. I did the same test in Windows - I'm switching to 1920x1080 and then (even without any restarts) OBS see 1920x1080 and I can record standard 16:9 instead of 16:10.
It seems that the value of changed resolution is read from somewhere where nvidia-settings is not updating it. I've also tried to save the changes into the configuration file: /etc/X11/xorg.conf but it didn't work either.
So, the question might be: from where OBS is reading the current resolution for full screen capture?
@captainmorgan - did you tried to switch the resolution in display settings? is there an updated resolution in screen capture in sources pane?
 

Tregarth

New Member
Any hint? I've just checked vokoscreenNG and it recognizes the screen size properly as 1920x1080 and I can easily record full screen after changing the resolution in nvidia-settings. With OBS it's not possible at all - after changing the resolution all froze in preview and the same is in output - I can see only a black screen OR frozen one screen from the time when I've changed the resolution.
 

Tregarth

New Member
OK, I think I've got a workaround solution. I'm changing the resolution of the screen to 1920x1080.
When creating a new ScreenCapture (XSHM), which still shows 1920x1200 resolution, I'm adding 60 in top and bottom crop pixels. Change the output to 1920x1080 in both: Base (Canvas) and Output (Scaled) resolutions and do not let to scale on the Output>Recording tab in settings (Rescale Ouput is not checked).
I can, again, record 1920x1080. I don't know why this stopped working properly - I've tested this some time ago (around February this year) and it worked properly by detecting the screen as 1920x1080 without the need of such changes...
 

FunkyBrewster

New Member
Can anyone summarize which method will give the best re-scale quality in the output file when screen recording a streaming video source that is lower than your monitor's native resolution? I guess I need to try all options and see which looks the best, but I was wondering what settings other people preferred. These are the options I can think of:

a) Monitor Re-scale
System screen resolution and OBS's Video > Base and Output Resolutions all set to values as close as possible to the source video's resolution (Downsides: screen resolution can't always match it exactly, and sometimes it's hard to know exactly what the original resolution is).

b) OBS Video Re-scale
System and OBS's Base resolution: set to monitor's native resolution.
OBS's Output resolution: set to the source video's resolution.
Use the best Downscale Filter that your system can handle.

c) Encoder Re-sacle
System, OBS's Base and Output: all set to monitor's native resolution.
Output > Recording (Output Mode: Advanced) > Rescale Output: same as the source video.

In my case, I'm screen recording streaming videos that are 540p, 720p, or 1080p and my monitor is 2160p. I've been using method a) because it seemed the easier to change one setting, but after reading this thread I feel like that might not be the best approach. I'm using the StreamFX Encoder NVIDIA NVENC H.265/HEVC (via FFmpeg) on a GeForce GTX 1660ti with Max-Q on a Corei7 laptop.
 

FunkyBrewster

New Member
I did some test recordings with a 540p video (easiest to spot degradation) and here's what I found.
TL;DR: Use option a) above, and if the exact resolution of the video isn't an option for screen resolution, use a multiple of it.

First, the system screen resolution needs to match the source video or there will be some "blockiness" burned in to the output video. If there is no setting equal the video, use a multiple as TomB explained. E.g. if the source is 540p, 540 x 2 = 1080, so 1080p looks much better than 720p.

The native resolution of the monitor doesn't appear to affect the captured video (except that it is the maximum resolution you can use; I said "Monitor Rescale" but it's actually "Screen Rescale"). Using 1080p screen and output resolution did increase the output file size. If that becomes an issue, I'll sooner decrease the bitrate than drop the resolution.

Second, set OBS's Base and Output resolutions to the same as the screen. If the video has been upscaled to the screen resolution, re-downscaling it here introduces ugly artifacts. Ditto for the Recording Output (Encoder).
 
Top