Refine Your Streaming Skills on Open Broadcaster Software (OBS) Studio using FFmpeg for the Best Presentation Possible

Open Broadcaster Software (OBS) Studio is one of the most popular software solutions for streamers. With the significant rise in online meetings, many have begun using OBS coupled with FFmpeg for their various streaming presentations. OBS is an excellent setup for screen sharing and streaming video.

The finished product. Kevin's video in the corner and the screen behind him
Here’s what my finished product looks like. I focus on techincal streams and am often live-coding, but this setup works for any type of content.

The trouble is, OBS isn’t considered a major communication platform. Many events and venues utilize products that their coordinators already are familiar with and consider convenient, such as Microsoft Teams.

These platforms are great but rarely do they provide the same advanced capabilities as OBS for configuring how you share your video content. Although it is possible to share your OBS content through a virtual webcam (more on that later), this can cause poor quality, as screen sharing will often receive prioritization rather than the webcam.

In this tutorial, I walk through how I share my content to leverage OBS’s power for streaming online presentations in things like Microsoft Teams while maintaining the quality of screen sharing.

Before anything else, it is important to note that OBS will run on multiple platforms; however, some of the tools I am using here will only work in a Windows environment. This tutorial also assumes that you are using a single computer (ideally with more than one screen) and are looking for a free solution.

Installing and Setting Up OBS Studio

If you are unfamiliar with the installation process, this tutorial can guide you through setting up your initial screens and input sources. In addition, there is a multitude of other great resources online for learning the ins and outs of OBS and its many features. I am using OBS Studio version 26.0.2. For now, we will go with a very basic setup that involves sharing our desktop as well as our web camera.

Using the plus (+) button on “Scenes and Sources” will create a single scene named “MyScene” with two input sources. The first input uses “Display Capture” to capture the screen you wish to share. The second source uses the “Video Capture Device” input to bring in your web camera.

You must position the camera source above the display capture source. This location ensures that the camera’s input is always above the desktop display. Also, you need to confirm that the little eyeball icon shows the source as enabled.

Now you can move the sources around, change sizes, and crop (hold down Alt while resizing) to get the layout exactly as you wish. Once you are happy with it, I recommend clicking the Lock button to the right of each source to prevent accidental changes.

The final result should look similar to this:

Designing your online presentations.

Next, go to Settings (lower right-hand corner of the OBA window or under the File menu at the top of your screen). Select Video and set both the Base and Output Resolution to be 1920×1080.

Screenshot of setting the video resolution.

Adding the Virtual Webcam to Your Online Presentation

Next, we need to configure OBS with a virtual webcam that you can use as an output for sharing content. There are multiple choices; however, I used this one. It adds a new DirectShow output device that will be visible on most software as an additional web camera. Inside of OBS, it will add a new option under the Tools menu. From this menu, we want to remove the frame buffer by setting Buffered Frames to zero. While here, note the name of the Target Camera as we will use this later.

Screenshot of target camera to use in online presentations.

For many situations, you will be able to stop here. When streaming an online presentation, share this virtual web camera as your video source, and you will have complete control over your content. However, as mentioned above, this may not work in some cases where screen sharing content is given priority or displayed differently. To handle those situations, read on.

Maintaining Control of Camera Input Priority

For this next step, I recommend working on a separate desktop. Between OBS and the content you are presenting, it’s entirely possible you may quickly run out of screen real-estate. To avoid this, we will create a new window that hosts our OBS virtual cam and then share that window as our content. Since we won’t need to see or interact with this new window, we can simply leave it on its own desktop. This way, it will get all the benefits of being treated like a screen-share (or window-share in this case), and we can use OBS to control its contents.

FFmpeg: the Swiss Army Knife for All Things Video

Next, we need to download a copy of FFmpeg. You can find pre-compiled versions listed on the main FFmpeg web site or by using a package manager such as chocolatey. The FFmpeg suite typically comes with three tools: ffmpeg.exe, ffplay.exe, and ffprobe.exe. We’ll only be using ffplay.exe here. I am using version 4.4.2. We will first use it to get a list of DirectShow devices on the system to confirm it can find our virtual camera by running the command:

ffplay -f dshow -list_devices true -i dummy

This will output:

[dshow @ 0000024a7c78b800] DirectShow video devices (some may be both video and audio devices)
[dshow @ 0000024a7c78b800]  "Video Control"
[dshow @ 0000024a7c78b800]     Alternative name "@device_pnp_\\?\usb#vid_114d&pid_8c00&mi_00#7&2c4de11e&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global"
[dshow @ 0000024a7c78b800]  "OBS-Camera"
[dshow @ 0000024a7c78b800]     Alternative name "@device_sw_{860BB310-5D01-11D0-BD3B-00A0C911CE86}\{27B05C2D-93DC-474A-A5DA-9BBA34CB2A9C}"

You are looking for the name of the virtual camera from OBS. It should show up with the same name you saw in the Target Camera from the Virtual Cam settings page earlier. Next, run the following command to create an FFplay window that uses the virtual camera as its source.

ffplay -f dshow -i video="OBS-Camera" -video_size 1920x1080 -window_title "ShareMe"

The above command assumes that you set the OBS-Camera output to 1920×1080. If you need to adjust the position of the window or perform any scaling, you can modify the command like this:

ffplay -f dshow -i video="OBS-Camera" -video_size 1920x1080 -window_title "ShareMe" -vf "scale=1680:950" -left 1440 -top -150

This command allows the user to change the scale of the window as well as its position. You can use the above command to shift the window so that the border around the FFplay window is shifted offscreen and is no longer visible.

Once FFplay is running, switch back to your primary desktop. When you want to share your OBS-Camera, rather than selecting it as the web camera source, you can choose to share an individual window by clicking on the “ShareMe” FFplay window instead. Some screen sharing software will automatically switch to the secondary desktop to show the FFplay window when you start sharing it, so be ready to switch back.

You’re Ready to Stream Online Presentations

There you have it. With a little bit of configuration, we can share an OBS powered virtual camera as a screen share rather than a typical web camera. This change allows for a considerable amount of freedom and configuration to share content and do great online presentations.

What content will you share?

Want Some Final Tips and Tricks?

Check out my personal notes on presenting and streaming.

Leave a comment

Your email address will not be published. Required fields are marked *