Why (low bitrate) Opus is bad for music.

SoundCloud’s transition to Opus & audio quality tests.

In late 2017, following reports earlier in the year of SoundCloud’s apparent demise, many artists had noticed a dip in SoundCloud’s audio quality. I had friends asking why SoundCloud is degrading the quality of their tracks. Being used to the change in quality from WAV to SoundCloud’s (apparent) 128kbps MP3 encoding, I just brushed of the questions as typical complaints of MP3.

But in the beginning of December 2017, I played a track on SoundCloud, that was mixed very wide, on my studio monitors and found that it sounded extremely odd.

I started looking into this and noticed that anytime I hit the mono switch on my audio interface I would notice extreme amounts of artifacts that were not nearly as present on my headphones.

In Google Chrome, checking what files were being loaded into cache lead to "64.opus" files instead of what I was expecting (MP3).

SoundCloud serving Opus.

This was odd since SoundCloud has stated they serve users 128kbps MP3s.

youtube-dl’s list of available formats.

I found that SoundCloud was prioritizing their 64kbps Opus. But still kept the MP3’s accessible in both streaming (hls) and full download (http). Some friends were getting MP3s and some were getting Opus.

On January 3rd, I published a Chrome Extension to the webstore that reverted this change by blocking Opus, Ogg, and WebM.

Soundcloud recently changed their streaming format from 128kbps MP3 to 64kbps Opus. This drastically reduces the audio quality and can introduce strange artifacts.

I made & released a Chrome Extension to restore the 128kbps MP3s. Give it a try.https://t.co/hGUuxiJXYG pic.twitter.com/bYkbyhcNWd

— Direct (@DirectOfficial) January 3, 2018

This announcement tweet spread quickly, and lead to articles on publications such as Billboard about how SoundCloud had reduced quality. And responses from SoundCloud about how that was not the case.

Over the course of two days, I had also received many responses about how Opus was indeed better than MP3 even at half of the bitrate. I had (incorrectly) assumed this was because of perhaps an older version of the codec as these examples surely show a large improvement and apparent transparency.

On January 5th, 2017, I had noticed SoundCloud was not serving users Opus files anymore (as far as I could tell).

On January 8th, 2017, I was informed that SoundCloud was still serving users 64kbps Opus to embedded players.

The problem with 64kbps Opus.

I had been being served Opus files from SoundCloud for quite some time before noticing a problem. The reason being is that I was using headphones. 64kbps Opus is fine but doesn’t take into relation the middle and side pseudo-channels.

When listening on headphones there is no crossfeed (bleed between the left and right channels.) When crossfeed is introduced, either in a plugin or by listening through speakers, the quality reduction becomes far more audible.

This explains why I saw odd high-end behavior on SoundCloud for a few weeks before noticing a quality drop. (I had been producing on headphones exclusively for about a month at the time).

A video I captured of the spectrum of a SoundCloud song on December 4th. (Bright Blue = Mid, Dark Blue = Side)

Notice the odd high-end dips? Those are not present in 128kbps MP3.

Let us listen.

Following this, I wanted to do additional testing to see if SoundCloud was using an outdated version of the codec or if Opus is actually as bad as it sounded to me.

I found that Opus 1.3 is pretty good. It extends far into the high-end, but exhibits the same limitations on stereo music as Opus 1.2.1 at 64kbps.

128kbps MP3:
Tomorrow Encoded in LAME MP3 — 128kbps — CBR — Stereo
Tomorrow Encoded in LAME MP3 — 128kbps — CBR — Mixed Down To Mono
64kbps Opus:
Tomorrow Encoded in Opus 1.3 — 64kbps — VBR — 20ms — Stereo
Tomorrow Encoded in Opus 1.3 — 64kbps — VBR — 20ms — Mixed Down To Mono

This is the bitrate SoundCloud served to users rather than 128kbps MP3. These examples were encoded in the lasted beta version of the Opus Codec. As I am sure you can tell, in the mono example there is audible shimmer and distortion in the high-end.

128kbps Opus:
Tomorrow Encoded in Opus 1.3 — 128kbps — VBR — 20ms — Stereo
Tomorrow Encoded in Opus 1.3 — 128kbps — VBR — 20ms — Mixed Down To Mono

At 128kbps Opus the distortion in the high end is almost (if not) completely gone in the mono version. It is also the version where I am not seeing the phase issues on my mid/side spectrum analyzer anymore.

Download the full battery of tests: Dropbox

Conclusion

To me, it is clear that 64kbps Opus is not suitable for stereo music. While it has advantages such as small file size, its efficient and fast to encode and decode (great for VoIP), and extends far into the high end even at low bitrate. The downsides outweigh the advantages for stereo music at this time.

If Opus took more into account the relationship between mid and side and prevented the strange phase distortion when crossfeed is introduced I would surely say Opus is perfect at low bitrate, but for now 128kbps Opus is the lowest I would go for stereo music.

These are my own tests. I still would love to be corrected if I am wrong. If anyone would like to discuss this or argue with me hit me up on Twitter.