Tuesday, September 27, 2022
HomeGolangA brand new chapter for Changelog podcasts |> Changelog

A brand new chapter for Changelog podcasts |> Changelog


Adam and I’ve needed our podcasts to have chapters for a looooong time.

Like, a number of years lengthy.

They’re such an effective way to navigate and discover an episode. You possibly can skip on to the topics that curiosity you, skip previous those that don’t, and even uncover new components of the present1 that pique your curiosity.

I’m a giant chapters person myself; have been ever for the reason that characteristic was added to my podcast app of selection and some podcasts I take heed to added them. However we by no means put within the work to chapter our podcasts due to numerous challenges in our method.

The challenges

We’ve self-hosted (and self-content-managed) our podcasts since 2016. To get that completed, we constructed our personal net app as a result of, properly, we’re software program builders2 and because the saying goes:

haters gonna hate, liars gonna lie, builders gonna develop

This app has served us very properly, however one consequence of that call is that we will’t sit round and await a (typically VC-backed) internet hosting firm to announce a characteristic like chapters and easily begin utilizing it. We’ve got to roll it ourselves.

Two (and a half) elements made this difficult.

1️⃣ We shell out to (the extraordinary) FFmpeg to write down ID3 tags on our mp3 information upon add. FFmpeg, it simply so occurs, doesn’t assist ID3v2’s chapter body characteristic.

2️⃣ Our app is written in (the extraordinary) Elixir language. Elixir, it simply so occurs, didn’t have an ID3v2 package deal that we might use as an alternative of FFmpeg to try this job.

And the half: I’m principally an app developer. I write little libraries right here and there, however I’m not nice at studying a spec (particularly one which makes use of a binary file format) and turning that right into a library. I do know I might do it if I needed to… nevertheless it’d take me a very long time and I solely get a couple of hours every week to work on these items.

Enter Sandman Wikman

I can’t recall what lastly tipped the dimensions, however someday earlier this 12 months it simply felt like the appropriate time to lastly deal with chapters head on.

So, I figured that if we might rent our pal (and long-time listener) Lars Wikman to do the heavy lifting and create an ID3v2 package deal that helps chapters, I might discover time to handle the remainder.

Adam was down. Lars was down. The remaining was all heavy steel code.

Stable Diffusion poster art for 'Enter Wikman'
Immediate: Metallica’s “Enter Sandman” poster nevertheless it’s a pc programmer and says “Enter Wikman”

Lars created and launched id3vx for us, an Elixir library for parsing and encoding ID3 tags. I put it to make use of in our codebase, and right here we’re.

Okay, it wasn’t all straight ahead. However the particulars are solely barely attention-grabbing, and absolutely extra attention-grabbing to us than they’re to you. Lars joined us on our seventh Kaizen episode of Ship It! to debate a few of these particulars.

Hearken to that if you happen to’re tremendous curious. What follows are a couple of bits which can be value a point out.

Our manufacturing workflow

Including the technical means to connect chapters to an mp3 file is one factor, however with the ability to do this at scale (we publish 5ish episodes per week) and have them be good is a complete different matter.

We’ve got a group of individuals producing these reveals. From the host(s) that do the recording, to the content material editors that lower out the dangerous components, to the producers who put all of it collectively and ship it out. We wanted a method for the chapters to be added all through the method by the folks with probably the most context, however nonetheless editable by the producers and publishers. Right here’s our circulation:

1) Content material editor leaves waypoints

Content material modifying is the method of taking the uncooked audio tracks and eradicating the dangerous bits, smoothing out the tough spots, and usually making it as listenable as doable. This work requires you to take heed to the complete podcast, generally at a painstakingly sluggish tempo. It’s tedious work, nevertheless it additionally means you’ve got probably the most context to detect subject modifications than anybody else within the course of.

Right here’s earlier than and after photographs of our latest Go Time episode on avoiding bloat:

Go Time #246 prepped for editing
Go Time #246 prepped for modifying. Click on for full decision picture.
Go Time #246 content edited
Go Time #246 content material edited. Click on for full decision picture.

2) Producer formalizes as markers

See all of these Matter Change markers within the panel on the left aspect of the mission? These are spots the editor thinks would make an excellent chapter break. They aren’t 100% usable, however they’re ok for the producer to formalize in the course of the ultimate, “mastering” stage of manufacturing. Right here’s what the chapter markers seem like when the episode is lastly able to be combined down and uploaded:

Go Time #246 mastered and ready to ship
Go Time #246 mastered and able to ship. Click on for full decision picture.

3) Writer enters into our admin

After the combo down, we find yourself with a .wav file that has the markers and metadata in it and a .mp3 that wants ID3 tags. I made a decision early on that the supply of reality for chapters could be in our admin, not the .wav file.

So, I constructed just a little admin UI for manually including/modifying chapters (painful!) and a mechanism for “bootstrapping” an episode’s chapter by dropping the .wav file on the shape (pleasant!)

Dropping a .wav file on the chapter bootstrap drop zone of Changelog admin
This half is definitely fairly enjoyable!

Now that now we have the episode’s chapters in our database and a pure-Elixir library for writing them out as ID3 tags, we will output the chapters in all the appropriate locations!

Chapters, chapters, all over the place

Writing the chapter metadata to our mp3s was the arduous half, however that’s not the one place they’re helpful. You’ll discover this characteristic manifesting in a couple of totally different locations:

In your podcast app

That is the massive one, in fact. Any podcast app that parses chapter information from ID3 tags ought to have them! If yours does, however you don’t see any chapters. Please tell us within the feedback!

Changelog chapters in Pocket Casts, Overcast & Apple Podcasts
Left to proper: Pocket Casts, Overcast, Apple Podcasts

In your RSS feed

Podcasting 2.0 is a really attention-grabbing motion that we mentioned briefly on our newest RSS episode with Ben Ubois. They’ve created a brand new namespace and are including a bunch of latest tags. We’ve added a couple of of them to our feeds. Particularly: funding, transcript, particular person, and now chapters.

On that episode linked above, we debated the professionals/cons of placing chapters within the RSS feed as an alternative of within the mp3 itself. I represented the two.0 spec drafters’ choice fairly properly on the podcast, however I’ve since discovered this blurb which explains their logic fairly properly:

Advantages with this strategy are that chapters don’t require altering audio information, and the chapters might be edited after publishing, since they’re a separate file that may be requested on playback (or cached with obtain). JSON chapter info additionally permits chapters to be displayed by a wider vary of playback instruments, together with net browsers (which generally haven’t any entry to ID3 tags), thus enormously simplifying chapter assist; and pictures might be retrieved on playback, moderately than bloating the filesize of the audio. The information held is appropriate with regular ID3 tags, thus requiring no extra work for the writer.

We’ll proceed to place our chapters in each locations for the foreseeable future, however hopefully extra apps hop on the brand new hotness quickly!

In your episode web page

Why not additionally emit chapters on the episode particulars web page and hyperlink up the timestamps to our onsite participant? HTML for the win! (A lot in order that this was the first place the characteristic appeared. Too straightforward!)

Go Time #246 chapters and our player

The participant itself hasn’t built-in chaptering but, however since we have already got the information as JSON, that ought to be fairly straightforward to wire up.

Get pleasure from!

Particular due to Lars, Maqbool, Jason, and everybody who labored with us on this effort. Some have known as the addition of chapters “The best technical enchancment to Changelog podcasts since transcripts! And by some, I imply me. I’ve been calling it that. 😜

We’ll most likely enhance and refine from right here. Just a few straightforward wins: including extra hyperlinks, picture assist, onsite participant assist. However they’re fairly properly baked for now, we hope you get pleasure from ’em!

If you happen to crave extra tasty ID3/Lars content material, take a look at his weblog posts and keep tuned for subsequent week’s episode of The Changelog after we’ll be nerding out on the craziness of the spec! 💚


  1. , like that one attention-grabbing bit close to the tip that you just’d in any other case have missed as a result of the hosts wasted twenty minutes of your life discussing HBO’s Silicon Valley earlier than getting themselves again on subject. 😉

  2. We’re additionally content material creators. Having our personal open supply app to hack on, experiment with, and deploy to varied infrastructures has been a superb supply of content material over time.

RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments