.social

fluent-ffmpeg

April 2011

node.js Fluent API für die Media-Conversion Library FFMPEG.

ffmpeg

node-js

javascript

Briefing

Im Rahmen einer eines Projekts für die Firma n c ag kam ich zum ersten Mal in Berührung mit dem Open-Source Toolset FFMPEG. Begeistert von den gebotenen Möglichkeiten und gerade frisch mit node.js 0.4 angefangen war die Idee geboren: eine Open-Source Library, welche die Verwendung der komplexen CLI von FFMPEG für node.js Applikationen brauchbar macht.

Die von Anfang an definierten Ziele für die Library waren die folgenden:

  • Die API soll komplett chainable sein ("fluent")
  • Alle Inputs und Outputs sollen komplett stream-basierend sein um ein Maximum an Flexibilität zu gewährleisten
  • Die Library soll on-the-fly Streaming von Video-Umwandlungen via express ermöglichen.

Lösungsansatz

Das erste Ziel war durch eine Adaption des Command-Patterns sehr einfach zu erreichen, die zweite Anforderung war da schon ein bisschen schwieriger. Die Schwierigkeiten traten vor allem wegen des z.T. relativ merkwürdigen Stream-Handlings und den process-Funktionen der damaligen node.js Versionen. Aber wie so oft in der Entwicklung: Hartnäckigkeit zahlt sich aus, so auch in diesem Fall. Dadurch, dass nun alles komplett stream-basiert war, stellte die Anforderung bezüglich on-the-fly Streaming durch express ebenfalls kein Problem mehr dar.

Um die Implementierung gegen Regressionen abzusichern, wurde die komplette Library mit Unit- und Integration-Tests abgedeckt (Code-Coverage 90-95%).

Durch Zeitmangel meinerseits habe ich das Projekt im Jahr 2012 in eine GitHub-Organisation ausgelagert und 2 der aktivsten Contributors zu Admins dieser Org ernannt. Seither beobachte ich das Projekt eher passiv, möchte jedoch in naher Zukunft einen kompletten TypeScript-Port in Angriff nehmen.