TransWikia.com

Is there a way to optimize silence periods in Opus better than DTX does?

Stack Overflow Asked by prgDevelop on January 31, 2021

I’m doing a little bit of research about the DTX option in Opus:

Discontinuous Transmission (DTX) reduces the bitrate during silence
or background noise. When DTX is enabled, only one frame is encoded
every 400 milliseconds.

I wonder if there’s an easy way to make Opus encode exactly one frame for the whole duration of a silence period rather than encoding useless silence frames every 400 milliseconds?

I want to produce “absolute” silence during silent or non-speech activity and minimize the overhead of headers, so basically a quiet recording will produce an almost empty file.

If there are other codecs that can accomplish that, I’d be happy to hear about them.

One Answer

I did not test this, but I am very confident it can be done, however, you would be breaking the standards which state:

2.1.9. Discontinuous Transmission (DTX)

Discontinuous Transmission (DTX) reduces the bitrate during silence or background noise. When DTX is enabled, only one frame is encoded
every 400 milliseconds.

Download the source code, open file ./silk/define.h and change line 57 [source for Linux] from

#define MAX_CONSECUTIVE_DTX 20 /* eq 400 ms */

to something like

#define MAX_CONSECUTIVE_DTX 40 /* eq 800 ms */

or whatever you feel is adequate. Without changing the source code I don't think it's possible, because as stated here

Even though Opus is now standardized by the IETF, this Opus implementation will keep improving in the future. Of course, all future versions will still be fully compliant with the Opus IETF specification.

Answered by James Mead on January 31, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP