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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With