When the pandemic lockdowns started, I was in the middle of teaching a
semester-long class on programming languages. I had to start giving my
content online. I hated it. I hated that I couldn’t interact with the
class. I hated having to juggle different views, switching from slides,
to me, to an editor. But most of all, I hated talking while sitting
down. Just the act of sitting seemed to drain all the energy out of it.
Since then I’ve been experimenting with different ways of organizing my
online speaking environment, and yesterday I think I’ve come close to
My video solution is to create slides with a pure black background. I
then combine my camera video and the window capture from the slide
presentation inside OBS.
I then set up a video filter for the slide channel which basically masks
out anything that is black: only the slide foreground appears in the
final video. I tried using the green screen filter with a custom color,
but I ended up getting better results with a luma key:
The next problem was that the slide content was hard to read on the
video background. So I added a gray box around the content on the slide,
and added a color key filter to OBS to match it and then reduce its
opacity. The result (shown at the top of this post)
is a semi-transparent gray background for the slide
And that’s it. I create slides with the black background and the content
enclosed in the gray box. When merged with the camera video, the black
disappears and the gray becomes semitransparent. When I don’t want any
slide content on the feed, I simply include a blank black slide in the
To start a talk, I bring up the slide presentation on a screen, make
sure OBS is connected to both that screen and my camera feed, and then
start the OBS virtual camera. I then configure the video source for
whatever is being used to broadcast the talk (Zoom, Jitsi, or whatever)
to use the OBS feed.
A Useful Side Effect
I find it hard to look at the camera when speaking, so this time I dug
out an old screen I bought for some Raspberry Pi projects a while back.
I spent all of 5 minutes making a plywood backer for it, to which I
glued a 5/8” nut. I screwed this into an old microphone stand and
positioned the screen right above my camera. I plumbed the HDMI into my
Macbook, and used that screen as the place I displayed my presentation.
Instant notes, instant feedback that I was on the correct slide, and
somewhere to focus my eyes.
I’m still struggling a little with audio. Unfortunately, OBS doesn’t
send sound out through its virtual camera device. But only OBS knows the
delays it is introducing to the video feed, and so only it can properly
synchronize the audio and video. I’m still experimenting with this:
currently I’m using VB-Cable to intercept the incoming output, feed it
through some processing, and then feed the result as audio input to the
video conference software. The results have not been great. The audio
sounds fine, but the timing drifts. If anyone has a good way of handling
this, I’d love to hear it.