Today, we are officially announcing support for Google's WebM video format.

We had to overcome quite a few hurdles in order to make this happen. I'd like to share a few of our experiences with you.

Our custom FFmpeg build used to be a FFmpeg SoC fork. While it was a couple of versions behind, it was rich in features - and notably, it supported watermarking. Unfortunately, the SoC fork was not maintained and modern day WebM work was done in FFmpeg "head", which meant that our version was never going to support libvpx (WebM video codec).

Watermarking simply didn't work with the new FFmpeg, and WebM didn't work with "our old" FFmpeg. This is something we really had no choice but to find a fix for, because just killing off this beloved feature certainly wasn't an option to us.

So, we were left with two choices: running separate FFmpeg builds for different tasks (ouch), or getting someone to port watermarking (movie source vfilter) back to FFmpeg "head".

We decided to get in touch with one of the FFmpeg developers and we worked together to implement the required fix. After that, FFmpeg was capable of watermarking WebM files, and we were already a huge step forward.

But we hadn't reached the finish just yet.

The FFmpeg version bump meant that we had to upgrade most of our stack along with it (think libfaac, x264, etc.). Now, we love Ubuntu and APT, but at this point (despite pinning, custom packages, etc.) it was bringing us more problems than it solved. Our versioning and compiling requirements were simply too specific. After one dependency kept leading to another, we reached the conclusion that full stack control was the only viable option for us. So, we began to compile specific versions of ExifTool, ImageMagick, Theora, FAAC, JPEG, Ogg, TIFF, FAAD, LAME, opencore-amr, Vorbis, FFmpeg, live_segmenter, PNG, VPX, Ghostscript, MPlayer, SDL, and x264. This was painful at first, but with automated build scripts and our huge test suite (which visually compares results), we are now able to pinpoint and fix encoding issues using the slightest of version bumps of any underlying media library. We can do this quickly, safely, with relative ease and without running into packaging conflicts. What's more is that we can even upgrade between distros without affecting our encoding capabilities.

So, even if it took us a bit longer than we had hoped, we can now finally – and happily – announce WebM support with watermarking, and we also have a better foundation to show for it. And, did I mention we didn't break any customer install while at it? Long live test coverage!

Happy WebM-ing 😄