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

We had to overcome some hurdles for this, so let me share a few.

Our custom FFmpeg build used to be a FFmpeg SoC fork. It was a couple of versions behind but rich in features - it supported watermarking. Unfortunately the SoC fork was unmaintained and modern day WebM work was done in FFmpeg "head", so 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. And we couldn't just kill this beloved feature.

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 a huge step forward.

But we hadn't reached the finish just yet.

The FFmpeg version bump meant 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 giving us more problems than it solved. We just had too specific versioning & compiling requirements. One dependency lead to another, and we reached the conclusion that full stack control was the only viable option for us. So we started compiling 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. Painful at first, but with automated build scripts and our huge test suite (which visually compares results), we are now able to pinpoint & fix encoding issues using the slightest of version bumps of any underlying media library. We can do this fast, safe, with relative ease and without running into packaging conflicts. What's more is we can even upgrade between distros without affecting our encoding capabilities.

So it took us a bit longer than we had hoped, but we can now happily announce WebM support with watermarking, and we 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 :smile: