Podcasting on Linux

I’ve had a few questions on how I make the podcasts on Linux, so here is my latest setup. Eat your heart out Stephen Spielberg.

For recording the screen, I use ffmpeg to capture audio and video. I capture directly to WebM, so unless I am planning on doing post stuff I can fling it directly at YouTube when I’m done.

With ffmpeg, the first thing you’ll need to do is figure out what audio port you want to capture. If you are using Gnome -i pulse will get you the default PulseAudio capture device (usually), but that won’t work sans-pulse on KDE or something else. The easiest thing to do is specify the hardware input to the ffmpeg command. You can figure yours out via cat /proc/asound/pcm.

[crayon lang=”default”]

gandalf 22:17:36 ~ $ cat /proc/asound/pcm
00-00: ALC892 Analog : ALC892 Analog : playback 1 : capture 1
00-01: ALC892 Digital : ALC892 Digital : playback 1
01-03: HDMI 0 : HDMI 0 : playback 1
01-07: HDMI 0 : HDMI 0 : playback 1
01-08: HDMI 0 : HDMI 0 : playback 1
01-09: HDMI 0 : HDMI 0 : playback 1
02-00: USB Audio : USB Audio : capture 1
03-00: USB Audio : USB Audio : capture 1

1
2
3
4
5
6

In my case that last one is my Blue Snowball mike - 3,0. So the ffmpeg command to grab the screen (1080p) and mike is:

[crayon lang="default"]

ffmpeg -f alsa -ac 2 -i hw:3,0 -acodec pcm_s16le -f x11grab -r 30 -s 1920x1080 -i :0.0 -qscale 1 -threads 4 -f webm ~/Videos/Screencasts/bin_today/Screencast_on_$(date +%F_%A_at_%H:%M:%S).webm

You can write a ffmpeg command as long as you have time to - I doubt anybody on Earth has used every single ffmpeg flag. But basically I’m grabbing the audio from the hw:3,0 capture device I determined from the cat command and I’m getting 1920x1080 from X at 30 frames per second to webm. Dial back the threads if you don’t have the hardware for it. You could probably leave some of those options off or toss in half a dozen others and it wouldn’t make a huge difference. I run that command, do my thing, and CTRL-C to finish. At 1080p you’ll be looking at ~10MB/minute.

One thing to note: DO NOT OVERWRITE AN OLD OUTPUT FILE. ffmpeg pauses to ask you if you want to overwrite an existing file, but it doesn’t seem to pause or start back evenly - your audio and video for the new recording will be out of sync. It took me a long time to figure that one out and is why I go time-stamp bonkers on the file output name.

For capturing web cam input by itself, I’ve gotten the best results from guvcview (it is in the Ubuntu repos), which has a decent GUI. Everything else I have tried (including direct capture with ffmpeg) stutters a bit. For the last one where I had my enormous head in a tiny window, that was ffmpeg capturing the screen that had a tiny guvcview window on it. It can be a little stuttery that way, but not too bad.

If you want to do post processing like adding animations, subtitles, splicing stuff together, etc. I would recommend OpenShot, but I’m probably going to pass on that in the future. I think things come out just as well when I just turn things on and go, and it certainly eats a lot less time.

As far as hardware, it’s a USB Blue Snowball mike, which is a much better microphone than it sounds like on my podcasts, largely because the jackass on the other side of the mike can’t stop wandering around his echo-inducing office while he talks. The web cam is a Logitech QUICKCAM PRO 9000 (720p), which is pretty old now and I’d give it a solid “meh”. It is also convinced that I’m less pretty and more middle-aged than seems warranted, and no amount of post processing or hair products have been able to convince it otherwise.