Автор Тема: TrueHD.Клипинг при микшировании и автоматической регулировки громкости  (Прочитано 1716 раз)

0 Пользователей и 1 Гость просматривают эту тему.

V0lt

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 1734
Многоканальные AC3 дорожки специально делают тихими, чтобы при микшировании в стерео не было клипинга.

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

Так же есть сообщения, что автоматическая регулировка громкости (АРГ) также может создавать клипинг на громких треках. У меня есть некоторые сомнения по этому поводу. Этот момент необходимо будет перепроверить на громком стерео.
[merge_posts_bbcode]Добавлено: 2017-05-30 13:40:09[/merge_posts_bbcode]

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

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

Еще есть идея с микшированием TrueHD в стерео в самом декодере. Речь идет о параметрах микширования зашитыми в TrueHD-поток. Способ так же работает для DD, DD+ и DTS.
[merge_posts_bbcode]Добавлено: 2017-05-30 22:36:06[/merge_posts_bbcode]

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

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

1-й тестовый билд
Билд хорошо работает, если задать "Микшировать каналы в Стерео" до открытия файла.
На лету может тупить и не переключать, если в графе несколько декодеров (например, если открыть MKV с кучей дорожек).
[merge_posts_bbcode]Добавлено: 2017-05-31 05:45:49[/merge_posts_bbcode]

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

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

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

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

Aleksoid1978

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 2130
А может ну его нафиг "умный" микс в стерео ?? Ну добавить галку в декодер, типа "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

V0lt

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

Aleksoid1978

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 2130
Смотри как обрабатывается в аудио-переключателе изменение настроек, переменная 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

V0lt

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

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

Aleksoid1978

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 2130
А вот что интересно - всегда ли, в том же TrueHD, присутствует этот самый стерео поток(обычно в самой первой substream - судя по коду ffmpeg декодера). И что будет если нет нужной информации - ffmpeg декодер выдаст так же стерео на выходе или оставит как есть. Да и вообще - такая информация в потоке она 100% обязательна или на усмотрения энкодера.
[merge_posts_bbcode]Добавлено: 2017-06-01 23:07:19[/merge_posts_bbcode]

Судя по коду ffmpeg TrueHD декодера - не факт что прям на 100% всегда будет присутствовать стерео данные. Вот что написано в комментах:
Set the layout for each substream. When there\'s more than one, the first substream is Stereo.

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

Выложи сам патч - гляну по коду. Ну ты же знаешь - я такой дотошный, может какиенить моменты найду или косяки.
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

V0lt

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 1734
Хмм.
Твой ролик с прыгающими шариками в качетсве теста никуда не годиться. Там клипинг в самом файле после декодирования в FFmpeg получается.

Причем клипинг есть даже когда амплитуда за пределы не вышла (см. первую картинку).
Надо чего-нибудь покачественнее.
[merge_posts_bbcode]Добавлено: 2017-06-01 21:49:35[/merge_posts_bbcode]

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

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

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

Aleksoid1978

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 2130
А может действительно в настройке аудио воткнуть галку(которая будет видна только если выбрали микширование в стерео) "Пытаться микшировать в декодере" ?? Так и сравнивать будет удобнее.
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

V0lt

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 1734
Добавил галку "Запросить стерео у декодера" ("Request stereo from the decoder").

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

Angel

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

V0lt

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 1734
Angel
Я обошел конфликт с MpaDecFilter.ax и ввел опцию "Запросить стерео у декодера" в r2616.
[merge_posts_bbcode]Добавлено: 2017-06-06 16:23:52[/merge_posts_bbcode]

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

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