Amix-filter FFmpeg всегда выполняет нормализацию громкости. Как предотвратить это и каковы возможные недостатки этого?

По этой теме много вопросов link1, link2 и ссылка3. Тем не менее, я прошу предложений о вероятном решении и о том, есть ли у него какие-то недостатки.

Определение проблемы: amix-filter всегда выполняет "нормализацию громкости" и не может быть отключен

Ссылка: прочитайте комментарии по здесь от @Reino. Он также открыл тикет на форуме FFmpeg, чтобы объяснить ситуацию.

Хакерское решение: amix=inputs=13:dropout_transition=1000,volume=13

Ссылка: Ответил здесь, а также в билет.

Вопросы:

1) "amix масштабирует громкость каждого входа на 1/n, где n = количество активных входов. Это оценивается для каждого аудиокадра. Таким образом, когда вход пропадает, громкость оставшихся входов равна масштабируется на меньшую величину, поэтому их объемы увеличиваются."Ссылка

Например, если я объединяю 10 аудиопотоков, то 1-й аудиопоток будет масштабироваться на 1/10, 2-й на 1/9, 3-й на 1/8.. 9-й на 1/2 и последний 10-й на 1. Разве я понял это правильно или дайте мне знать, если я что-то упустил?

2) dropout_transition: время перехода в секундах, для перенормировки громкости, когда входной поток заканчивается. Значение по умолчанию — 2 секунды.

dropout_transition означает, что будет ПРОПУСКАТЬ заданные секунды, верно? Поэтому, если я установлю dropout_transition=1000 (очень большое число), то независимо от длины видео FFmpeg будет отбрасывать/пропускать аудиопереход в течение заданных секунд. Опять же, пожалуйста, поправьте меня, если я сделал неправильное предположение.

3) Я безуспешно пробовал много других решений, и теперь я полностью полагаюсь на предоставленное решение. Есть ли недостаток в приведенном выше хакерском решении?


person Chitrang    schedule 14.06.2020    source источник


Ответы (1)


если я объединяю 10 аудиопотоков, то 1-й аудиопоток будет масштабироваться на 1/10, 2-й на 1/9, 3-й на 1/8, 9-й на 1/2 и последний 10-й на 1.

Нет. Допустим, у вас есть 4 входа, длительностью 10, 7, 4 и 2 секунды соответственно. Давайте сохраним переход отсева равным 0. Затем в течение первых 2 секунд все входы активны, поэтому каждый вход масштабируется на 1/4. От 2 до 4 секунд активны 3 входа, поэтому все активные входы (№1, 2, 3) масштабируются на 1/3. От 4 до 7 секунд активны только входы 1 и 2, поэтому оба масштабируются на 1/2. А с 7 по 10 секунд активен только вход 1, поэтому он масштабируется на 1 т.е. его громкость не меняется.

dropout_transition означает, что заданные секунды будут ПРОПУСКАТЬ, верно?

Нет. Продолжая описанный выше сценарий, предположим, что переход отсева составляет 1 секунду. Таким образом, когда ввод 4 заканчивается, масштабирование не меняется с 1/4 на 1/3 сразу. Он переходит в течение 1 секунды, постепенно.

Есть ли какие-либо недостатки в приведенном выше хакерском решении?

Для большинства случаев это нормально. Если вы комбинируете громкие музыкальные произведения, диапазон будет выравниваться, но в этом случае это не должно иметь значения.

person Gyan    schedule 14.06.2020
comment
Спасибо, что развеяли мои сомнения и одобрили решение. - person Chitrang; 17.06.2020