Transloadit kündigt WebM-Unterstützung mit Wasserzeichen an
Heute kündigen wir offiziell die Unterstützung für Googles WebM-Videoformat an.
Wir mussten dafür einige Hürden überwinden. Ich möchte einige unserer Erfahrungen mit Ihnen teilen.
Unser eigener FFmpeg-Build war früher ein Fork von FFmpeg SoC. Er hinkte zwar ein paar Versionen hinterher, war dafür aber funktionsreich, und er unterstützte insbesondere Wasserzeichen (English). Leider wurde der SoC-Fork nicht gepflegt, und die moderne WebM-Arbeit fand im FFmpeg-„Head“ statt, was bedeutete, dass unsere Version libvpx (den WebM-Videocodec) niemals unterstützen würde.
Wasserzeichen funktionierten mit dem neuen FFmpeg schlicht nicht, und WebM funktionierte nicht mit „unserem alten“ FFmpeg. Dafür mussten wir unbedingt eine Lösung finden, denn dieses beliebte Feature einfach zu streichen, kam für uns keinesfalls infrage.
Uns blieben also zwei Möglichkeiten: separate FFmpeg-Builds für verschiedene Aufgaben zu betreiben (autsch) oder jemanden zu finden, der Wasserzeichen (movie source vfilter) zurück in den FFmpeg-„Head“ portiert.
Wir entschieden uns, einen der FFmpeg-Entwickler zu kontaktieren, und setzten gemeinsam die nötige Lösung um. Danach konnte FFmpeg WebM-Dateien mit Wasserzeichen versehen, und wir waren schon einen großen Schritt weiter.
Aber am Ziel waren wir damit noch nicht.
Der FFmpeg-Versionssprung bedeutete, dass wir den Großteil unseres Stacks mit aktualisieren mussten (man denke an libfaac, x264 usw.). Nun, wir lieben Ubuntu und APT, aber an diesem Punkt brachte es uns (trotz Pinning, eigener Pakete usw.) mehr Probleme, als es löste. Unsere Anforderungen an Versionierung und Kompilierung waren schlicht zu speziell. Nachdem eine Abhängigkeit immer wieder zur nächsten führte, kamen wir zu dem Schluss, dass die vollständige Kontrolle über den Stack die einzige tragfähige Option für uns war. Also begannen wir, bestimmte Versionen von ExifTool, ImageMagick, Theora, FAAC, JPEG, Ogg, TIFF, FAAD, LAME, opencore-amr, Vorbis, FFmpeg, live_segmenter, PNG, VPX, Ghostscript, MPlayer, SDL und x264 selbst zu kompilieren. Das war anfangs mühsam, aber dank automatisierter Build-Skripte und unserer riesigen Test-Suite (die Ergebnisse visuell vergleicht) können wir Encoding-Probleme nun mithilfe der kleinsten Versionssprünge jeder zugrunde liegenden Medienbibliothek genau eingrenzen und beheben. Das gelingt uns schnell, sicher, relativ mühelos und ohne Paketkonflikte. Mehr noch: Wir können sogar zwischen Distributionen aktualisieren, ohne unsere Encoding-Fähigkeiten zu beeinträchtigen.
Auch wenn es etwas länger gedauert hat als erhofft, können wir nun also endlich – und mit Freude – WebM-Unterstützung mit Wasserzeichen ankündigen, und wir haben zudem ein besseres Fundament vorzuweisen. Und habe ich schon erwähnt, dass wir dabei keine einzige Kundeninstallation kaputt gemacht haben? Es lebe die Testabdeckung!
