Entries tagged with vorbis

Last week, Fraunhofer and Thomson suspended their MP3 patent licensing program because the patents expired. We can finally welcome MP3 into the family of truly Free codecs!

Then came a press push calling MP3 dead. That's dumb. Fraunhofer is only calling MP3 dead to push unwary customers into 'upgrading' to AAC for which they can still charge patent fees.

This is a bit like the family pediatrician telling you that your perfectly healthy child in college is dead-- and solemnly suggesting you have another child immediately. Just to keep making money off of you.

I would call that disingenuous at best.

No, MP3 isn't dead, and it's not pining for any fjords. The money that Thomson and Fraunhofer were previously collecting in patent royalties now stays in your (and everyone else's) bottom line. Don't license something new and unnecessary just to spend more money.

If you really do need something more advanced than MP3, the best alternatives are also open and royalty-free. Vorbis is the mature alternative with 20 years of wide deployment under its belt. Better yet, consider Opus, the world's most advanced officially standardized codec.

That said, the network effects that have kept MP3 dominant for so long just got stronger. Nothing beats its level of interoperability and support. There's no reason to jump off a thoroughbred that’s still increasing its lead.

Nathan Froyd at Mozilla noticed something odd in the libvorbis sourcebase. Codebook 'length lists' only use integers in the range of 0 to 32. Well, worse than integers, actually, longs. And the lengthlists are big; the static data comprises the bulk of libvorbisenc.

In the earliest days of Vorbis development 15 years ago, codebooks were constructed differently and the lengthlists were quite small. Longs still weren't necessary, but the wasted space was negligible. When the coding strategy shifted and these lists became much larger, no one caught the wasted space. The vast majority of optimization was always for speed, not space. The only concentrated effort in trimming Vorbis library size down over the past decade had been in the decoder.

But now browsers need to ship encoders, and size matters. Add that to 64 bit taking over (and doubling the wasted space in the lengthlists), someone finally noticed the oversight.

Overview:

FFmpeg's built-in Vorbis encoder produces low enough quality output to
be considered broken. This encoder is used by default in the majority
of FFmpeg builds, and will produce .ogv and WebM videos with low to
unusably poor audio quality.

This alert is intended for all users of FFmpeg (via the command line
or GUI wrappers) and all application developers that make use of the
FFmpeg command line tool. Application developers that use the FFmpeg
libraries should also take care that the libavcodec built-in Vorbis
encoder library is not used by accident.

Scope:

All past and present builds of FFmpeg and libavcodec up to but not
including the upcoming 0.6 release. Default builds of the upcoming
FFmpeg 0.6 release will not use the built-in encoder by default, but
it will still be possible to accidentally use or restore the built-in
encoder to default status during the FFmpeg build. It should be
assumed that any build of FFmpeg and any application using FFmpeg
could be producing videos with substandard Vorbis audio unless the
FFmpeg build and usage is verified to be using system Vorbis
libraries, such as those provided by Xiph.Org or aoTuV.

Workaround / Fix:

FFmpeg can be forced to use the external/system libVorbis library by
passing:

-acodec libvorbis

as part of the FFmpeg command line.

Note that passing '-acodec vorbis' is incorrect and requests the
low-quality built-in FFmpeg-internal Vorbis encoder. Also, FFmpeg may
be built without libvorbis support, meaning that many FFmpeg builds
only have the internal encoder available. In this case, requesting
'-acodec libvorbis' will fail with the error 'Unknown encoder
'libvorbis''.

FFmpeg can be built with working libvorbis support and the internal
Vorbis encoder disabled as follows:

Such a build completely removes the internal Vorbis encoder from
libavcodec, eliminating the possibility of accidental use on the
command line or in libavcodec-based applications.

Verification:

Use of a good Vorbis encoder in .ogg, .oga, .ogv and WebM files may be
verified as follows. This test will work on any Ogg or WebM file to
verify the encoder that produced the audio. Note that 'Vorbis' is
case-sensitive:

strings file_to_be_checked | grep Vorbis

A file that was encoded using a good encoder will output a line
containing 'Xiph.Org libVorbis' or 'AoTuV', such as:

The title is mostly due to having seen three or four other blog posts simultaneously making this joke. It had popped into my mind too :-)

In case folks hadn't seen yet, Google (as everyone had
expected with bated breath) announced the open sourcing of VP8
today as part of the WebM project. WebM combines a Vorbis
audio stream and a VP8 video stream into a Matroska container for
use in web video. Then there are a whole lot of other tiny project details
like garnering industry support.

Yes, we've actually known for a little while this would be
happening. Google is moving quite fast after having their On2
purchase plans delayed several months. We'll have a press release
up soon expressing support in drier language, though it's mostly
an exercise in formality since everyone already knows our position.

Now that I'm actually allowed to talk about it, the important
bits to take away are:

Of *course* we (Xiph) support WebM. This is great news for
open source, open media, and our own plans at Xiph count on WebM
succeeding. How good the WebM news turns out to be depends on
what we make it.

Vorbis is part of WebM and will probably see a new uptick in
active development. WebM doesn't immediately affect
Theora (development of Theora continues along with VP8), but
that's vaguely irrelevant. The good of unencumbered media is the
point, not Theora or Vorbis or Ogg or any specific piece of
software. We're after a fundamental change to the business and
social environment. Software and software advocacy happens to be
the tool Xiph uses to effect change.

Open media is obviously philosophically 'clean' and good for
the public and good for social transparency. It's even better
for business. Business makes good money on the Web using Open
technologies. In fact, these are the only technologies that have
seen sustained success online. We fully expect that pattern to
hold.

Xiph has been locked in a political battle with a large
monopoly power for years now, and a political fight is not what
Xiph.Org is good at or built for. We're built to research and
develop media software. This announcement gives us breathing
room to get back our primary long term goal: leapfrogging the
proprietary competition. We don't want to be as good, we always
want to be better.

Aside from bugfixes, the major story here is the first wide release of all the surround hacking I've been doing the past two months. Previous demo pages (one and two) had documented my progress till now; there's actually one more coming that I've just started on.

In addition to that, we also tagged on a release of libogg with a new default page spill rule that reduces container overhead for higher bitrate streams like video. The change is simple, but it's a reduction in bitrate for free so why not. Applications don't have to do anything, just drop in the new lib. In addition to demo pages and blogging, I've also begun a comprehensive expansion of the Ogg documentation (the very beginnings of which are in the release-- not much yet).

A full first cut of Vorbis with optimized 5.1 is now in Xiph.org SVN along with a new demo page. We're currently on schedule for a new release of libvorbis, vorbis-tools and ao next week, depending on how much time LibrePlanet takes this weekend.

It's amazing how software sidetracks can plow through years of time. I'm finally getting back to Vorbis (and other audio development) after a minor two year video distraction that saw the completion of a new experimantal Theora encoder (Thusnelda) last year, and the beginning of the next experimental Theora encoder which Tim has named Ptalarbvorm. Ptalarbvorm is already showing further large improvements over Thusnelda (honestly, I think he's already doubled again on Thusnelda).

But this post is about Vorbis.

One thing on the original Vorbis bullet list was surround encoding. Vorbis was always surround capable and the software is happy to encode as many channels as you like, but once you're past stereo, everything is encoded as entirely discrete channels. This hasn't been so bad really; despite discrete channels, Vorbis's coding efficiency compares favorably to other surround-capable formats. That said, Vorbis can do better.

When beginning surround optimization work on Vorbis, I found the encoder handled remapping the channel order of input formats, but it didn't always do it properly (FLAC and some WAV inputs were frotzed). I also found that ogg123 needed updating to handle output order. These improvements will be released in vorbis-tools 1.4.0 sometime soon.

The hard part of the tool updates turned out to be libao, which both had no concept of channel ordering, and had also bitrotted substantially while maintainerless. The idea had been that Lennart Poettering's SydneyAudio was going to replace libao so there was no sense continuing to develop libao. We'd just use libao while we waited and not put any more resources into it. Unfortunately, Lennart has been entirely occupied fighting his PulseAudio battles, and this is frankly a more important use of his time. SydneyAudio is no closer to completion than it was a few years ago. We can't continue to wait for it.

So, I'm announcing the resumption of active development and maintenance of libao until such time as there's something better to replace it.

I've made up a surround demo page (like the ones I made during Thusnelda development) with more details on vorbis-tools, libao, and Vorbis's in-progress surround hacking. It goes into alot more detail about Vorbis's surround and channel coupling system with diagrams and samples. I hope folks like it!