Opus Recommended Settings: Difference between revisions

From XiphWiki
Jump to navigation Jump to search
m (→‎Framesize Tweaking: expand by copying in some RFC blurb, link to packet overheads in Wikipedia (IPv6 for the futures!))
m (nbspaces added)
Line 75: Line 75:
{| class="wikitable" style="text-align:center"
{| class="wikitable" style="text-align:center"
|-  
|-  
|rowspan="2"|(bitrates in Kb/s)
|rowspan="2"|(bitrates in Kb/s)
!colspan="2"|Mono
!colspan="2"|Mono
!colspan="2"|Stereo
!colspan="2"|Stereo
Line 120: Line 120:


== Framesize Tweaking ==
== Framesize Tweaking ==
Opus can encode frames of '''2.5''', '''5''', '''10''', '''20''', '''40''', or '''60 ms'''.  It can also combine multiple frames into packets of '''up to 120 ms'''.
Opus can encode frames of '''2.5''', '''5''', '''10''', '''20''', '''40''', or '''60 ms'''.  It can also combine multiple frames into packets of '''up to 120 ms'''.


Opus uses a '''20 ms''' frame size '''[https://tools.ietf.org/html/rfc6716#section-2.1.4 by default]''', as it gives a decent mix of low latency and good quality.
Opus uses a '''20 ms''' frame size '''[https://tools.ietf.org/html/rfc6716#section-2.1.4 by default]''', as it gives a decent mix of low latency and good quality.
Line 126: Line 126:
For real-time applications, sending fewer packets per second reduces the overall bitrate, since it reduces the overhead from '''[https://en.wikipedia.org/wiki/IPv6_packet#Fixed_header IP]''', '''[https://en.wikipedia.org/wiki/User_Datagram_Protocol#Packet_structure UDP]''', and '''[https://en.wikipedia.org/wiki/Real-time_Transport_Protocol#Packet_header RTP headers]'''.
For real-time applications, sending fewer packets per second reduces the overall bitrate, since it reduces the overhead from '''[https://en.wikipedia.org/wiki/IPv6_packet#Fixed_header IP]''', '''[https://en.wikipedia.org/wiki/User_Datagram_Protocol#Packet_structure UDP]''', and '''[https://en.wikipedia.org/wiki/Real-time_Transport_Protocol#Packet_header RTP headers]'''.
However, it increases latency and sensitivity to packet losses, as losing one packet constitutes a loss of a bigger chunk of audio.
However, it increases latency and sensitivity to packet losses, as losing one packet constitutes a loss of a bigger chunk of audio.
Increasing the frame duration also slightly improves coding efficiency, but the gain becomes small for frame sizes above 20 ms.
Increasing the frame duration also slightly improves coding efficiency, but the gain becomes small for frame sizes above 20 ms.


For these reasons, the default 20 ms frames are a good choice for most applications.
For these reasons, the default 20 ms frames are a good choice for most applications.


[[Category:Opus]]
[[Category:Opus]]

Revision as of 03:28, 8 November 2016

Depending on what kinds of sounds you want to encode with Opus, you should use different bitrate (quality) settings.

The settings in the table below are meant to start you off with a decent tradeoff between good quality and small filesize (or bitrate usage, if you're streaming).

You should test the suggested bitrate by actually listening to your encoded audio and then tweaking the bitrate:

  • down if you think the quality is good, but the filesize (or bitrate) is too big
  • up if you think the quality is bad, and you can afford having bigger files (or a larger streaming bitrate)
Use Case Channels Bitrate (Kb/s) Notes
Ham radio 1 (mono) use Codec 2 Opus only supports bitrates down to 6 Kb/s. Codec 2 handles speech from 0.7 to 3.2 Kb/s.
VoIP 1 10-24 10 Kb/s will deliver narrowband most of the time, 24 Kb/s should give fullband.
More details in the relevant table further down this page.
Audiobooks / Podcasts 1 24 bitrates from here on up tend to deliver fullband audio.
2 (stereo) 32
Music Streaming / Radio 2 64-96 Opus has better quality than MP3, AAC and Vorbis at these rates.
(test results here and here)
Music Storage 2 96-128 Opus at 128 KB/s (VBR) is pretty much transparent
6 (5.1 surround) 128-256 for surround sound, Opus uses surround-sound bitrate allocation
8 (7.1 surround) 256-450
Music Archiving any use FLAC if you are archiving audio, use a lossless audio format to prevent generation loss

Technical Details

For the more technical Opus users, here are some details to help you fine-tune your decision on which bitrate best fits your needs.

Mono or Stereo

Opus tends to start downmixing stereo inputs to mono from roughly 24 Kb/s and lower. You can check the details in the opus_encoder.c source file.

You can force downmixing at any bitrate by using the following command-line parameters:

--downmix-mono - downmixes all input channels to mono

--downmix-stereo - downmixes all input channels to stereo (if there are more than 2 input channels, e.g. surround sound)

Bandwidth Transition Thresholds

The following table shows rough bitrates that you might want to use to encode audio that has limited frequency bandwidths. This could be useful if your audio has already been bandpassed, or should go through a bandpass filter (e.g. VoIP speech).

(bitrates in Kb/s) Mono Stereo
Voice Music Voice Music
NarrowBand 12 15 ? ?
MediumBand 15 18-22 ? ?
WideBand 16-20 22-28 ? ?
SuperWideBand 24-28 28-32 ? ?
FullBand 28-40 32-64 32-64 64-128

The details of Opus' bandpass thresholds can be found in the opus_encoder.c source file.

The HydrogenAudio wiki also has some great information on Opus and its usage.

Framesize Tweaking

Opus can encode frames of 2.5, 5, 10, 20, 40, or 60 ms. It can also combine multiple frames into packets of up to 120 ms.

Opus uses a 20 ms frame size by default, as it gives a decent mix of low latency and good quality.

For real-time applications, sending fewer packets per second reduces the overall bitrate, since it reduces the overhead from IP, UDP, and RTP headers. However, it increases latency and sensitivity to packet losses, as losing one packet constitutes a loss of a bigger chunk of audio. Increasing the frame duration also slightly improves coding efficiency, but the gain becomes small for frame sizes above 20 ms.

For these reasons, the default 20 ms frames are a good choice for most applications.