1

Тема: TrueHD.Клипинг при микшировании и автоматической регулировки громкости

Многоканальные AC3 дорожки специально делают тихими, чтобы при микшировании в стерео не было клипинга.

Многоканальные TrueHD дорожки идут изначально громкими. Это приводит к тому, что при простом матричном микшировании в стерео получается заметный клипинг. Лечится нормализацией матрицы микширования, но у этого метода есть недостатки.

Так же есть сообщения, что автоматическая регулировка громкости (АРГ) также может создавать клипинг на громких треках. У меня есть некоторые сомнения по этому поводу. Этот момент необходимо будет перепроверить на громком стерео.

Добавлено: 2017-05-30 13:40:09

В общем, что делать пока непонятно. Вручную тыкать опции в зависимости от громкости многоканальных треков - дурацкое решение.

Как вариант разрулить через АудиоПереключатель.
Например, если в АудиоПереключателе включена АРГ, то говорить аудио рендереру, чтобы тот использовал нормализованную матрицу микширования.

Еще есть идея с микшированием TrueHD в стерео в самом декодере. Речь идет о параметрах микширования зашитыми в TrueHD-поток. Способ так же работает для DD, DD+ и DTS.

Добавлено: 2017-05-30 22:36:06

Реализация микширования в декодере:
Если в настройках плеера выбрать "Микшировать каналы в Стерео", то он через спец. метод говорит декодеру, чтобы тот по возможности декодировал в стерео. Если декодер поддерживает такое режим, то на выходе будет стерео. Если нет, то декодер выдает как есть,  и микшированием будет заниматься аудиопереключатель.

Добавлено: 2017-05-30 23:01:56

1-й тестовый билд
Билд хорошо работает, если задать "Микшировать каналы в Стерео" до открытия файла.
На лету может тупить и не переключать, если в графе несколько декодеров (например, если открыть MKV с кучей дорожек).

Добавлено: 2017-05-31 05:45:49

2-й тестовый билд
Исправлена работа с несколькими декодерами в графе.
PS: после переключения на лету возможно потребуется поиск по полосе прокрутки.

3-й тестовый билд
Исправлено переключение микшера декодера на лету.

4-й тестовый билд
Добавлен галка "Запросить стерео у декодера" ("Request stereo from the decoder").
PS: Возможен конфликт, если в системе установлен MpaDecFilter.ax.

Опция "Запросить стерео у декодера" введена в r2616.

2

Re: TrueHD.Клипинг при микшировании и автоматической регулировки громкости

А может ну его нафиг "умный" микс в стерео ?? Ну добавить галку в декодер, типа "Downmix to stereo(AC3/DTS/TrueHD)". А то все эти лишние навороты ...

I7 2600K@4.2 / Asrock P67 Extreme 4 Gen 3 / Kingston HyperX 8Gb 1866 (4x2) Kit / GIGABYTE GTX 960 / BenQ EW2430 / LG 47LM620T / Yamaha RX-V471 + NS-555 + NS-C444 + NS-333 + YST-SW215

3

Re: TrueHD.Клипинг при микшировании и автоматической регулировки громкости

Галка в плеере, галка в декодере - неудобно. А так управление микшированием будет в одном месте.
В коде ничего такого сложного нет. Осталось лишь заставить декодер на лету переключаться.

4

Re: TrueHD.Клипинг при микшировании и автоматической регулировки громкости

Смотри как обрабатывается в аудио-переключателе изменение настроек, переменная m_bOutputFormatChanged.

Делаешь похожее в декодере и все.

I7 2600K@4.2 / Asrock P67 Extreme 4 Gen 3 / Kingston HyperX 8Gb 1866 (4x2) Kit / GIGABYTE GTX 960 / BenQ EW2430 / LG 47LM620T / Yamaha RX-V471 + NS-555 + NS-C444 + NS-333 + YST-SW215

5

Re: TrueHD.Клипинг при микшировании и автоматической регулировки громкости

В общем сделал переключение на лету.
В начале думал сделать в методе класса CMpaDecFilter, но т.к. хватет вызова Init(codec, NULL), то сделал внутри CFFAudioDecoder.

Ссылка в первом сообщении.

6

Re: TrueHD.Клипинг при микшировании и автоматической регулировки громкости

А вот что интересно - всегда ли, в том же TrueHD, присутствует этот самый стерео поток(обычно в самой первой substream - судя по коду ffmpeg декодера). И что будет если нет нужной информации - ffmpeg декодер выдаст так же стерео на выходе или оставит как есть. Да и вообще - такая информация в потоке она 100% обязательна или на усмотрения энкодера.

Добавлено: 2017-06-01 23:07:19

Судя по коду ffmpeg TrueHD декодера - не факт что прям на 100% всегда будет присутствовать стерео данные. Вот что написано в комментах:

Set the layout for each substream. When there's more than one, the first substream is Stereo.

Добавлено: 2017-06-01 23:10:31

Выложи сам патч - гляну по коду. Ну ты же знаешь - я такой дотошный, может какиенить моменты найду или косяки.

I7 2600K@4.2 / Asrock P67 Extreme 4 Gen 3 / Kingston HyperX 8Gb 1866 (4x2) Kit / GIGABYTE GTX 960 / BenQ EW2430 / LG 47LM620T / Yamaha RX-V471 + NS-555 + NS-C444 + NS-333 + YST-SW215

7

Re: TrueHD.Клипинг при микшировании и автоматической регулировки громкости

Хмм.
Твой ролик с прыгающими шариками в качетсве теста никуда не годиться. Там клипинг в самом файле после декодирования в FFmpeg получается.
http://jpegshare.net/thumbs/20/0d/200d93793c27e0b54f2c2d05380d3a4e.jpg http://jpegshare.net/thumbs/6c/72/6c729e3a21980f024ac35740adcf6b99.jpg
Причем клипинг есть даже когда амплитуда за пределы не вышла (см. первую картинку).
Надо чего-нибудь покачественнее.

Добавлено: 2017-06-01 21:49:35

6zc.thd нормальный. С ним наши микшеры (в переключателе и рендерере) трещат, а стерео из декодера без треска. Т.е. способ работает.

На AC3 тише становиться. Но скорее всего будет громче, чем если мы задействуем нормализацию. Т.к. по стандарту LFE канал не подмешивают, и ,соотвественно, доля остальных будет выше.

В общем надо подумать, обсудить. Есть кое-какие идеи.
Патч выложил там же, где сборки лежат.

8

Re: TrueHD.Клипинг при микшировании и автоматической регулировки громкости

А может действительно в настройке аудио воткнуть галку(которая будет видна только если выбрали микширование в стерео) "Пытаться микшировать в декодере" ?? Так и сравнивать будет удобнее.

I7 2600K@4.2 / Asrock P67 Extreme 4 Gen 3 / Kingston HyperX 8Gb 1866 (4x2) Kit / GIGABYTE GTX 960 / BenQ EW2430 / LG 47LM620T / Yamaha RX-V471 + NS-555 + NS-C444 + NS-333 + YST-SW215

9

Re: TrueHD.Клипинг при микшировании и автоматической регулировки громкости

Добавил галку "Запросить стерео у декодера" ("Request stereo from the decoder").

PS: Возможен конфликт, если в системе установлен MpaDecFilter.ax.

10

Re: TrueHD.Клипинг при микшировании и автоматической регулировки громкости

а можно добавить функцию детекта MpaDecFilter.ax и вывода соотв. сообщения об этом?
или это сильно замедлит открытие файлов?

любитель аниме

11

Re: TrueHD.Клипинг при микшировании и автоматической регулировки громкости

Angel
Я обошел конфликт с MpaDecFilter.ax и ввел опцию "Запросить стерео у декодера" в r2616.

Добавлено: 2017-06-06 16:23:52

Aleksoid1978
Код используемого нами "автоматической регулировки громкости" по-быстрому не понять.
Поэтому Я решил посмотреть, чего есть для регулировки громкости в FFmpeg:
alimiter - Audio lookahead limiter
acompressor - Audio compressor
compand - Compress or expand audio dynamic range
dynaudnorm - Dynamic Audio Normalizer
loudnorm - EBU R128 loudness normalization

С теми, что выделены можно экспериментировать. Нужны небольшие сэмплы с одновременно тихими и громкими участками.