FFmpeg
FFmpeg
Bildquelle: ffmpeg & x

FFmpeg: Komplexeste Refaktorisierung seit Jahrzehnten

FFmpeg hat kürzlich eine bahnbrechende Veränderung erlebt: die Implementierung von CLI-Multithreading im Quellcode.

FFmpeg ist eine leistungsstarke Open-Source-Software für die Konvertierung und Bearbeitung von Videos. Es ist seit langem ein wichtiger Bestandteil der Multimedia-Industrie, einschließlich Video-Streaming-Dienste wie Netflix und Videoportale wie YouTube. Außerdem hat es sich als Standard-Tool für die Videobearbeitung etabliert.

FFmpeg: Multithreading-Pipelines für die Transkodierung

Als die FFmpeg-Entwickler vor kurzem eine technische Präsentation über die FFmpeg Multithreading Bemühungen hielten, bezeichneten sie diese Arbeit als „one of these“ – das komplexeste Refactoring der FFmpeg CLI in den letzten Jahrzehnten.

Die Implementierung von CLI-Multithreading war eine enorme Herausforderung für das Entwicklungsteam von FFmpeg. Es erforderte eine umfangreiche Neukonzeption des Arbeitsablaufs, der Planung, Verteilung und Zusammenführung der Arbeit sowie der Verfolgung des Fortschritts. Es war eine komplexe Aufgabe, die das mutige Team erfolgreich bewältigt hat.

Code-Refaktorisierung

FFmpeg

In der Softwareentwicklung bezeichnet „Refactoring“ den Prozess der Verbesserung der Struktur von Quellcode unter Beibehaltung des beobachtbaren Verhaltens. Ziel ist es, die Lesbarkeit, Verständlichkeit, Wartbarkeit und Erweiterbarkeit zu verbessern, um den Aufwand für Fehleranalysen und funktionale Erweiterungen zu reduzieren.

Dies geschieht sehr häufig mit altem Code, der für frühere Interpreter-Versionen geschrieben wurde, um ihn auf die aktuelle Interpreter-Version zu bringen, wie z.B. PHP 4 auf PHP 7. Der alte Code wird auch als „Legacy Code“ bezeichnet.

Jahrzehntelange Entwicklungsarbeit

Das FFmpeg-Team musste die Hauptschleife und alle abhängigen Komponenten anpassen und neu entwerfen, was mehrere Jahrzehnte in Anspruch nahm. Die lange Entwicklungsarbeit hat sich gelohnt und wird vor der Veröffentlichung von FFmpeg 7.0 endgültig in den Git-Sourcen zusammengeführt! FFmpeg 7.0 will man Anfang nächsten Jahres veröffentlichen. Der Git-Merge Kommentar kann wie folgt zusammengefasst werden:

„Ändern Sie die Hauptschleife und jede Komponente (Demuxer, Decoder, Filter, Encoder, Muxer), um den zuvor hinzugefügten Transcode-Scheduler zu verwenden. Jede Instanz jeder dieser Komponenten wurde bereits in einem separaten Thread ausgeführt, aber jetzt können sie tatsächlich parallel ausgeführt werden“.

Bedeutung der Multi-Threaded Pipeline des CLI

Was bedeutet das? Unser Autor hat das FFmpeg-Team bereits vor anderthalb Monaten via Twitter gefragt, ob die Änderungen dazu führen, dass eine schnellere Videotranskodierung auf einer größeren Anzahl von Kernen, wie z.B. 80 Prozessorkernen, voll ausgenutzt wird. Die Antwort ist ein klares: Nein.

FFmpeg antwortete auf die Frage: „Wenn Sie mehrere Streams (z.B. eine ABR-Leiter, mehrfache Qualitätsabstufungen) mit dem ffmpeg CLI Tool auf einmal encodieren, können Sie mehr von Ihren Prozessorkernen nutzen. Das liegt daran, dass die Pipeline multithreaded ist, so dass jedes Encoding parallel abläuft. Eine bestimmte (Video-)Encodierung war bereits multithreaded.“

FFmpeg: Neuerung von großer Bedeutung

Diese Software setzt man in vielen Branchen für die Videobearbeitung und -transkodierung ein. Mit der Einführung von CLI-Multithreading hat FFmpeg einen Meilenstein erreicht, der die Leistungsfähigkeit und Effizienz der Software auf ein neues Niveau hebt. In der heutigen Multi-Core-Welt ist dies eine enorme Verbesserung für dieses wichtige Open-Source-Projekt.

Die neueste Version von FFmpeg kann man von hier kostenlos herunterladen.