Взаимопроникновение каналов, стереопанорама и эксперименты с режимами стерео

Дата обновления: 08 Декабря 2013
2013-12-08T02:04
Audiophile's Software

Не так давно ехал домой, а в наушниках играли The Doors. И тут я в очередной раз обратил внимание, что в некоторых треках The Doors местами совершенно отсутствует взаимопроникновение каналов. Т.е. тарелки могут звучать исключительно в левом ухе, а их пресловутый электроорган — в правом, причем звук в противоположный канал не проникает (есть крайне низкий уровень взаимопроникновения, очевидно обусловленный звукозаписывающим оборудованием тех времен). Единственное что — дорожка с вокалом, конечно, звучит посередине, с эффектом реверберации. В общем, стерео-эффект получается весьма своеобразный, особенно в наушниках. Кстати, как раз для таких случаев существуют плагины Crossfeed и Bauer Stereophonic-to-binaural — они имитируют взаимопроникновение каналов (т.е. из правого канала в левое ухо, из левого — в правое), которое происходит во время прослушивания на акустике, и таким образом «складывают» стереопанораму; то есть источник локализуется не где-то, непонятно где в ушах, а спереди. Так что очень полезная штука для прослушивания подобных записей, не рассчитанных на наушники.

Так вот. Слушал я Doors и вдруг понял, что их треки идеально подходят для проверки кодирования стереопанорамы.

Особый интерес здесь составляют современные кодеры в режимах с низким битрейтом. На низких битрейтах такие кодеры как AAC и Opus, используют специальные технологии кодирования стерео. Например, AAC использует технологию под названием Parametric Stereo. Принцип её работы заключается в том, что два канала кодируются не по отдельности, а сводятся в моно дорожку, к которой прилагается небольшой поток (2-3 кбит/с) с параметрической информацией о стереопанораме (подробнее написано здесь). Этот поток содержит что-то вроде карты стереопанорамы в частотно-временной плоскости. Кстати, напомню: одним из преимуществ AAC (в частности, перед MP3) является возможность раздельной работы со стереопанорамой в каждой частотной полосе — таким образом для одной полосы может быть выбрано M/S кодирование, для другой L/R. Таким же образом для каждой частотной полосы в режиме PS кодируется разброс по каналам, что позволяет значительно сэкономить битрейт, дабы использовать его для повышения общей прозрачности звучания. Но такой метод, конечно же, вносит определенные ограничения. Например, PS неспособно закодировать фазовую задержку между каналами (это очень важный параметр для локализации источников в пространстве), а если ему подсунуть трек, где один из каналов будет полной инверсией второго (противофаза), на выходе получится тишина (при сведении в моно суммирование противофазных сигналов дает нуль).

FhG AAC

Итак, я подготовил специальный 30-секундный семпл, представляющий собой начало трека The Doors — Break on Through. Можете прослушать и убедиться, что в нем присутствует практически стопроцентное разделение стерео. Давайте теперь послушаем, как справится с нашим семплом параметрическое стерео. Закодируем его с помощью FhG AAC Encoder --profile hev2 --cbr 64. Я специально выбрал максимальный доступный битрейт для режима SBR+PS, чтобы сосредоточиться именно на стереопанораме.

Давайте прослушаем результат.

Похоже, что режим PS справился со стереопанорамой очень даже неплохо. Явно слышно, что тарелки, бас-гитара и орган по прежнему локализуются в отдельных каналах. Тем не менее мы можем слышать некоторое взаимопроникновение, особенно если временно отключим один из каналов. Очевидно, оно обусловлено ограниченным разрешением карты по времени и частоте.

Opus

А теперь посмотрим, как выполняет кодирование стерео на низких битрейтах Opus.

Будем использовать VBR режим, который стоит по умолчанию. В документации к кодеру написано, что он поддерживает битрейт от 6 kbps на канал. Тем не менее, практика показывает, что до 30 кбит/с для стерео он использует сведение в моно. Начиная с 30 появляются какие-то обрывки звуков на канале side (разностном), а при 32 кбит/с уже появляется некоторое подобие стереопанорамы, хоть и слишком суженной. Примерно к 40 кбит/с взаимопроникновение каналов сходит на нет, и мы получаем отличное разделение стерео.

Очень похоже, что в коде Opus явно задано не выделять каналу Side биты при битрейте ниже 30, а при изменении битрейта в большую сторону, как раз идет приращение потока для канала Side. Впрочем, я уже написал свои результаты и вопрос на форум HydrogenAudio.

LAME

Ну и, наконец, переходим к самому интересному — LAME с его режимом Joint Stereo.

О режимах стерео можно довольно подробно прочитать на странице LAME, а также здесь.

Режимом по умолчанию в LAME, как мы знаем, является Joint Stereo. Причем надо отметить, что у этого режима ест вариации. Во-первых, существует обычное Joint Stereo, где кодер выбирает для каждого фрейма режим кодирования — Mid/Side или L/R стерео, и существует режим форсированного Joint Stereo, при котором абсолютно все фреймы кодируются в режиме Mid/Side. Также существует некая скрытая опция «Safe Joint Stereo», значение которой (on/off) прописывается в LAME Tag, и может прочитано например через EncSpot. Включение этого режима гарантирует, что кодер не станет экономить на стереопанораме и будет очень тщательно отбирать фреймы для кодирования в режиме MS. Этот режим используется в режиме VBR, а также при высоких битрейтах CBR/ABR. До его появления использование режима Joint было небезопасным и могло привести к слышимой деградации стерео даже при высоком битрейте. Именно это послужило причиной многим мифам насчет режима Joint, до сих пор гуляющим в сети.

VBR V2

Итак, начнем с наиболее оптимального режима VBR V2. При кодировании с использованием LAME 3.99.5 результирующий битрейт составил 191 кбит/с. Посмотрим, что покажет нам EncSpot:


Мы видим, что семпл был закодирован в безопасном режиме Joint, и что практически все фреймы закодированы в L/R Stereo, чего и следовало ожидать.

Примечательно, что если мы форсируем для кодера режим L/R Stereo (ключ -ms), это не повлияет ни на звучание, ни на битрейт — так как в первом случае кодер сам фактически выбрал этот режим. Что же касается режима Dual Channel, то здесь результирующий битрейт вышел чуть меньше — 186 кбит/с. Говорить о причинах этого довольно сложно, но это определенно связано с тем фактом, что в режиме Dual кодер использует для каждого канала отдельный резервуар бит.

Forced Joint

Итак, в режиме VBR LAME использует исключительно режим Safe Joint. Так что единственным способом получить M/S фреймы будет форсирование режима Joint. Добавим к -V2 параметр -mf.

Итог: битрейт подскочил до 290 кбит/с, а между каналами появилось взаимопроникновение (хотя услышать его можно только отключив один из каналов). Это пример случая, когда кодирование в режиме Mid/Side крайне неэффективно. Из-за высокой сложности разностного сигнала суммарная сложность каналов M и S оказывается больше, чем L и R, потому для достижения целевого качества (VBR — это кодирование с заданным целевым качеством, битрейт при этом не ограничивается) необходимо большее количество бит. И то, полного битрейта в 320 кбит/с не хватает для достаточно качественного кодирования канала Side.

Можно объяснить еще нагляднее. Что мы имеем в начале семпла, если рассматривать режим L/R? Левый канал содержит в себе звучание инструментов, а правый — лишь небольшой шум, практически полную тишину. Таким образом на кодирование правого канала пойдет совсем незначительное количество бит. Если же мы выполняем преобразование в M/S, то при суммировании каналов получаем музыку + шум в канале Mid, а при вычитании музыку + шум (уже с инвертированной фазой) в канале Side. В итоге оба канала содержат довольно сложные сигналы, и для их кодирования пойдет битрейт чуть ли не в два раза больше. Так и есть: в режиме L/R кодер использует для вступления ~176 кбит/с, а в режиме MS — все 320.

Впрочем, это мы еще легко отделались. Давайте посмотрим, что у нас с режимом CBR.

CBR

Закодируем семпл с параметрами -b 192 -q0. Это всё еще режим Safe Joint. Результат в плане звучания оказывается вполне приемлемым, практически все фреймы по прежнему закодированы в L/R режиме.

Теперь форсируем режим M/S. Можете прослушать результат самостоятельно. В самом начале семпла, кроме проникания звуков в правый канал, мы получаем еще и артефакты. В режиме CBR кодер не может увеличить битрейт для сохранения качества, в итоге оно в значительной степени страдает. То что мы слышим — это артефакты канала Side, на который кодер просто не нашел достаточного количества бит.

Unsafe Joint

Ну и что касается режима Unsafe Joint. В этом режиме кодер может экономить на стереопанораме, отдавая приоритет каналу Mid. Safe Joint выключается начиная со 128 кбит/с. Напомню: в режиме Safe процент MS фреймов был равен 5.2. При 128 кбит/с он увеличился до 6.9. При дальнейшем понижении битрейта количество MS фреймов будет расти. На моём семпле при 32 кбит/с оно достигло 26.5%. Тем не менее, это далеко не всегда означает, что будут наблюдаться слышимые артефакты или сужение стереопанорамы. Что касается артефактов — кодер не станет использовать MS, если при этом улучшение качества канала Mid достигается ценой сравнимого или более значительного ухудшения для Side.

Выводы

Таким образом мы видим, что выбор правильного режима кодирования стерео позволяет значительно сэкономить битрейт и выиграть в плане качества. И наоборот: выбор неправильного режима (что чаще всего связано с неуместным форсированием параметров) может привести к серьезному ухудшению качества кодирования. Это в равной степени относится и к материалам с очень высокой корреляцией каналов. Если брать предельный случай, форсирование режима L/R для моно сигнала (точнее, для двухканального сигнала, но с совершенно идентичной информацией в обоих каналах) даст неоправданное увеличение битрейта примерно в два раза для VBR, ну и ухудшение качества в половину для режима CBR.

[Обсудить на форуме]


Информация от спонсора

AV Custom: комфорт через технологии. Компания на рынке системной интеграции с 1998 года. AV Custom предоставляет услуги дизайна аудио-видео среды. В числе услуг — установка домофонных систем, (включающих в себя кодовые замки, видеопанели, и т.д.). У нас Вы можете заказать установку домофонных систем SSS Siedle — ведущего производителя Европы. Возможна установка как в жилых комплексах, административных зданиях, etc, так и в частных домах.

 
   
Добавил: Audiophile | Просмотров: 14989 | Рейтинг: 5.0/5, голосов: 1
Комментариев: 6
Добавлять комментарии могут только зарегистрированные пользователи. [ Регистрация | Вход ]
0   Спам
[4] TakeV (26 Декабря 2013 12:23)
И все-таки вопрос остается открытым - чем быстро и эффективно посмотреть разность L-R?
Есть много прог, отображающих X-Y-диаграмму, но они все навороченные и неудобные, и не для того сделаны. Может в каком-то другом месте задать это вопрос? Вроде тема эта - самая подходящая...
0   Спам
[5] Audiophile (26 Декабря 2013 12:29)
Audiophile
Цитата
Joint Stereo, это хорошо, но применимо только для Lame

вот это новость. Вообще-то в AAC технология MS кодирования даже на порядок более продвинутая, чем в MP3. И он также будет кодировать моно с половинным битрейтом (как следствие нуля на разностном канале).

И что такое "реальный битрейт"? Он жмет в целевое качество, а битрейт - как получится. Причем жмет со всеми артефактами исходника.
Нет никакого смысла указывать моно, если только нет необходимости получить на выходе один канал.

Разницу L-R можно послушать, добавив в DSP фубара Mid/Side Stereo Converter.
0   Спам
[6] TakeV (26 Декабря 2013 14:52)
Цитата
Joint Stereo, это хорошо, но применимо только для Lame - вот это новость
Да какая уж там новость ) Просто недостаток знаний и опыта.
Я AAC трогал только через MeGui и TAudioConverter. Так ничего подобного, в отличие от Lame, я в них не увидел
Я покурю маны по QAAC более внимательно и вдумчиво. Спасибо за наводку.

Цитата
И что такое "реальный битрейт"?
Термин, конечно, не академический... Ну, имеем, к примеру, дорогу  192, но реально, на слух там не более 96. Жмем вот такой строкой: --ignorelength --threading -V 63 - -o
и получаем TVBR 70-90. Беру flac из достоверного источника, жму с теми же параметрами - получаю TVBR 120-170.
Это безотносительно к теме моно-стерео. Оба пережатия делаются без вмешательства в каналы и частоту дискретизации, одним и тем же сохраненным профилем.

Цитата
Разницу L-R можно послушать, добавив в DSP фубара Mid/Side Stereo Converter.
Спасибо. Обязательно попробую. Но очень хочется не только "послушать", но и "посмотреть"...
0   Спам
[1] TakeV (23 Декабря 2013 11:33)
А какой утилитой можно быстро и эффективно прикинуть на глаз - насколько сильное стерео в исходном треке? Другими словами - как увидеть разницу Side = L-R, чтобы решить кодировать в моно или ином режиме.
0   Спам
[2] Audiophile (23 Декабря 2013 21:37)
Audiophile
А зачем решать? Режим Joint Stereo всё сам делает. Моно он закодирует с половинным битрейтом (речь о VBR конечно же), даже если канала два
0   Спам
[3] TakeV (24 Декабря 2013 16:38)
Ну, во-первых, просто интересно ) Но, есть и практический интерес. Joint Stereo, это хорошо, но применимо только для Lame. Мне же это нужно для QAAC. Я обнаружил в нем интересную особенность - он уверенно расправляется с апконвертом и жмет в реальный битрейт, а не в надутый кем-то, что часто встречается в видео-дорожках. Остается только выяснить - реальное-ли стерео в дороге, или же можно смело сказать ему делать моно?