Die Veröffentlichung der SVT-AV1 2.0 (Scalable Video Technology AV1) Bibliothek mit Implementierungen des Encoders und Decoders des Videoencoding-Formats AV1 wurde veröffentlicht. Dabei werden die in modernen Intel CPUs vorhandenen Hardwarebeschleunigungsverfahren zur Parallelverarbeitung genutzt. Das Projekt wurde von Intel in Partnerschaft mit Netflix ins Leben gerufen, um ein Leistungsniveau zu erreichen, das für das Echtzeit-Transcoding von Videos und die Nutzung in Video-on-Demand-Diensten (VOD) geeignet ist. Derzeit wird die Entwicklung unter dem Regie des Open Media Alliances (AOMedia) vorangetrieben, die die Entwicklung des Videoencoding-Formats AV1 betreut. Zuvor wurde das Projekt im Rahmen des OpenVisualCloud Projekts entwickelt, das ebenfalls die Encoder SVT-HEVC und SVT-VP9 entwickelt. Der Code wird unter der BSD-Lizenz verbreitet.
SVT-AV1 kann für Systeme mit jeder Architektur kompiliert werden, für die ein Compiler mit Unterstützung für den C99 Standard verfügbar ist. Die beste Leistung wird jedoch auf x86_64-Systemen erzielt, für die Assembler-Optimierungen auf der Basis von SIMD-Instruktionen verwendet werden (AVX2-Unterstützung im CPU ist wünschenswert, aber mindestens SS2 ist ausreichend). Der Speicherverbrauch hängt von der Anzahl der bei der Kodierung verwendeten Prozessorkerne ab, die über die Option „—lp“ geregelt werden können. Aufgrund der Komplexität der in AV1 verwendeten Algorithmen erfordert die Kodierung in diesem Format erheblich mehr Ressourcen als andere Formate, was die Verwendung des Standard-AV1-Encoders für die Echtzeit-Transkodierung unpraktisch macht. Zum Beispiel benötigt der Standard-Encoder des AV1-Projekts 5721, 5869 und 658 Mal mehr Berechnungen im Vergleich zu den Encodern x264 (Profil „Main“), x264 (Profil „High“) und libvpx-vp9.
Zu den Änderungen in der neuen Version von SVT-AV1 gehören:
- Die Umstellung auf eine neue Versionsnummerierung, wobei die erste Ziffer in der Version bei jeder Änderung der API/ABI geändert wird.
- Änderungen an der API wurden vorgenommen, die den Übergang zur Kennzeichnung des Endes des Streams (EOS – End Of Stream) im letzten Frame anstelle der Verwendung eines leeren Frames betreffen, was die Wartezeit auf einen überflüssigen Frame eliminieren konnte. Diese Änderung der API ist bereits im Code von FFmpeg vermerkt.
- Der dreipassige Modus der variablen Bitrate (3-pass VBR) wurde entfernt, stattdessen wird jetzt ein Mechanismus für die mehrpassige VBR verwendet. Der mehrpassige VBR-Modus beschränkt sich auf zwei Durchgänge, um die Integration mit FFmpeg zu gewährleisten.
- Im Encoder wurden Optimierungen hinzugefügt, die zu einer Effizienzsteigerung der M9-M13-Presets um 1-4 % führten, während der Speicherbedarf im Preset M5 im LP 8-Modus um 20-35 % und in anderen Modi um 1-5 % gesenkt wurde. Der Speicherverbrauch in den übrigen Presets wurde um 1-5 % reduziert.
- Es wurden Kompromissoptimierungen zwischen Qualität und Geschwindigkeit für Presets mit hohem Qualitätsanspruch durchgeführt. Die Arbeit des MR-Presets, das Referenzqualität bietet, wurde um 100 % beschleunigt.
- In Funktionen, die ausschließlich in C geschrieben sind, wurden architekturspezifische Optimierungen für ARM hinzugefügt.
Zusätzlich ist die Veröffentlichung von dav1d 1.4.1 zu erwähnen, im Rahmen dessen die Gemeinschaften VideoLAN und FFmpeg eine Bibliothek für einen alternativen, freien Decoder des AV1-Videoencodierungsformats entwickeln. Die dav1d-Bibliothek unterstützt alle Funktionen von AV1, einschließlich erweiterter Arten der Unterabtastung und aller in der Spezifikation angegebenen Parameter zur Steuerung der Farbtiefe (8, 10 und 12 Bit). Ein Hauptmerkmal von dav1d ist die Ausrichtung auf die Erreichung maximaler Dekodierungsleistung und die Gewährleistung einer qualitativ hochwertigen Arbeit im Multithread-Modus. Der Code des Projekts ist in C (C99) mit Assembler-Einfügungen (NASM/GAS) geschrieben und unter der BSD-Lizenz veröffentlicht. Die Unterstützung für die Architekturen x86, x86_64, ARMv7 und ARMv8 sowie für die Betriebssysteme FreeBSD, Linux, Windows, macOS, Android und iOS wurde implementiert.
Die Version dav1d 1.4 zeichnet sich durch die Unterstützung neuer Architekturen wie Loongarch und RISC-V sowie durch zusätzliche Optimierungen basierend auf AVX-512-Anweisungen aus, die die Leistung der 6tap-Filter auf ARM-Systemen beschleunigen, die Effizienz des Multithread-Betriebs steigern und die Größe der Binärdaten auf ARM64-, ARM32- und RISC-V-Systemen reduzieren. Eine Schwachstelle, CVE-2024-1580, wurde behoben, die zu einem Schreibzugriff außerhalb der Puffergrenzen aufgrund eines Integer-Überlaufs bei der Verarbeitung von sehr großen Frames führte.
Quelle: opennet.ru
