# Opus (Audioformat)

Opus ist ein Datenformat zur verlustbehafteten Audiodatenkompression mit spezieller Eignung für interaktive Echtzeitübertragungen über das Internet.
Es ist als ein internationaler Offener Standard in RFC 6716 beschrieben. Als grundlegende Verfahren werden eine Frequenztransformation und Linear Predictive Coding (LPC) genutzt. Es ermöglicht besonders hohe Klangqualität und besonders geringe Verzögerung in Übertragungen.

## Merkmale

Opus hat eine besonders niedrige Codec-Latenz, um bei Echtzeit-Anwendungen in der Verarbeitung des typischerweise unmittelbar vor der komprimierten Übertragung erzeugten Signales möglichst wenig Verzögerung (Latenzzeit) zu verursachen. Opus arbeitet mit Blocklängen von 2,5 bis 20 (60) ms mit dynamischem, artefaktfreiem Wechsel zwischen unterschiedlichen Blocklängen. Hinzu kommen je nach Modus noch 2,5 bis 5 ms an Lookahead. Es erlaubt konstante und variable Bitraten über einen sehr weiten Bereich von 6 kbit/s bis zu 510 kbit/s und die Abbildung des gesamten menschlichen Hörbereiches. Es können nur je zwei Kanäle (Stereo) gekoppelt werden. Mehr Kanäle können dargestellt werden, indem sie (unabhängig oder eben eventuell paarweise gekoppelt) zusammen in eine Containerdatei gemultiplext werden. Für empfängerseitige Lautheits-Anpassungen wird die EBU-Empfehlung R 128 unterstützt.
Das Verfahren ist als offener Standard offen dokumentiert und eine Referenzimplementierung im Quellcode veröffentlicht. Teile des Verfahrens sind mit Softwarepatenten belastet, wobei die Rechteinhaber unbeschränkter Verwendung ihrer Patente im Rahmen der Verwendung des Codecs einschließlich zukünftiger Versionen des Standards zugestimmt haben. Dabei behalten sich jedoch alle vor, ihre Patente zur Abwehr von Patentklagen Dritter einzusetzen.
Opus ist ein Hybrid-Verfahren aus CELT und einer stark modifizierten, inkompatiblen Version von SILK. Das Verfahren kennt dreierlei Modi, zwei für reine Sprachsignale und einen unspezialisierten für beispielsweise Musik. Bei den Sprach-Modi steht ein Modus zur Verfügung, in dem der gesamte menschliche Hörbereich abgebildet wird, wobei die im Wesentlichen auf Frequenztransformation (MDCT) basierenden Algorithmen von CELT für einen oberen Frequenzanteil ab 8 kHz, die im Wesentlichen auf Linear Predictive Coding (LPC) basierenden SILK-Algorithmen für den unteren zuständig sind. Für niedrige Bitraten (sinnvoll unterhalb etwa 30 kbit/s) kann der Frequenzbereich eingeschränkt werden und die CELT-Schicht ausgelassen werden. Für andere Signalarten kann die auf Sprachsignale spezialisierte SILK-Schicht abgeschaltet und ausschließlich das unspezialisierte CELT benutzt werden. Ab Version 0.9.2 (März 2011) kann im laufenden Betrieb nahtlos zwischen diesen Modi umgeschaltet werden und der Encoder wählt in Voreinstellung den Modus automatisch.
Opus-Daten können in Ogg-Container verpackt werden. Der Inhalt solcher Ogg-Opus-Datenströme wird dann mit audio/ogg; codecs=opus angegeben und für Ogg-Opus-Dateien wird die Dateinamenserweiterung .opus empfohlen. Opus-Datenströme können außerdem in Matroska, WebM, MPEG-TS, und MP4-Containern eingebettet werden oder mit Verfahren wie RTP in Echtzeit über IP-basierte Netzwerke gesendet werden.

### Tonqualität

In vergleichenden Hörtests zeigt sich Opus bei niedrigen Bitraten den bisher durch die Verwendung der proprietären Spektralbandreplikation dominanten HE-AAC-Codecs qualitativ überlegen. Bei Bitraten von 12 kbit/s und darunter unterlag eine Version des Codecs von Mitte Februar 2011 bei Sprachsignalen den AMR-Codecs aus GSM, die hier qualitativ den Stand der Technik markieren. Für Sprachsignale zeigte sich Opus-intern der Hybrid-Modus bei Bitraten zwischen etwa 20 und 48 kbit/s überlegen – darüber der rein MDCT-basierte und darunter der rein LPC-basierte Modus. Im Unterschied zu anderen gängigen Transformationsverfahren sind für Opus stark tonale Signale besonders schwierig und komplexe Passagen hingegen relativ sparsam darstellbar.

## Technik

Opus ist ein aus zwei verschiedenen, ursprünglich separaten Verfahren kombinierter Hybridcodec. Eine Transformations-Schicht (ursprünglich CELT) arbeitet auf Basis der modifizierten diskreten Kosinustransformation (MDCT) und Ansätzen von CELP (Codebuch zur Anregung, jedoch in der Frequenzdomäne). Eine auf Sprachsignale spezialisierte Schicht (ursprünglich SILK) basiert auf Linear Predictive Coding (LPC). Das ursprüngliche SILK wurde modifiziert und unter anderem Unterstützung für 10-Millisekunden-Blöcke hinzugefügt. Die gemeinsame Bereichskodierung der beiden Anteile eines Hybrid-Datenstromes wurde von CELT übernommen. Der LPC-Teil arbeitet intern mit einer Abtastfrequenz von 16 kHz. Der Kodierer besitzt einen eingebauten Abtastratenkonverter. Zur Kompensierung des geringeren Lookahead des CELT-Signales wird dieses entsprechend verzögert. SILK hat eine größere algorithmische Verzögerung, um in seinem typischen Einsatzszenario die durch die Übertragungsprotokolle anfallenden Verwaltungsdaten zu minimieren. So sind beispielsweise im reinen CELT-Betrieb niedrigere Latenzen möglich.

### Transformations-Schicht (CELT)

Siehe auch Artikel CELT, Abschnitt Technik
Die Transformations-Schicht von Opus funktioniert technisch weitgehend gleich dem aufgegebenen eigenständigen CELT. Es wurde allerdings für die Integration mit SILK modifiziert und auch weiterentwickelt. Hinzugekommen sind Unterstützung für 20-Millisekunden-Blöcke und signalisierbare Abweichungen von der festgelegten Zuweisung verfügbarer Bits auf die (Bark-)Bänder mit einem sogenannten „allocation tilt“ und einem sogenannten „band boost“.

## Beteiligte Personen und Organisationen

Opus wird von der Internet Engineering Task Force (IETF) als RFC 6716 als internationaler Offener Standard für verlustbehaftete Audiodatenkomprimierung im Internet empfohlen. Er wurde im Standardisierungsverfahren bei der IETF von der Codec-Arbeitsgruppe mit Personal von und auf Basis von zunächst separaten Vorschlägen der Xiph.Org Foundation und Skype Technologies S.A. (heute Microsoft) entwickelt. Hauptentwickler sind Jean-Marc Valin (Xiph.Org, Octasic, Mozilla Corporation), Koen Vos (Skype) und Timothy B. Terriberry (Mozilla Corporation). Weiterhin beteiligt waren Raymond Chen (Broadcom), Gregory Maxwell (Xiph.Org) und Christopher Montgomery (Xiph.Org).
Mozilla zahlt dem Hauptentwickler Valin im Rahmen einer bezahlten Anstellung ein Gehalt für seine Entwicklungsarbeit an Opus. Auch der Browser-Hersteller Opera Software unterstützt Opus explizit als neuen, offenen Standard. Google LLC setzt sich für die Etablierung von Opus als lizenzkostenfreies Standardformat im Internet ein. Die Skype-Abteilung von Microsoft ist als (Mit-)Initiator des Standardisierungsprozesses weiterhin aktiv an diesem beteiligt. Juin-Hwey (Raymond) Chen von Broadcom steuerte einen Vor- und Nachfilter zur Tonhöhen-Vorhersage in CELT bei. Weitere Beteiligte im Standardisierungsverfahren bei der IETF waren Vertreter des Lehrstuhls für Kommunikationsnetze der Universität Tübingen beziehungsweise deren kommerzieller Unternehmensausgründung Symonics, von Polycom und von Cisco Systems.
Broadcom und die Xiph.Org Foundation halten Patente mit Bezug auf CELT, Patente von Skype/Microsoft sind für den SILK-Teil von Belang. Angebliche Patentansprüche von Qualcomm und Huawei erwiesen sich als unzutreffend.

## Geschichte

Die Entwicklung des CELT-Teils geht auf Überlegungen für einen Nachfolger für Vorbis zurück, als dessen Nachfolger es auch von den Merkmalen her gelten kann. Weiterhin löst Opus als neuer Sprachcodec der Xiph-Stiftung deren älteren Sprachcodec Speex ab, der auch das Vorgängerprojekt des Hauptentwicklers Jean-Marc Valin darstellt, mit dem er Erfahrungen mit der Gestaltung von Audio-Codecs gesammelt hat. An CELT wurde seit November 2007 praktisch gearbeitet. Der seit Januar 2007 von Skype entwickelte SILK-Teil ist das Nachfolgeprojekt des SVOPC, welcher als Eigenentwicklung das Unternehmen von den externen, kostenpflichtig lizenzierten Lösungen iSAC und iLBC unabhängig machen sollte.
Siehe auch Artikel CELT, Abschnitt Geschichte und Artikel SILK, Abschnitt Geschichte
Im März 2009 regte Skype bei der IETF die Entwicklung und Standardisierung eines breitbandigen Audio-Codecs an. Daraufhin verging nahezu ein Jahr mit langen und hitzigen Debatten über die Bildung einer entsprechenden Arbeitsgruppe. Vertreter verschiedener Firmen, die an der Standardisierung von patentbelasteten Konkurrenzformaten beteiligt waren, äußerten Einwände gegen die Aufnahme der Standardisierungsarbeiten für einen lizenzkostenfreien Codec. Namentlich traten dabei Vertreter der Firmen Polycom und Ericsson auf – den Machern und Lizenzverkäufern zu G.719 –, sowie von France Télécom, Huawei und den Orange Labs (Abteilung der France Télécom), welche an G.718 beteiligt waren. Im Februar 2010 kam die Arbeitsgruppe schließlich dennoch zustande, der sogar Unterstützung von der entsprechenden Study Group 16 der ITU-T zugesichert wurde.
Im Juli wurde ein erster Prototyp eines Hybridformates veröffentlicht, das die beiden eingereichten Codec-Kandidaten SILK und CELT kombinierte – die Ur-Version von Opus. Das Format wurde im September 2010 bei der IETF zur Standardisierung vorgelegt. Zwischenzeitlich war es eine kurze Zeit als „Harmony“ bekannt, bevor es im Oktober 2010 seinen heutigen Namen bekam. Das Bitstromformat ist seit Anfang Februar 2011 unter dem Vorbehalt letzter Änderungen vorläufig festgelegt. Zum Ende des Juli 2011 erhielt Jean-Marc Valin eine bezahlte Anstellung bei der Mozilla Corporation, um (mehr) an Opus zu arbeiten. Im November 2011 erging der letzte Aufruf der IETF-Arbeitsgruppe für Änderungen am Bitstrom-Format. Am 2. Juli 2012 wurde das Format von der IETF akzeptiert. Die Software befand sich seit dem 8. August im Release-Candidate-Stadium. Die offizielle Veröffentlichung der endgültigen Spezifikation und von Version 1.0 und 1.0.1 der Referenz-Software erfolgte am 11. September 2012.
Relativ schnell wurde in vielfältige Software Unterstützung für das Format eingebaut. Bereits im selben Jahr waren zahlreiche entsprechende Entwicklungsversionen verfügbar, unter anderem von einflussreichen und populären Projekten wie dem Web-Browser Firefox, dem Betriebssystem Debian und dem VLC media player.

### Version 1.1

Mittlerweile wurde in einem experimentellen Entwicklungszweig des Referenz-Kodierers begonnen, auf eine Version 1.1 mit deutlich besserer Klangqualität hinzuarbeiten. Am 21. Dezember 2012 erschien nach über einem Jahr Entwicklungszeit eine erste Alpha-Version der 1.1-Reihe. Am 11. Juli 2013 begann die Beta-Phase für Version 1.1 und wurde Version 1.0.3 veröffentlicht, die einige Fehler behebt und die Raumklang-API der 1.1-Serie übernimmt. Die fertige Version 1.1 wurde am 5. Dezember 2013 veröffentlicht.
Version 1.1 des Referenzkodierers erreicht durch Ausnutzung von mehr Möglichkeiten des Formates und verbesserte Kodierentscheidungen berichtetermaßen deutlich bessere Klangqualität bzw. Effizienz, insbesondere bei besonders tonalen Sequenzen. Er nutzt dazu unter anderem mit einer dynamischen Verteilung der verfügbaren Bitrate zwischen Frequenzbändern („dynalloc“ – „band boost“, „allocation tilt“) die Möglichkeiten des Formates für Variabilität der Bitrate (VBR) mehr aus. Er hat einen unbeschränkten VBR-Modus und passt die Bitrate aggressiver der Komplexität des Ausgangsmaterials an. Bei dem neuen VBR-Modus wird nunmehr versucht auch dateiübergreifend eine konstante Qualität zu erreichen und nicht mehr pro Datei die angegebene Zielbitrate zu erreichen. Der Kodierer wurde kalibriert, um sich bei einer größeren Menge kodierten Materials mit einer breiten Mischung unterschiedlicher, typischer Nutzsignale durchschnittlich der angegebenen Zielbitrate anzunähern. Mehrere neue Analyse-Schritte untersuchen Signalcharakteristiken und informieren Kodierentscheidungen. Unter anderem wird nun anhand einer Einschätzung der Tonalität bei besonders tonalen Passagen gezielt die Bitrate erhöht und durch eine Erkennung von Sprachsignalen automatisch zwischen dem integrierten LPC-basierten Sprachcodec, der MDCT-basierten Kodierung und dem Hybrid-Modus gewechselt. Für Raumklang-Formate mit mehr als zwei Kanälen erfolgt nun eine dynamische Bitraten-Zuteilung auf die einzelnen Kanäle unter Ausnutzung von Maskierungseffekten zwischen den Kanälen und es gab Qualitätsverbesserungen für den LFE-Kanal. Durch erst anfängliche Code-Optimierungen hat der gesamte Referenz-Codec nun eine deutlich höhere Arbeitsgeschwindigkeit, besonders auf ARM-Geräten.
Weitere Neuerungen sind die Möglichkeit vorausschauender Erkennung von Signalcharakteristiken für Betriebsszenarien wenn zeitliche Verzögerungen unkritisch sind, die effizientere Darstellung stark korrelierter Stereo-Signale, das Verwerfen von Gleichstrom-Anteilen (3-Hz-Hochpass), das zeitliche Variieren der Bitrate anhand der Lautstärke und ein Pegelbegrenzer zur Verhinderung von hartem Clipping.
Am 26. November 2015 wurde die Version 1.1.1 mit Assembler-Optimierungen für x86 (SSE, SSE2, SSE4.1), MIPS und ARM (NEON) veröffentlicht.

## Software

Opus ist offen dokumentiert und mit der libopus steht eine freie Programmbibliothek zur Verfügung. Sie ist in C geschrieben und für Architekturen mit und ohne Gleitkommaeinheit kompilierbar.
Seit 2017 verfügt FFmpeg über einen eigenen, nativen Opus-Encoder und -Decoder.
Das mitgelieferte Diagnose-Werkzeug „opusinfo“ berichtet über Opus-Dateien ausführliche technische Informationen, auch zur Richtigkeit des Bitstromformates. Es ist eine Abspaltung von ogginfo aus den vorbis-tools und daher im Unterschied zu Kodierer und Dekodierer unter Version 2 der GPL verfügbar.

### Formatunterstützung

Es gibt vielfältige Unterstützung in Software für einfache Datei- oder Stream-Wiedergabe, IP-Telephonie oder Audio-Streaming, in Web-Browsern, Betriebssystemen und anderem. Wichtige Beispiele:
* Unterstützung in Wiedergabe-Software findet sich in VLC media player, foobar2000, AIMP und anderen.
* An VoIP-Software gibt es die populären Audio-Chat-Programme Discord, Mumble und TeamSpeak, SIP-Clients wie Phoner/PhonerLite oder SFLphone oder auch der Chat-Client Jitsi. Auch die Messenger Signal und Threema nutzen Opus für die Telefonie über die App.
* Die Web-Browser Chrome und Firefox unterstützen Opus. Zudem ist Opus-Unterstützung für WebRTC-kompatible Browser verpflichtend.
* Audio-Streaming in Opus ist mit Software wie Icecast und Krad Radio möglich.
Auf vielen Plattformen ist Unterstützung verfügbar:
* Die Referenzimplementierung ist für sehr viele Betriebssysteme und Hardware-Plattformen verfügbar.
* Für Windows gibt es entsprechende DirectShow-Filter und
* in wichtigen GNU/Linux-Betriebssystemen (Debian und Abkömmlinge wie Ubuntu, Fedora) kann Software wie die Referenz-Implementierungen und die Multimedia-Frameworks GStreamer und libavcodec (FFmpeg/Libav) direkt aus den Standard-Paketquellen installiert werden.
* Die Mobil-Plattform Android unterstützt ab Version 5 (Lollipop) Opus eingebettet in das Matroska-Containerformat nativ. Opus in Ogg-Containern, welches insbesondere bei Podcasts die gängigere Form darstellt, wurde jedoch nicht unterstützt. Ab Version 7 wurde Opus auch im Ogg-Container unterstützt, jedoch wurden nur Dateien der Endung *.ogg als solche erkannt, und nicht *.opus, was die Unterstützung in der Praxis nach wie vor nur sehr eingeschränkt nutzbar machte. Ab Android 8 schließlich wird Opus in allen gängigen Varianten unterstützt. Darüber hinaus existieren eine Reihe von Software-Optionen für Opus-Wiedergabe.
* Mit der Alternativ-Firmware Rockbox besteht Unterstützung auf einer Reihe von portablen Medienwiedergabegeräten (unter anderem Produkte der iPod-Reihe von Apple und iriver- und Archos-Geräte).