Mit Dav1d steht jetzt ein besonders schnell arbeitender Decoder für das neue Videoformat AV1 bereit.
Filmen Sie mit dem Smartphone, zappen durch das TV-Programm oder legen eine Blu-ray ein, dann sehen Sie in der Regel Videos, die mittels Kompression auf eine erträgliche Größe eingedampft wurden. An den besonders verbreiteten Verfahren H264 und HEVC halten allerdings gleich mehrere Firmen unterschiedliche Patente, für die wiederum je nach Einsatz happige Lizenzgebühren anfallen.
Um eben jene zu sparen, haben sich einige namhafte Unternehmen zur Alliance for Open Media (kurz AOMedia) zusammengeschlossen [1]. Zu den Mitgliedern gehören unter anderem Apple, Amazon, ARM, Facebook, Google, Intel, Mozilla, Netflix, Nvidia und Microsoft.
Ausgehend vom zuletzt maßgeblich von Google vorangetriebenen Verfahren für Videokompression VP9 entwickelte die AOMedia einen verbesserten Nachfolger namens AV1. Dieser ist vollständig offen, lizenzkostenfrei und für Streaming-Anwendungen optimiert.
Die AOMedia positioniert das eigene Produkt vor allem als Konkurrent zu HEVC alias H.265, das derzeit unter anderem für hochauflösende UHD-Videos zum Einsatz kommt. Genau die soll AV1 um bis zu 30 Prozent schrumpfen und unterstützt obendrein Videos mit hohem Dynamikumfang (HDR und WCG).
Für Entwickler stellt die AOMedia seit Mitte 2018 einen passenden Codec in Form der Bibliothek Libaom bereit. Wer in seinem Programm AV1-Videos komprimieren oder dekomprimieren möchte, braucht nur die Library einzubinden und deren Funktionen zu nutzen. Unter anderem die Tools aus dem Ffmpeg-Projekt erzeugen so auf Wunsch AV1-Videos. Die Bibliothek geht allerdings recht langsam zu Werke.
Gaspedal
Zumindest beim Dekodieren wollen die Entwickler der Projekte Videolan, VLC und Ffmpeg mit dem Neuling Dav1d Abhilfe schaffen. Das rekursive Akronym steht für “Dav1d is an AV1 Decoder” und beschreibt damit direkt das Ziel: Die Software soll im Vergleich zu Libaom Videos im AV1-Format besonders schnell dekodieren, wenig Hauptspeicher belegen, den Prozessor weniger belasten, Threads nutzen, auf vielen Plattformen laufen und eine nützliche Schnittstelle für Entwickler enthalten. Die Dav1d-Programmierer versuchen zudem, den Quellcode leicht verständlich zu halten und kompakt aufzubauen. Unterstützung erhält das Projekt von der AOMedia, die als Sponsor fungiert.
Die erste Version 0.1.0 des Programms stand Mitte Dezember 2018 zum Download bereit. Als Lizenz wählte das Entwicklerteam eine äußerst liberale Zwei-Klausel-BSD-Lizenz. Das macht es einfach, Dav1d in andere Software und Geräte zu integrieren, etwa in Fernseher oder Multimedia-Terminals in Autos.
Darüber hinaus ermutigen die Entwickler explizit andere Programmierer, die Software an ihre Bedürfnisse anzupassen. Die geringe Größe von nur wenigen KByte befördert also den vielfältigen Einsatz. Laut Entwickler Jean-Baptiste Kempf hat das Team den Programmcode sogar mit Googles Projekt OSS Fuzz getestet, das Software besonders umfangreich auf Fehler prüft.
Zum Redaktionsschluss war die Version 0.2.0 aktuell. Sie arbeitet vor allem auf älteren PCs und Mobilgeräten bei Videos mit 8-Bit-Farbtiefe deutlich flotter. Die Entwickler geben an, sie arbeite gegenüber den 0.1.x-Versionen um das zwei- bis zweieinhalbfache schneller. Des Weiteren soll der Decoder alle Vorgaben der AV1-Spezifikation erfüllen. Insbesondere kann das Programm mit Farbtiefen von 8, 10 und 12 Bit umgehen.
Rennsemmel
Dav1d 0.2.0 ist für die Befehlssätze AVX2 oder SSSE3 optimiert, die alle halbwegs modernen Intel- und AMD-Prozessoren verstehen. Auf solchen CPUs arbeitet der Decoder besonders flott. Einige Messergebnisse mit einer Vorabversion hat der Entwickler Jean-Baptiste Kempf in einem Blog-Post veröffentlicht [2]. Demnach ist die Software häufig doppelt so schnell wie die Referenzimplementation von Libaom und deren Decoder, in einigen Fällen sogar um 400 Prozent flotter (Abbildung 1).

Abbildung 1: Die blauen Balken im Diagramm zeigen, dass bereits die Vorabversion 0.1.0 von Dav1d deutlich schneller arbeitete als die Libaom-Referenzimplementation (grün).
Das Ziel der jüngsten Optimierungen in der Version 0.2.0 war zudem ein Gewinn an Geschwindigkeit auf anderen Prozessoren. So gibt der Decoder auf einem iPhone XS ein Video in FullHD-Auflösung mit 80 Bildern pro Sekunde wieder [3]. Weitere Messergebnisse der Version 0.2.0 hat Ewout ter Hoeven auf der Internetseite Medium veröffentlicht [4]. Mittelfristig wollen die Entwickler Dav1d für weitere Befehlssätze und Prozessoren optimieren sowie die bestehenden Implementierungen verbessern.
Übersetzen
Den Quellcode von Dav1d betreut das Videolan-Projekt [5]. Die Dav1d-Entwickler verwenden dabei ausschließlich die Programmiersprache C gemäß C99-Standard. Um eine möglichst hohe Geschwindigkeit zu erreichen, schrieben sie zudem Teile der Software in Assembler.
Zum Übersetzen des heruntergeladenen Dav1d-Quellcodes benötigen Sie das Werkzeug Ninja, das Build-System Meson (ab Version 0.47) sowie den Assembler Nasm (mindestens in der Version 2.13.02). Unter Ubuntu 18.10 holt der Befehl aus der ersten Zeile von Listing 1 die benötigten Pakete hinzu. Anschließend übersetzen Sie die Bibliothek mit den Kommandos aus der zweiten und dritten Zeile. Die Aufrufe aus den letzten beiden Zeilen installieren die Software im System.
Listing 1
$ sudo apt install ninja-build meson nasm $ meson build --buildtype release $ ninja -C build $ cd build $ sudo meson install
Test, Test …
Mit AV1 kodierte Videos kommen vorwiegend in einem MP4-, MKV- oder WebM-Container verpackt auf die Festplatte. Suchen Sie Material zum Testen, so finden Sie im Internet [6] bereits zahlreiche Videos im AV1-Format (Abbildung 2). Alternativ wandeln Sie mit einer aktuellen Version von Ffmpeg ein Video ins neue Format um. Da es sich bei Dav1d ausschließlich um einen Decoder handelt, kommt dabei noch die Referenzimplementierung Libaom zum Einsatz.
Sofern Ffmpeg das AV1-Format unterstützt, wandelt der Befehl aus Listing 2 das Video aus der Datei original.mp4 ins AV1-Format um und speichert das Ergebnis in der Datei konvertiert.mkv. Weitere Informationen zum AV1-Encoding hält das Ffmpeg-Wiki bereit [7].
Listing 2
$ ffmpeg -i original.mp4 -c:v libaom-av1 -crf 30 -b:v 0 -strict experimental konvertiert.mkv
Software mit Dav1d-Decoder ist derzeit noch selten zu finden. Ffmpeg bietet ihn offiziell erst ab Version 4.2 an, die zum Redaktionsschluss allerdings noch nicht erschienen war. Eine statisch gelinkte Entwicklerversion finden Sie jedoch online [8]. Mit dieser Ffmpeg-Version lässt sich dann die Arbeitsgeschwindigkeit von Libaom und Dav1d vergleichen.
Die beiden Befehle aus Listing 3 dekodieren jeweils einfach das AV1-Video aus der Datei av1video.webm und verwerfen das Ergebnis. Das erste Kommando verwendet dazu Dav1d, das zweite Libaom. Dabei gibt Ffmpeg die Geschwindigkeit beim Arbeiten aus (Abbildung 3).

Abbildung 3: Dav1d schafft sogar auf einem etwas älteren System mit Intel-Prozessor 59 Frames pro Sekunde.
Listing 3
$ ffmpeg -c:v libdav1d -i av1video.webm -f null /dev/null $ ffmpeg -c:v libaom-av1 -i av1video.webm -f null /dev/null
Ausblick
Die Dav1d-Entwickler experimentieren derzeit mit Shadern, mit denen sie insbesondere die Film Gain genannte Funktion von AV1 beschleunigen wollen. Ebenfalls auf der Agenda steht das Optimieren für ARM-Prozessoren. Die erzielten Geschwindigkeiten des Decoders beeindrucken schon jetzt, selbst auf Standard-Hardware. Ob Dav1d den Weg in weitere Produkte und Programme findet, das muss sich allerdings noch zeigen – zu wünschen wäre es dem vielversprechenden Projekt.
Glossar
-
WCG
-
Wide Color Gamut. High Dynamic Range Video bietet nicht nur eine höhere Dynamik als herkömmliche Videos, sondern mit WCG auch einen größeren Farbraum.
Infos
-
AOMedia: https://aomedia.org
-
“Dav1d: Performance and Completion of the First Release”: http://www.jbkempf.com/blog/post/2018/dav1d-toward-the-first-release
-
Release-Notes zu Dav1d 0.2.0: https://code.videolan.org/videolan/dav1d/tags/0.2.0
-
“Dav1d 0.2.0: Covering all PC’s, including mobile”: https://medium.com/@ewoutterhoeven/dav1d-0-2-0-covering-all-pcs-including-mobile-eac3e43868c2
-
Dav1d-Quellcode: https://code.videolan.org/videolan/dav1d
-
AV1-Testvideos bei Elecad: https://www.elecard.com/videos
-
Ffmpeg-Wiki: libaom AV1 Encoding Guide: https://trac.ffmpeg.org/wiki/Encode/AV1
-
Kompilierte Entwicklerversionen von Ffmpeg: https://johnvansickle.com/ffmpeg/






