2014-04-04 20 views
5

Sto provando a produrre file opus a basso bitrate con stereo L/R. Che cosa decide se opusenc utilizzerà lo stereo L/R invece dello stereo comune? C'è una bandiera che posso passare? È legato al bitrate?Forza stereo L/R

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

Stavo testando questo codificando un file con separazione stereo molto alta e ascoltando il risultato. I canali erano nettamente separati con la codifica predefinita. –

risposta

2

sembra che si determina 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 
    } 

Proprio breifly lettura attraverso il codice sorgente opusenc, sembra che l'impostazione force_channels a 2 sui struct OpusEncoder sarà fallo funzionare. Tuttavia, guardando attraverso il codice sorgente opusenc.c, non è dove è impostato quel campo. È comunque possibile modificare facilmente la sorgente per forzare sempre i canali a essere due. Per il futuro, sembra che l'opus la chiami "dual stereo" piuttosto che "L/R stereo".

+0

La messing con il codice incollato sopra cambierà solo quando il codificatore decide di eseguire il downmix su mono internamente. L'esatta modalità stereo (L/R vs mid-side vs intensità) è distribuita tra il codice SILK e CELT e non è qualcosa con cui dovresti scherzare. Non sono sicuro di cosa stava cercando di raggiungere il post originale, ma probabilmente non era quello il modo con cui si lavorava in stereo. –

1

Opus tenta di default di prendere la decisione migliore possibile in base al bitrate corrente. La decisione è presa sulla seguente tabella (20 ms telaio):

  • 8-12 kbit/s per NB discorso,
  • 16-20 kbit/s per WB discorso,
  • 28-40 kbit/s per FB speech,
  • 48-64 kbit/s per musica mono FB e
  • 64-128 kbit/s per musica stereo FB.

Questo perché opus presuppone che, se il bitrate è troppo basso, non può codificare stereo con qualità sufficiente.

In realtà la documentazione dice che è possibile cambiare il numero di canali, MA non spiega come. In seguito, darò un'occhiata su come farlo.

È possibile trovare queste informazioni sul rfc6716