How I stream myself coding

Alright so I’ve been uploading streamed videos of myself working on programming projects for awhile now. I occasionally get asked about my setup for this, so I thought I would explain the tools I use. This might be particularly valuable as I am primarily a Linux user where some of the kit for this can be kinda rough. Further, I am very picky about my tools and ergonomics so I didn’t really want to make any sacrifices there in order to stream.

The tools

After the stream is done, I process the file saved by OBS with some denoising scripts to smooth out the audio. Here’s a dump of a couple of scripts I’ve kicked around:

normalize.sh

VIDEO_FILE=$1
VIDEO_FILE_FIXED=${VIDEO_FILE%.*}-fixed.${VIDEO_FILE##*.}

rm -f audio.wav
avconv -i $VIDEO_FILE -c:a pcm_s16le -vn audio.wav
# normalize-audio -a -9dbFS audio.wav
normalize-audio -a -12dbFS audio.wav
avconv -i $VIDEO_FILE -i audio.wav -map 0:0 -map 1:0 -c:v copy -c:a libvo_aacenc \
   $VIDEO_FILE_FIXED

noise_reduction.sh

VIDEO_FILE=$1
VIDEO_FILE_VIDEO=${VIDEO_FILE%.*}-video.${VIDEO_FILE##*.}
VIDEO_FILE_AUDIO=${VIDEO_FILE%.*}-audio.wav
# VIDEO_FILE_AUDIO_CLEAN=${VIDEO_FILE%.*}-audio-clean.wav
VIDEO_FILE_AUDIO_CLEAN=${VIDEO_FILE%.*}-audio-noisered.wav
VIDEO_FILE_DENOISED=${VIDEO_FILE%.*}-denoised.${VIDEO_FILE##*.}
QSCALE=10

# ffmpeg -i $VIDEO_FILE -af "highpass=f=200, lowpass=f=3000" $VIDEO_FILE_DENOISED
rm -f noise_audio.wav

# ffmpeg -i $VIDEO_FILE -qscale:v $QSCALE -an $VIDEO_FILE_VIDEO
# ffmpeg -i $VIDEO_FILE -qscale:v $QSCALE $VIDEO_FILE_AUDIO
# ffmpeg -i $VIDEO_FILE -vn -ss 0:00:00 -t 0:00:02 noise_audio.wav
# ffmpeg -i $VIDEO_FILE -vn -ss 0:33:30 -t 0:33:33 noise_audio.wav
# sox noise_audio.wav -n noiseprof noise.prof
# sox $VIDEO_FILE_AUDIO $VIDEO_FILE_AUDIO_CLEAN noisered noise.prof 0.21
# sox $VIDEO_FILE_AUDIO $VIDEO_FILE_AUDIO_CLEAN noisered noise.prof 0.15
# sox $VIDEO_FILE_AUDIO $VIDEO_FILE_AUDIO_CLEAN noisered noise.prof 0.10
ffmpeg -i $VIDEO_FILE_AUDIO_CLEAN -i $VIDEO_FILE_VIDEO -qscale:v $QSCALE $VIDEO_FILE_DENOISED

If you’ve got better kit/scripts than I’ve mentioned here, please speak up! I’m always up for improving this stuff. Please contact me if you need clarification on something I’ve mentioned here or if you have questions.

Comment on microphones from my friend Tyler on Twitter

I’ve lightly edited his words here:

I take issue with your statement about blue microphones. I had a Shure SM58 and a blue spark and I liked the blue much better than the SM58. I prefer condenser microphones over dynamic microphones, I just run the gain as low as I can to make it not pick up the background. USB mics are trash.

I never messed with USB mics. I’ve exclusively had XLR microphones since I got started back in 2011. My little brother has a Blue Icicle and that is not the best experience. Constantly picking up his keyboard.

If you can pick you a Shure SM58 for 50 bucks like I did, the thing is nigh indestructible, great deal. The only reason mine doesn’t work is because I broke a solder point and I didn’t want to repair it.

It looks like they refreshed the Blue Spark with a high pass filter and a -20db pad.

My reply:

FWIW I tried setting the gain low on my Blue Yeti, it wasn’t enough. I had to scream at the mic when the gain was low enough not to pick up noise.

At time of writing, it doesn’t seem like the Blue Spark is available any more. (See above about the model refresh)

It’s possible an XLR condenser mic with a mixer could be okay for your purposes, but most of the Blue mics are USB now which severely limits their usefulness. Not my bag of chips but I wanted to include a different viewpoint.

I know this site is a bit of a disaster zone, but if you like my writing or think you could learn something useful from me, please take a look at the Haskell book I've been writing. There's a free sample available too!