Взаємопроникнення каналів, стереопанорама і експерименти з режимами стерео

Не так давно їхав додому, а в навушниках грали 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 не здатне закодувати фазову затримку між каналами (це дуже важливий параметр для локалізації джерел в просторі), а якщо йому підсунути трек, де один з каналів буде повною інверсією другого (противофаза), на виході вийде тиша (при зведенні в моно підсумовування протифазних сигналів дає нуль).

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

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

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

Будемо використовувати VBR режим, який стоїть за умовчанням. У документації до кодеру написано, що він підтримує бітрейт від 6 kbps на канал. Проте, практика показує, що до 30 кбіт / с для стерео він використовує зведення в моно. Починаючи з 30 з'являються якісь уривки звуків на каналі side (різницевої), а при 32 кбіт / с вже з'являється якась подоба стереопанорами, хоч і занадто звуженої. Приблизно до 40 кбіт / с взаємопроникнення каналів сходить нанівець, і ми отримуємо відмінне поділ стерео.

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

Ну і, нарешті, переходимо до найцікавішого - LAME з його режимом Joint Stereo.

Про режими стерео можна досить докладно прочитати на сторінці LAME. а також тут.

Отже, почнемо з найбільш оптимального режиму 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.

Закодируем семпл з параметрами -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.

Інформація від спонсора

200? '200px': '' + (this.scrollHeight + 5) + 'px'); "> Joint Stereo, це добре, але може бути застосовано тільки для Lame


о це так новина. Взагалі-то в AAC технологія MS кодування навіть на порядок більш просунута, ніж в MP3. І він також буде кодувати моно з половинним бітрейтом (як наслідок нуля на різницевої каналі).

І що таке "реальний бітрейт"? Він тисне в цільове якість, а бітрейт - як вийде. Причому тисне з усіма артефактами исходника.
Немає ніякого сенсу вказувати моно, якщо тільки немає необхідності отримати на виході один канал.

Різницю L-R можна послухати, додавши в DSP фубара Mid / Side Stereo Converter.

200? '200px': '' + (this.scrollHeight + 5) + 'px'); "> Joint Stereo, це добре, але може бути застосовано тільки для Lame - ось це новина

Та яка вже там новина) Просто недолік знань і досвіду.
Я AAC чіпав тільки через MeGui і TAudioConverter. Так нічого подібного, на відміну від Lame, я в них не побачив
Я покурю мани по QAAC більш уважно і вдумливо. Дякую за наводку.

200? '200px': '' + (this.scrollHeight + 5) + 'px'); "> І що таке" реальний бітрейт "?

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

200? '200px': '' + (this.scrollHeight + 5) + 'px'); "> Різницю L-R можна послухати, додавши в DSP фубара Mid / Side Stereo Converter.

Дякуємо. Обов'язково спробую. Але дуже хочеться не тільки "послухати", але і "подивитися".