Skip to main content


Please note that most of the software linked on this forum is likely to be safe to use. If you are unsure, feel free to ask in the relevant topics, or send a private message to an administrator or moderator. To help curb the problems of false positives, or in the event that you do find actual malware, you can contribute through the article linked here.
Topic: Opus native FFmpeg encoder under development (Read 6427 times) previous topic - next topic
0 Members and 1 Guest are viewing this topic.

Opus native FFmpeg encoder under development

Quoting the commit message:

opus: add a native Opus encoder

This marks the first time anyone has written an Opus encoder without
using any libopus code. The aim of the encoder is to prove how far
the format can go by writing the craziest encoder for it.

Right now the encoder's basic, it only supports CBR encoding, however
internally every single feature the CELT layer has is implemented
(except the pitch pre-filter which needs to work well with the rest of
whatever gets implemented). Psychoacoustic and rate control systems are
under development.

The encoder takes in frames of 120 samples and depending on the value of
opus_delay the plan is to use the extra buffered frames as lookahead.
Right now the encoder will pick the nearest largest legal frame size and
won't use the lookahead, but that'll change once there's a
psychoacoustic system.

Even though its a pretty basic encoder its already outperforming
any other native encoder FFmpeg has by a huge amount.

The PVQ search algorithm is faster and more accurate than libopus's
algorithm so the encoder's performance is close to that of libopus
at zero complexity (libopus has more SIMD).
The algorithm might be ported to libopus or other codecs using PVQ in
the future.

The encoder still has a few minor bugs, like desyncs at ultra low
bitrates (below 9kbps with 20ms frames).

Re: Opus native FFmpeg encoder under development

Reply #1
How do you use this alternative Opus encoder using the command line? Does it replace "libopus" or is it included alongside it?

For example:
"ffmpeg -i input.wav -b:a 64k output.opus"

^ This works just fine, but I think it just uses the standard "libopus" encoder. Can someone help me out?

EDIT: Never mind, figured it out for myself:
"ffmpeg -i input.wav -strict -2 -c:a opus -b:a 64k output.opus"

Re: Opus native FFmpeg encoder under development

Reply #2
Is there a Opus native decoder too?

Re: Opus native FFmpeg encoder under development

Reply #3
Is there a Opus native decoder too?
Looks like it - "opusdec.o" is included alongside "opusenc.o" under libavcodec/Makefile.

Decodes an order of magnitude faster than usual - probably due to the lack of complexity compared to libopus.