What is Opus?
Opus is a format for compressing audio to efficiently transmit it across networks. Opus allows for music-grade high quality audio at low data rates while not delaying the signal much. Opus is distinguished from most formats for high quality audio (AAC, Vorbis, MP3) by having low delay and it is distinguished from most low delay formats (G.711, GSM, Speex) by supporting high audio quality.
Who created Opus?
Opus was created by combining Xiph.Org's CELT development codec and Skype's SILK codec as part of a public cooperation in the IETF codec working group. Opus has been in development since early 2007, and has been recommended by the working group for promotion as a proposed standard.
Is the SILK part of Opus compatible with the SILK implementation shipped in Skype?
No. The SILK codec, as submitted by Skype to the IETF, was heavily modified as part of its integration within Opus. The modifications are significant enough that it is not possible to just write a "translator" and even sharing code between Opus and the "old SILK" would be highly non-trivial.
How do I use Opus / What programs use Opus?
What are the licensing requirements?
The reference Opus source code is released under the BSD license, which is a very permissive Open Source license. Commercial use and distribution (including in proprietary software) is permitted, provided that some conditions specified in the license are met.
Opus is also covered by some patents, for which royalty-free usage rights are granted, under conditions that the authors believe are compatible with most (all?) open source licenses, including the GPL (v2 and v3).
How does the quality of Opus compare to other codecs?
Opus for Software developers
What is difference between supporting Opus and supporting Speex/G.711/MP3?
Opus has variable frame durations which can change on the fly, so an Opus decoder needs to be ready to accept packets with durations that are any multiple of 2.5ms up to a maximum of 120ms.
The opus encoder and decoder do not need to have matched sampling rates, bandwidths, or channel counts. Its recommended to always just decode at the highest rate the hardware supports (e.g. 48kHz stereo) so the user gets the full quality of whatever the far end is sending..
What is Opus Custom?
Opus Custom is an optional part of the Opus standard that allows for sampling rates other than 8, 12, 16, 24, or 48 kHz and frame sizes other than multiples of 2.5 ms. Opus Custom requires additional out-of-band signalling that Opus does not normally require and disables many of Opus' coding modes. Also, because it is an optional part of the specification, using Opus Custom may lead to compatibility problems. For these reasons, its use is discouraged outside of very specific applications, e.g.:
- ultra low delay applications where synchronization with the soundcard buffer is important.
- low-power embedded applications where compatibility with others is not important.
For almost all other types of applications, Opus Custom should not be used.
How do I use 44.1 kHz or some other sampling rate not directly supported by Opus?
Tools which read or write Opus should inter-work with other sampling rate by transparently performing sample rate conversion behind the scenes. It's generally preferable to run the output at 48kHz even when you know the original input was 44.1kHz because many inexpensive audio interfaces have poor quality output for 44.1k.
In particular, software developers should not use Opus Custom for 44.1 kHz support, except in the very specific circumstances outlined above.
Which implementation should I get?
While the implementation in the latest IETF draft (and eventually RFC) of Opus is what defines the standard, it is likely not the best and most up-to-date implementation. The Opus website was set up for the purpose of continually improving the implementation while still conforming to the standard. All Opus implementations are compatible but better Opus encoders can deliver higher quality audio and some implementations may be faster or slower or work better on different platforms.