首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强迫L/R立体声

强迫L/R立体声
EN

Stack Overflow用户
提问于 2014-04-04 15:07:10
回答 2查看 662关注 0票数 5

我试图用L/R立体声制作低比特率的作品。什么决定opusenc是否使用L/R立体声而不是联合立体声?有我可以通过的旗帜吗?它和比特率有关吗?

代码语言:javascript
复制
opusenc input.wav output.opus //produces L/R stereo
opusenc input.wav output.opus --bitrate 8 //produces joint stereo
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-12 06:02:06

看起来它是被确定的这里

代码语言:javascript
复制
    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源代码,在struct OpusEncoder上将struct OpusEncoder设置为2就会使其工作。但是,查看opusenc.c源代码,该字段集在哪里。但是,您可以轻松地修改源,使之始终强制信道为两个。在未来,它似乎被称为“双立体声”而不是"L/R立体声“。

票数 2
EN

Stack Overflow用户

发布于 2014-04-10 16:49:33

在默认情况下,Opus试图根据当前的比特率做出可能的最佳决策。决定是在下表(20毫秒帧大小)上作出的:

  • 8-12 kbit/s为NB语音,
  • 16-20千比特/秒用于世行演讲,
  • 28-40 kbit/s用于FB演讲,
  • 48-64 kbit/s的FB单声道音乐,以及
  • 64-128 kbit/s的FB立体声音乐。

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

实际上,文档中说可以改变通道的数量,但是它并没有解释怎么做。无论如何,我稍后会看看如何做这件事。

你可以在rfc6716上找到这些信息

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22866436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档