Opus documentation
Developing with libopus (API reference)
Libopus is the reference implementation of the Opus Codec.
- libopus 1.5 release
- libopus 1.3.1 release
- libopus 1.2 release
- libopus 1.1.3 release
- libopus 1.0.3 release
Developing with opusfile and opusenc (API reference)
Opusfile and libopusenc are a easy to use libraries that encapsulates everything you need beyond libopus to correctly and completely support the playback and creation of .opus (OggOpus) files.
Opus-tools man-pages
IETF specifications
- Official Opus codec RFC
RFC 6716 - Official Opus RTP specification
RFC 7587 - Official Opus file format specification
RFC 7845 - Updates to the Opus Audio Codec
RFC 8251 - Ambisonics in an Ogg Opus Container
RFC 8486
Other specifications
- Opus in ISO Base Media Format
mp4 encapsulation - Opus in WebM
Matroska encapsulation - Opus in MPEG2 Transport Streams (Unfinished Draft)
MPEG-TS encapsulation
Tutorials
- Encoding Opus from foobar2000 (Windows)
- Amit Ashara, Implementing OPUS Voice Code for TM4C129x Device, Application Report, Texas Instruments, June 2016.
- Amit Ashara, Audio Communication With Power Over Ethernet (PoE), Reference Design, Texas Instruments, August 2016.
Inside Opus
Beyond the RFC itself, there are a several documents out there that describe Opus or parts of Opus. Not everything in them applies to the final version of Opus, but they should still be useful to those who want to understand how Opus works. For an overview of the codec, see the linux.conf.au 2012 Opus presentation.
The most accessible descriptions of Opus are probaly Monty’s demos. We have also written some papers describing the algorithm in details:
- J.-M. Valin, G. Maxwell, T. B. Terriberry, K. Vos, High-Quality, Low-Delay Music Coding in the Opus Codec, Accepted for the 135th AES Convention, 2013.
- K. Vos, K. V. Sorensen, S. S. Jensen, J.-M. Valin, Voice Coding with Opus, Accepted for the 135th AES Convention, 2013.
- K. Vos, A Fast Implementation of Burg’s Method, 2013.
Older contents
For historical reasons, some of the information on the algorithmic details is specific to either SILK or CELT.
For more information on SILK, see the slides by Koen Vos from the 79th IETF meeting.
You can see Tim Terriberry’s linux.conf.au 2009 CELT presentation. Those with a signal processing background can also read two papers that were published on CELT:
- J.-M. Valin, T. B. Terriberry, C. Montgomery, G. Maxwell, A High-Quality Speech and Audio Codec With Less Than 10 ms delay, IEEE Transactions on Audio, Speech and Language Processing, Vol. 18, No. 1, pp. 58-67, 2010.
- J.-M. Valin, T. B. Terriberry, G. Maxwell, A Full-Bandwidth Audio Codec with Low Complexity and Very Low Delay, Proc. EUSIPCO, 2009.
Paper 1 describes CELT version 0.3.2, while paper 2 applies to 0.5.2. The main things that changed since these papers were written are the pitch prediction/filtering and the birdie avoidance method.
Test Vectors
Test files to verify that the Opus decoders are operating properly (updated for RFC 8251).
Bitstream conformance set for the codec.
This set of bitstreams is used to measure codec implementations for conformance with the specification. Also available from Mozilla and the IETF.
The old test vectors are stll available (Xiph.Org, Mozilla, IETF)
The .opus test set is an in-development larger test suite for .opus files. These are suitable for testing opusdec and other media-player software. Files prefixed with ‘broken’ and ‘failure’ are intentionally malformed and at least the latter should be rejected.
Note that these files are designed to exercise all aspects of an implementation, the fact that they sound terrible is an intended consequence.