Last updated: November 29, 2024

<span aria-hidden="true" id="transloadit-announces-webm-support-with-watermarking"></span>

# Transloadit announces WebM support with watermarking

![Kevin van Zonneveld](/assets/images/teammates/avatar-kvz-4.jpg?dpl=dpl_6nhQNS5wkVkPZWuKMzXcWrAHNJL5)

**Kevin van Zonneveld**

Co-founder · Amsterdam, The Netherlands · Show bio

[](https://x.com/kvz)[](https://github.com/kvz)

Today, we are officially announcing support for[Google's WebM video format⁠](https://www.webmproject.org/).

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⁠](https://wiki.multimedia.cx/index.php?title=FFmpeg%5FSummer%5FOf%5FCode) fork. While it was a couple of versions behind, it was rich in features - and notably, it supported[watermarking](/demos/video-encoding/watermarking.md). 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⁠](https://en.wikipedia.org/wiki/Advanced%5FPackaging%5FTool), 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](/demos/video-encoding/encode-into-webm.md) 😄

[#video-encode-robot](/blog/tags/video-encode-robot.md)[#video-encoding-service](/blog/tags/video-encoding-service.md)

### 👩‍💻 Join 20k+ developers

Sign up for our [monthly newsletter](/newsletters.md) to receive direct links to 3 exclusive tech — and 2 product updates. No less, no more.

Your email:

Get access

## File uploading and encoding. Made simple.

Transloadit streamlines file handling for developers, trusted by brands like Coursera and The New York Times. We’re known for a reliable API, top-notch support, and a strong commitment to open source, with projects like [Uppy⁠](https://uppy.io) and [Tus⁠](https://tus.io) setting standards in file processing.

[Sign up](/c/)[Book a Demo](https://survey.typeform.com/to/kRg47Xi5)

No credit card needed · 5 GB included in the free plan

Cancel anytime
