强制L / R立体声

时间:2014-04-04 15:07:10

标签: webrtc opus

我试图用L / R立体声产生低比特率的opus文件。是什么决定opusenc是否会使用L / R立体声而不是联合立体声?我有可以通过的旗帜吗?它与比特率有关吗?

opusenc input.wav output.opus //produces L/R stereo
opusenc input.wav output.opus --bitrate 8 //produces joint stereo

2 个答案:

答案 0 :(得分:2)

看起来确定here

    if (st->force_channels!=OPUS_AUTO && st->channels == 2)
    {
        st->stream_channels = st->force_channels;
    } else {
#ifdef FUZZING
       /* Random mono/stereo decision */
       if (st->channels == 2 && (rand()&0x1F)==0)
          st->stream_channels = 3-st->stream_channels;
#else
       /* Rate-dependent mono-stereo decision */
       if (st->channels == 2)
       {
          opus_int32 stereo_threshold;
          stereo_threshold = stereo_music_threshold + ((voice_est*voice_est*(stereo_voice_threshold-stereo_music_threshold))>>14);
          if (st->stream_channels == 2)
             stereo_threshold -= 4000;
          else
             stereo_threshold += 4000;
          st->stream_channels = (equiv_rate > stereo_threshold) ? 2 : 1;
       } else {
          st->stream_channels = st->channels;
       }
#endif
    }

简单地阅读opusenc源代码,看起来在force_channels上将struct OpusEncoder设置为2会使其正常工作。但是,通过opusenc.c源代码查看,该字段集不在哪里。您可以轻松修改源,但始终强制通道为两个。对于未来,它看起来像opus称之为"双立体声"而不是" L / R立体声"。

答案 1 :(得分:1)

默认情况下,Opus尝试根据当前比特率做出最佳决策。决定如下表所示(帧大小为20毫秒):

  • NB语音为8-12 kbit / s,
  • WB语音为16-20 kbit / s,
  • FB演讲时为28-40 kbit / s,
  • FB mono音乐的速度为48-64 kbit / s,
  • FB立体声音乐的64-128 kbit / s。

这是因为opus假设,如果比特率太低,它就不能以足够的质量对立体声进行编码。

实际上文档说可以改变通道的数量,但它没有解释如何。不管怎么说,我都会看一下如何做到这一点。

您可以在rfc6716

上找到这些信息