OBS Studio

A note on Mixer: the steps for setting up Mixer are largely the same as for Twitch, except Mixer supports a maximum of 10,000 Mbps bitrate compared to Twitch’s 6,000.

Be sure to read up on how Mixer does transcoding.

Getting started with OBS

First, download OBS Studio.

If you want the bullet-point OBS configuration, here it is:

(Higher bitrate does not affect performance. Slower encoding presets do.)

JackFrags’s video guides

Some prefer to learn by watching videos. No offence taken.

JackFrags’s OBS guide is a great place to start to make you comfortable with the interface and granular settings. Check out his video and then read the rest of the guide for the final tweaks.

Update Mar 28, 2018: BUT. This referenced guide has been removed.

Update Jul 26, 2016: He later released another one—although it focuses on recording:

Update Mar 28, 2018: BUT. This has also been deleted!

Instead, how about his third one:

Streamlabs OBS

In the future, you may want to check out Streamlabs OBS as an alternative to OBS Studio. Streamlabs claim to have optimized their software particularly for low bitrate (3000) and slow CPU presets (ultrafast).

One one hand, Streamlabs claim their OBS, SLOBS, is more user friendly than OBS Studio, but the catch is that it’s fairly unstable at this point in time—which isn’t very user friendly! Last time I tried to install it, the installer crashed. Go figure.

For now, get OBS Studio.

You can always try out SLOBS when it reaches v1.0.

Be aware that some people might recommend SLOBS to you over OBS for the sole reason that SLOBS offers affiliate rewards for referrals as of July 11, 2018.

Resolution and bitrate

Generally, 720p60 with 4,500 for streaming. Especially when you haven’t become an Affiliate/Partner. Then you can use 6,000.

For recording, your bitrate can be practically infinite.

There are cases where you can make the argument for an FPS lower than 60, but I won’t get into that here as those are edge cases.

Bitrate

A good way to think of your bitrate is in bpp, bits per pixel:

bpp = bitrate / (resolution * fps) * 1,000 <=>
bpp = bitrate / resolution / fps * 1,000

eg

4,500 / (1280 * 720) / 60 * 1,000 = 0.0814
6,000 / (1280 * 720) / 60 * 1,000 = 0.1085

A bpp of 0.1 is a good thing to aim for. 0.1 is not some magic sweet spot; but it’s a good way for you to think of your stream quality.

And more important, the equation of bpp is your way of remembering what affects your video quality.

With regard to performance, the bitrate is just your encoder’s target output size; a higher bitrate does not tax your hardware more. It only increases demand for faster internet for streaming, and more space for storage.

For more bpp info, do read /u/Oremm’s post.

A very important caveat is that if you’re not streaming videogames, and your stream doesn’t feature a lot of “action” on screen, encoding your video will require a lot easier.

A drawing livestream won’t need anywhere as high a bpp as one for gaming. With videogames, you’ll usually want it to be as high as possible, but with simpler streams, you may want to see how low you can push it by decreasing the bitrate or/and increasing the resolution.

For Twitch streaming

I recommend you start out with 4,500 if your internet connection can stomach it.

Why 4,500—especially when you need 6,000 for a bpp of 0.1?

As Affiliate and Partner, you get transcoding priority. This lets viewers lower the stream quality manually if the bitrate is too high for them. Since 4,500 used to be the old cap—for Partners—viewers are mostly used to this bitrate by now. Without transcoding, people can only watch that one version of your stream.

On top of everything else, for transcoding to kick in, you also need a certain minimum of viewers. This number varies depending on server load.

Once you become an Affiliate, however, set your bitrate to 6,000.

Don’t forget OBS supports changing the bitrate while streaming, so you can always start out at either bitrate and change it during your stream.

720p vs 900p vs 1080p

Short version: use 720p60 for starters. Feel free to skip the the next section.

As you can probably tell, I am not a fan of 1080p streams. There’s honestly no point to them as far as I’m concerned, and they result in inferior quality (low bpp).

At the time of writing around 2015: the bitrate for the highest non-Source video quality setting is still set to the same ~1,000—which makes sense but doesn’t help people whose desktop computer can’t handle the Source1 setting, because everything looks like ass.

They also discourage viewing streams with the chat, since you’ll need more than a 1080p monitor to show both the stream and chat side by side. And if people are going to resize their 1080p stream to fit the chat, why not just go with a smaller 720p in the first place? Also, the PS4 Twitch app is absolute garbage, so a lot of people will struggle to watch it on their TV. I’ve personally given up on using the app, and the Chromecast experience is reportedly not pleasant either.

According to Steam’s hardware survey from February 2017 and 2018, this is the size of people’s primary monitor:

Resolution Share ‘17 Share ‘18
1024×768 1.57% 0.51%
1280×720 0.71% 0.23%
1280×768 0.33% -
1280×800 1.50% 0.47%
1280×1024 3.86% 1.25%
1360×768 3.01% 1.07%
1366×768 24.09% 8.20%
1440×900 4.72% 2.04%
1536×864 1.16% 0.24%
1600×900 6.18% 2.12%
1680×1050 3.52% 1.43%
1920×1080 43.23% 76.47%
1920×1200 1.11% 0.42%
2560×1080 0.51% 0.72%
2560×1440 1.81% 3.40%
3440×1440 0.22% -
3840×2160 0.69% 0.49%
Other 1.80% 0.94%

The takeaway here is that 3.23% of Steam users have a (primary) monitor wider than 1080p—ie 1920px, since 1080p refers to the height.

Maybe you can make the case for a 1080p stream, but the rule of thumb should be to just go with 720p. With March 2017’s 6,000 bitrate cap, the decrease in bits per pixel from using 1080p is nowhere near is big a deal as it used to be, but the other disadvantages remain.

Here is how fast an Internet connection people, be they streamers or viewers, need to stream respective bitrates:

Bitrate Mb kB Note
1,000 kbps 1,0 Mb/s 125,0 kB/s “High” setting
1,500 kbps 1,5 Mb/s 187,5 kB/s  
2,000 kbps 2,0 Mb/s 250,0 kB/s  
2,500 kbps 2,5 Mb/s 312,5 kB/s  
3,000 kbps 3,0 Mb/s 375,0 kB/s  
3,500 kbps 3,5 Mb/s 437,5 kB/s Old non-partner cap
4,000 kbps 4,0 Mb/s 500,0 kB/s  
4,500 kbps 4,5 Mb/s 562,5 kB/s Old partner cap
5,000 kbps 5,0 Mb/s 625,0 kB/s  
5,500 kbps 5,5 Mb/s 687,5 kB/s  
6,000 kbps 6,0 Mb/s 750,0 kB/s New cap

To make things even quirkier, some people like Lirik and Moonmoon stream in 900p60. Anecdotally, I don’t find this to be better than 720p in any regard, but do what you want with this information.

Update Mar 29, 2017: Twitch are rolling out transcoding for everyone, so like the new 6k bitrate cap, it’s no longer Partners-only.

Keyframe interval

Set this to 2 seconds as specified in the Twitch broadcasting guidelines.

Keyframes might be better known to you as i-frames.

Video downscale filter

I want to put this in a separate section since most of the advanced info below is mainly for recording.

In your OBS settings, go to Video and set Downscale Filter to Lanczos instead of the default Bicubic.

By now, you should already have set your downscale resolution to something like 1280x720 and FPS to 60.

If you didn’t screw up anything and just want to stream, you can skip to the section “The Overwatch test” and return to the nitty-gritty stuff later.

Advanced OBS settings

With hardware (GPU) encoding, you may also have to change your Quality Preset from Balanced to Quality:

Set your “Quality Preset” setting to “Quality”, not “Balanced” for the best video quality

Back to JackFrags’s second OBS video. He offers four relevant suggestions:

  1. .mp4 instead of default .flv
  2. Lanczos downscale filter instead of the default
  3. NVENC H.264 encoder instead of the default for Nvidia users
  4. Multitrack audio
  5. Record to a separate drive

I’ve heard from Let’s Play people that they prefer .flv for recording, because .flv handles crashes better, which preserves hours of gameplay footage you would otherwise lose—something most people will experience at some point.

Unfortunately, .flv does not support multitrack audio, so you will have to weigh the pros and cons of the format for yourself. Besides, OBS Studio comes with a built-in remuxer to convert your .flv to .mp4 in seconds.

OBS also supports .mkv; you just have to remux it to .mp4, which isn’t too hard.

If you’re lazy and likely to bother with remuxing, you may just want to go with .mp4 since it tends to be the default for a lot of services like YouTube; the more you adhere to encoding guidelines, the fewer steps and degees of conversion your uploads will go through—which will likely reduce the quality of the final video.

Some people also suggest in their comparison of MKV to MP4 that .mp4 takes up less space of the. This means saving your video as .mp4 by default might save you some space. You can always remux it to .mkv within OBS when or if you need the file for other purposes. In the above link, .mp4 is also said to be easier on the computer to edit, which is a convenient way to optimize for computers that might otherwise struggle with .mkv.

Just keep in mind that .mp4 recordings are easily corrupted by interruptions whereas .mkv are not.

We all know .mkv to be a fantastic container format for local video playback, but our use case will generally be uploading and perhaps some light editing.

The Lanczos filter is the highest downscale setting of three, the default being the medium setting, Bicubic:

Overview of the downscale-filter settings

If you downscale your output from a higher resolution to 720p, turn on this filter to keep most text legible. It makes a big difference, even though it requires more of your computer.

Jack recommends using a GPU-based encoder, NVENC, which relieves the CPU of the task. Whatever I can glean about using GPU-native encoders—AMD cards have one, too, in VCE—is that, at least on older GPUs, they generally result in inferior video quality. Newer GPU generations may be vastly better, however, so give it a shot if you have a decent one.

If your CPU, like mine, can’t handle the encoding for recording or streaming in the first place, you’ll always have the GPU option.

If you want a deep dive on this, I recommend you check out this benchmark of different video encoders in OBS.

Remember the end result also depends on the bitrate. If you’re recording to upload, make the bitrate something high like 25,000 kbps so you retain more detail that can then be transcoded it to a smaller format—or kept as-is. Then you can also use a slower preset the second time around.

More on presets after the break below.

iGPU encoding

If you have an Intel CPU, they should come with an iGPU, an embedded GPU. They’re not great and use something called Quick Sync for encoding, so both performance and the rendering software is going to be lacking.

In order of preference, it’s still going to be in the order of CPU, GPU, and iGPU.

To find out more, read this iGPU OBS guide and this Linus video:

CPU presets

Beyond setting resolution, bitrate, and downscaling algorithm, in OBS, you can also change the preset for software encoding to improve video quality. The presets are parsed to ffmpeg which OBS uses for encoding. Well, technically everything uses ffmpeg for encoding.

The available presets are:

A preset is a collection of options that will provide a certain encoding speed to compression ratio. A slower preset will provide better compression (compression is quality per filesize). This means that, for example, if you target a certain file size or constant bit rate, you will achieve better quality with a slower preset. Similarly, for constant quality encoding, you will simply save bitrate by choosing a slower preset.

ffmpeg preset documentation

You can view the specific options for all ffmpeg presets in the repo a nice bloke compiled. Or this simplified preset overview.

The default in OBS is the veryfast preset, but if you find yourself with CPU usage to spare, try a slower preset—but don’t pick one that drops you below your 60/30 FPS. If you’re using a streaming PC, it literally makes no sense to use a slower preset if your CPU can handle it just fine.

As for performance, the ffmpeg x.264 docs have this to say:

How do the different presets influence encoding time?

This depends on the source material, the target bitrate, and your hardware configuration. In general, the higher the bitrate, the more time needed for encoding.

Here is an example that shows the (normalized) encoding time for a two-pass encode of a 1080p video:

Encoding time for each preset plotted

Going from medium to slow, the time needed increases by about 40%. Going to slower instead would result in about 100% more time needed (i.e. it will take twice as long). Compared to medium, veryslow requires 280% of the original encoding time, with only minimal improvements over slower in terms of quality.

Using `fast` saves about 10% encoding time, `faster` 25%. `ultrafast` will save 55% at the expense of much lower quality.

Note that this refers to 2-pass encoding; for livestreaming, you’ll be using 1-pass encoding.

To learn more about this, I heartily recommend the OBS blog post.

When you think about getting a streaming PC, the preset should be what decides whether you go low-end or high-end. If you’re just going to use the default veryfast, maybe you should just go with a CPU that’s just fast enough to run it at 1080p60 with Lanczos downscaling.

Always remember, the higher the bitrate, the less you have to worry about CPU presets. If you can record your 720p60 video in 25 Mbps instead of the usual 6 Mbps, you’re going to get a much better result just encoding that.

I’ll talk more about encoding and how to wrangle ffmpeg in the command line in my video editing guide.

Tunes

Tunes are additional settings, configurations, profiles, whatever in OBS that are not enabled by default. We won’t be using them either here.

Screenshot of the **Tunes** dropdown in OBS

You can optionally use -tune to change settings based upon the specifics of your input. Current tunings include:

  • film – use for high quality movie content; lowers deblocking
  • animation – good for cartoons; uses higher deblocking and more reference frames
  • grain – preserves the grain structure in old, grainy film material
  • stillimage – good for slideshow-like content
  • fastdecode – allows faster decoding by disabling certain filters
  • zerolatency – good for fast encoding and low-latency streaming
  • psnr – ignore this as it is only used for codec development
  • ssim – ignore this as it is only used for codec development

For example, if your input is animation then use the animation tuning, or if you want to preserve grain in a film then use the grain tuning. If you are unsure of what to use or your input does not match any of tunings then omit the -tune option. You can see a list of current tunings with -tune help, and what settings they apply with x264 --fullhelp.

ffmpeg tune documentation

Oh yeah, there’s also something called profiles best described as a supported feature set with varying compatibility depending on what technology you’re working with. In increasing order of features and decreasing order of compatibility, the profile options are:

Screenshot comparisons

The most valuable part of the OBS blog post is its bitrate and preset comparison screenshots.

Notice how they screenshot example with both little movement and a lot of movement.

Recording

A regular HDD will be fine for your storage needs—and much cheaper, too. If you’re worried about the speed, just take your bitrate (kb/s) and convert it to MB/s to see if you drive is fast enough. (It usually will.)

It’s tempting to record in a much higher quality than Twitch’s 6,000 kbps, but consider the storage requirement that comes with it:

50,000 kbps = 6,25 MB/s = 375 MB/m = 22,500 MB/h

An archive SSD is a waste of money, unless perhaps you’re building a streaming PC without the space for a regular HDD.

You may even want to cut out the local recording altogether and instead use a combination of your exportable Twitch VODs and OBS’s replay buffering, which you can set up with my replay guide.

One thing to remember is that if you play any copyrighted music on your stream, Twitch might mute that part of the VOD—and then some—so don’t rely on your VODs for backup, if you plan on playing music on stream. You’ll still have clips from the livestream to relive the unmuted moments for what it’s worth.

If you have occasional Internet issues, your recording won’t have the technical issues including out-of-sync audio that your stream did. This makes video editing a lot easier since progressive audio desync won’t ruin things.

CPU process priority

When you do everything from one computer, you use the same CPU and GPU to handle all tasks: streaming2, video, gaming. If you use a secondary streaming PC, your main PC’s CPU or GPU no longer do the streaming and recording; the streaming PC handles this.

As a result, you find yourself balancing streaming vs gaming performance; if your PC can’t handle both at full load, you will have to decide between dropping frames for your stream or your game.

If you’ve got videogame FPS to spare, you can do what Gamers Nexus did and change OBS’s process priority to “High”.

A chart of Gamers Nexus’ benchmark of CPUs including the effects of High process priority.
Gamers Nexus were able to shift the priority from game to OBS by changing its CPU priority. Read more in their streaming benchmark series.

Generally speaking, I wouldn’t touch CPU priority—and never on a one-PC setup.

On this note, always remember to set your FPS cap in-game, since there’s no need for you to do 120 frames per second on a 60 Hz monitor when your CPU (or GPU) working hard to encode your stream. After all, only your viewers can see the stream’s frame drops.

The Overwatch test

Did you pick the right settings? Is your Twitch stream looking good? How the hell are you supposed to tell?

When I finally changed my downscale setting from the default to the highest, Lanczos, I noticed the in-game chat text in Overwatch was suddenly completely legible; before, it was very hard to read.

So when I watch someone streaming Overwatch, I always notice that their streaming configuration is imperfect, because I struggle to read the in-game chat.

Now you know; hope I didn’t ruin any streams for you.

MediaInfo results

MediaInfo is one of the first things that go in your toolbox, especially for troubleshooting.

Here is what all our settings look like, including only the first of my audio channels:

General
Unique ID                      : <ID>
Complete name                  : <FILE>
Format                         : Matroska
Format version                 : Version 4 / Version 2
File size                      : 5.52 MiB
Duration                       : 6 s 750 ms
Overall bit rate               : 6 856 kb/s
Writing application            : Lavf57.84.100
Writing library                : Lavf57.84.100
ErrorDetectionType             : Per level 1

Video
ID                             : 1
Format                         : AVC
Format/Info                    : Advanced Video Codec
Format profile                 : [email protected]
Format settings                : CABAC / 4 Ref Frames
Format settings, CABAC         : Yes
Format settings, RefFrames     : 4 frames
Codec ID                       : V_MPEG4/ISO/AVC
Duration                       : 6 s 750 ms
Nominal bit rate            ==>: 6 000 kb/s
Width                       ==>: 1 280 pixels
Height                      ==>: 720 pixels
Display aspect ratio           : 16:9
Frame rate mode             ==>: Constant
Frame rate                  ==>: 60.000 FPS
Color space                    : YUV
Chroma subsampling             : 4:2:0
Bit depth                      : 8 bits
Scan type                      : Progressive
Bits/(Pixel*Frame)             : 0.109
Writing library                : x264 core 148 r2762 90a61ec
Encoding settings              : cabac=1 / ref=1 / deblock=1:0:0 / analyse=0x3:0x113 / me=hex / subme=2 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=0 / me_range=16 / chroma_me=1 / trellis=0 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=0 / threads=6 / lookahead_threads=2 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=3 / b_pyramid=2 / b_adapt=1 / b_bias=0 / direct=1 / weightb=1 / open_gop=0 / weightp=1 / keyint=120 / keyint_min=12 / scenecut=0 / intra_refresh=0 / rc_lookahead=10 / rc=cbr / mbtree=1 / bitrate=6000 / ratetol=1.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / vbv_maxrate=6000 / vbv_bufsize=6000 / nal_hrd=none / filler=1 / ip_ratio=1.40 / aq=1:1.00
Default                        : Yes
Forced                         : No

Audio #1
ID                             : 2
Format                         : AAC
Format/Info                    : Advanced Audio Codec
Format profile                 : LC
Codec ID                       : A_AAC-2
Duration                       : 6 s 677 ms
Channel(s)                  ==>: 2 channels
Channel positions              : Front: L R
Sampling rate               ==>: 48.0 kHz
Frame rate                     : 46.875 FPS (1024 SPF)
Compression mode               : Lossy
Title                          : All
Default                        : Yes
Forced                         : No

Test your audio

Try listening to a song or podcast while recording in OBS. Now compare the original volume with the one in your recording.

There are many reasons why the audio might be completely different—check out the audio guide for that.

One might be that you have an audio interface (amp) like a Scarlett Solo that boosts up your headphone audio after receiving it from the computer. Viewers will only hear the original audio.

The simplest thing you can do is to just try turning down the amp’s headphone dial as much as possible while offsetting it by turning up your Windows volume. If you’re already at 70% volume in Windows, you’ll have to do something like boost OBS’s desktop audio in software with something like OBS’s mixer.

Scenes

If you followed Jack’s guide, you should have a working overlay for your stream by now—assuming you want to use one.

The hierarchy in OBS Studio is:

  1. Profile
    • To switch between different stream keys or settings
  2. Scene collection
  3. Scene
  4. Source

Sources, like the overlay, are basically just a bunch of layers, and Scenes as groups of layers.

My main Scene, Game, currently consists of:

If you want to be fancy, you can add an Intro and Outro scene.

When you go on to create another Scene, like my Lounge, you will be re-using sources. In order to do so, create a new source and pick your existing one from the list below.

Pro tip: if you want to have a browser source, you might have to turn off hardware acceleration to avoid a black screen in most instances. If you change the setting with OBS open, you’ll also have to restart OBS.

Some games don’t support Game Capture due to anticheat, which means you’ll have to do a Window/Display capture instead.

Studio Mode for previews

I recommend using this feature mainly to make protecting your privacy easier. You never know exactly what’s going to be in the scene you’re switching to. It’s also good for maintaining a professional appearance, too.

One thing you should look out for is what effect your preview(s), with and without Studio Mode, has on your performance. If your computer or stream struggles, see if your preview(s) might have caused it.

You can also enable automatic scene switching, but I feel like it sets you up for an incident down the road.

Choosing a Twitch server

Under Stream, you’ll have en enter your stream key and pick a server. If you don’t live right next to one of the servers, it might be difficult for you to figure out which server to use.

To figure this out, download and run TwitchTest.

Only tick the regions that are close to your and see which server performs best. Here is what it looks like from Denmark:

TwitchTest results show the Swedish server to be the best.

Looks like the Swedish server is the best one for me.

Backups and troubleshooting

You might get an Error opening file for writing when trying to install or update OBS Studio—or re-installing to fix a bug like I did.

The solution is usually to give OBS Studio a fresh obs-studio/ folder to install your settings in.

To do this, go to %APPDATA% and look for obs-studio/. Make a copy of the folder or rename it to something like obs-studio-backup/.

Install, or re-install, OBS Studio. Afterwards, copy these two from your obs-studio-backup/ folder into the new one:

This should restore your original settings, as was the case when I did it.

But just copy the whole obs-studio/ folder just in case.

Make sure to back up these files whereever you keep your backups—moving them to a Dropbox folder with bvckup is an easy way to keep it safe. You’ll also need your assets like banners, backgrounds, and so on, of course.

For other problems, you can also try updating your GPU driver or the AMD Advanced Media Framework encoder plugin, if you use it for encoding.

Running MSI Afterburner can also prevent your OBS from starting as it did with me.

If you get a black window for a source, a likely culprit is hardware acceleration. Both browsers and any web-based app which are essentially compartmentalized browsers that run independently use hardware acceleration, and you can usually either turn it off directly in the settings or with the shortcut flag --disable-gpu.

OBS also has a habit of running in the background, even though you closed it. So make sure it’s closed entirely before attempting re-installs, patches, and so on.

OBS.Live

StreamElements have released an add-on that adds an activity feed and chat directly to OBS. I recommend you check it out. It currently doesn’t support Tags nor Live Notifications, but other than that, it makes it more or less redundant to keep your Twitch dashboard open in the background.

Note that it only tracks payments and alerts through StreamElements, so you’ll have to run Stream Labels in the background if those run through Streamlabs. (Or you could switch over to StreamElements.)

What next?

All set up? Check out the replay buffering and tools guides to take your stream to the next level. With even more guides and tips on the front page.

  1. Twitch have since moved on from the “Source, High, Medium, Low, Mobile” approach of just lowering the bitrate to transcoding stream resolutions and frame rates from 1080p60 to 720p60, 720p30, 480p, etc.

    This solves many problems with 1080p streaming, but the bitrate for the transcoded resolutions are extremely low to the point of being useless.

    A Source+ option for people with the requisite bandwidth and CPU is probably the only real solution that would work for everyone. ↩︎

  2. I’m just going to say “streaming” instead of “streaming and/or recording” for simplicity’s sake. ↩︎