Optimizing Image Quality in Post Production

Image quality and accuracy are pinnacles to a proper post production workflow. It’s also true that online video content is considered the wild west when it comes to standards, making quality and accuracy a difficult objective. So we’re here to help. This article focuses on a specific pipeline that will enable you to obtain color accurate results with a high quality image.

It’s worth noting that this article is directed towards a post production environment. Our recommendations here assume you have a robust broadcasting computer system and a high quality internet connection. For on-set streaming recommendations, please see this article about bitrate.

Image Quality

We define image quality as the following: high resolution, low compression, smooth playback, low latency, and color accuracy. To start, we recommend taking advantage of our WebRTC OBS Studio app. We also have this tutorial showing you the basics of how to get started with this streaming method. This is a customized app that allows you to stream in ultra-low latency, while taking advantage of all the features of OBS Studio. Let’s break down each of these aspects of image quality.

Resolution

SetStream.io is Resolution-agnostic. You can stream an image of any shape or size. Your only limitation is your capture device, your broadcasting computer spec, your viewer’s computer spec, and your internet connection quality. OBS allows you to set any desired resolution.

Compression

Bitrate is the primary way to control your compression. For a 1080P stream, you’ll want to set your encoder to at least 4Mbps. For final finishing work, 8Mbps will provide a cleaner image. For a 4K image, 8Mbps is a reasonable starting point with 16Mbps as a high quality option. These numbers are just guidelines. You’ll want to experiment with what is ideal for your workflow.

Smooth Playback

Smooth playback is determined by a few things. If your computer is under-powered it won’t be able to encode complex video smoothly and may result in dropped frames. You’ll also lose frames if you’re streaming via WebRTC and have a bitrate that is higher than what your or your client’s connection can support. Lastly, for the smoothest playback you’ll want to make sure OBS is set to the same frame rate as your video source. A mis-match can create stuttered video.

Low Latency

Latency isn’t a factor of image quality directly, but it is directly tied to your experience in communicating well with people on the other end of the line. When streaming via RTMP, it’s possible to get down to a 500 millisecond delay, which is pretty good. But if your internet connection is “dirty” (meaning that you have good bandwidth, but there are dropouts and inconsistency in the connection) the latency can balloon over time. A bandaid to fix this problem is to regularly stop and restart the stream.

Alternatively, you can stream via WebRTC using our browser or custom OBS Studio version available here. WebRTC is not only the lowest latency option, but it doesn’t suffer from progressively worsening latency. WebRTC provides between 200 and 500 milliseconds of latency.

Color Accuracy

Color accuracy is critical particularly for color workflows. When dealing with client’s consumer displays, it’s particularly difficult to obtain truly perfect color accuracy. But there are several things we can do in our SetStream pipeline to maintain as accurate results as possible. We’ll discuss this in detail below.

OBS Best Practices

Let’s go through the settings in OBS to optimize for image quality. We’ll go through each tab of the Settings.

  • Streaming Tab
    • Select VP8 or VP9 as your codec. VP9 is better quality, but is not supported on all browsers. So we recommend VP8 as a standard.
  • Output Tab
    • Mode: ‘Advanced’
    • Rate Control: CBR
    • Bitrate: depends on your and your client’s internet connection. Higher bitrate will improve overall quality. It will also reduce any dropped frames from complex video. If you seeing stuttered video or dropped frames, raise the bitrate.
  • Video Tab
    • Base Resolution: Match your video source
    • Output Resolution: Match your video source
    • Common Frames Per Second: Match your video source
  • Advanced Tab
    • Color Space: 601 (VP8/9 use Rec.601 color space. Setting this to 601 will convert your video content correctly to Rec.601. Your client’s browsers will then convert the image back to Rec.709.
    • Color Range: If your clients are on iOS or Desktop Safari, set this to Full Range. For all other browsers and OSes, set it to Partial

Now let’s talk about our source settings. In the main UI of OBS Studio you’ll see a ‘Sources’ area. When you add a source the odds are you’ll either be using a ‘Blackmagic Device’ or ‘Video Capture Device’.

  • Video Capture Device
    • Uncheck ‘Use Preset’ and select the resolution and frame rate of your source
    • Color space: Usually this should be Rec.709
    • Video Range: In almost every case this should be ‘Partial’. However a device such as ATEM Mini/Pro delivers a Full Range image and you’ll want to set ‘Full’.
  • Blackmagic Device (most of these will be automatically set)
    • Make sure Color Space is set correctly, usually Rec.709
    • Color Range default is usually correct

Client Devices

For best color accuracy we recommend iOS devices or MacOS computers running Chrome. We recommend not mixing/matching due to the Full Range/Partial settings difference between iOS and desktop Chrome. Viewing on iOS will give you approximately Rec.709 2.2 image. The same is true of MacOS+Chrome. You’ll also want to disable True Tone, Auto Brightness mode and Night Shift.

Calibration and LUTs

For more accurate results you can do an ICC calibration on a MacOS computer via xrite or Spyder products. Chrome will use the ICC profile via ColorSync.

To obtain perfectly calibrated results, you can add a display-specific LUT either to your upstream source, or inside of OBS Studio using the LUT filter. Right click on your source and select ‘Filters’. OBS uses a PNG based LUT format. This only works if you have a single client viewer as the LUT will be adjusting the image going out to all viewers.

You can also create a 2.2-2.4 conversion LUT so your client viewers are watching Rec.709 2.4 instead of 2.2.

 

Conclusion

The recipe for high quality and accurate imagery isn’t rocket science. But it does require care. Missing one setting could be the difference between accurate and inaccurate viewing. It could mean the difference between a smooth client experience and one where everyone wants to pull their hair out. Using our recommendations above for broadcasting via WebRTC OBS Studio should generate good results assuming you have a modern computer, good internet connection, and a quality video source. And as always, reach out to our support team if you have any questions.