Как указать минимальный уровень шума в фильтре acompressor FFmpeg

Я всегда использовал компрессор динамического диапазона Audacity, если хотел увеличить громкость аудиофайл. Сегодня я искал, могу ли я сделать то же самое с компрессорным фильтром FFmpeg.

Я нашел "как использовать "компрессор" с помощью ffmpeg" и ответ Гьяна, который был действительно полезным, но недостаточно удовлетворительным.

Прямо сейчас я пытаюсь имитировать процедуру Audacity.
Если я правильно понимаю acompressor, то я не могу применить усиление макияжа за один проход. Поэтому мне нужно сначала сделать volumedetect.

Допустим, у меня есть следующие «параметры Audacity», которые я хотел бы использовать:

Threshold: -30dB  
Noise Floor: -40dB
Ratio: 2:1
Attack Time: 0,2s
Release Time: 1,0s
[x] Make-up gain for 0 dB after compressing
[x] Compress based on Peaks

Если я прав, это переводится как:

threshold=0.031623   # 10^(-30/20) = 10^(-1.5) = 0.031623.
ratio=2              # 2 is the default, so no need to specify.
attack=200           # 0.2*1000 = 200ms.
release=1000         # 1.0*1000 = 1000ms.
detection=0          # peak based.

Чего я не понимаю, так это того, где я могу указать «Noise Floor». У acompressor есть такая возможность?

Хорошо, volumedetect...

ffmpeg -i input.wav -lavfi acompressor=threshold=0.031623:attack=200:release=1000:detection=0
,volumedetect -f null -
or
ffmpeg -i input.wav -lavfi acompressor=threshold=10^^(-30/20):attack=200:release=1000:detecti
on=0,volumedetect -f null -

(10^^(-30/20) (Windows), 10^\(-30/20\) (Unix). pow(10,-30/20) не работает)

...в моем случае приводит к...

n_samples: 23838888
mean_volume: -27.7 dB
max_volume: -7.7 dB
histogram_7db: 3
histogram_8db: 21
histogram_9db: 126
histogram_10db: 458
histogram_11db: 1727
histogram_12db: 5021
histogram_13db: 11816
histogram_14db: 24831

Для 2-го прохода я применяю усиление макияжа 10^(7.7/20) или 2.4266:

ffmpeg -i input.wav -lavfi acompressor=threshold=10^^(-30/20):attack=200:release=1000:detecti
on=0:makeup=10^^(7.7/20) -f wav output.wav

Кстати, я заметил, что -lavfi acompressor=[...],volume=7.7dB выдает тот же результат.

Все идет нормально. Это форма волны output.wav:

ffmpeg -i input.wav -lavfi acompressor=threshold=10^^(-30/20):attack=200:release=1000:detecti
on=0:makeup=10^^(7.7/20),showwavespic=s=888x295:split_channels=1 output.png

ffmpeg_acomp=t=0.031623-a=200-r=1000-d=0-mu=2.4266_wavespic.png Где, поскольку это форма сигнала для того же input.wav, обработанного Audacity (с указанными выше настройками): введите здесь описание изображения

Я не эксперт в этой области, но является ли более низкая общая громкость вывода FFmpeg из-за отсутствия «минимального уровня шума»?
Если да, то как указать? А если не с acompressor, то какой еще фильтр?

[править]

ffmpeg -i input.wav -lavfi acompressor=threshold=10^^(-30/20):attack=200:release=1000:detecti
on=0:makeup=10^^(7.7/20),volumedetect -f null NUL
n_samples: 23838888
mean_volume: -20.0 dB
max_volume: -0.0 dB
histogram_0db: 16
histogram_1db: 76
histogram_2db: 329
histogram_3db: 1158
histogram_4db: 3678
histogram_5db: 9473
histogram_6db: 19933
ffmpeg -i input-audacity_drc-peak.wav -af volumedetect -f null NUL
n_samples: 23838888
mean_volume: -16.9 dB
max_volume: -0.0 dB
histogram_0db: 77
histogram_1db: 683
histogram_2db: 4291
histogram_3db: 14065
histogram_4db: 35403

mean_volume: -20.0 dB против mean_volume: -16.9 dB. Таким образом, выход Audacity немного громче. Кроме того, использование минимального уровня шума приводит к очень разным значениям histogram_xdb.

Я внимательно изучил другие параметры acompressor и начал возиться с level_in ("Установить входное усиление. По умолчанию 1. Диапазон от 0,015625 до 64")
Понятия не имею что означает диапазон, но я подумал, что значение 2 будет означать, что ввод будет в два раза громче.

ffmpeg -i input.wav -lavfi acompressor=level_in=2:threshold=10^^(-30/20):attack=200:release=1
000:detection=0:makeup=10^^(7.7/20),volumedetect -f null NUL
n_samples: 23838888
mean_volume: -16.9 dB
max_volume: 0.0 dB
histogram_0db: 1611
histogram_1db: 3779
histogram_2db: 9619
histogram_3db: 20263

И форма волны: ffmpeg_acomp=l=2-t=0.031623-a=200-r=1000-d=0-  мю=2.4266_wavespic.png

Ух ты! Это странно. Тот же mean_volume, что и на выходе Audacity, и очень похожая форма волны.
Обратите внимание, что с компенсирующим усилением 7.7dB для level_in=1!

Я предполагаю, что это отвечает на мой вопрос о "Noise Floor". Это не было причиной снижения громкости.

Может быть, некоторые эксперты Audacity могли бы объяснить мне, почему Audacity делает звук вдвое громче с помощью своего фильтра DRC, хотя это даже не вариант.
Или мои исследования по этому вопросу совершенно неверны?

[/править]


person Reino    schedule 24.07.2019    source источник
comment
Какова статистика объема соответствующих выходных файлов? Мне кажется, что ваша операция усиления макияжа в ffmpeg на самом деле не привела к пику 0 дБ? (Предполагая, что есть некоторый запас, как показывает осциллограмма Audacity.)   -  person slhck    schedule 25.07.2019
comment
@slhck mean_volume: -20.0 dB, max_volume: -0.0 dB для файла, созданного FFmpeg, и mean_volume: -16.9 dB, max_volume: -0.0 dB для файла, созданного FFmpeg. (На самом деле это сигнал FFmpeg, а не сигнал Audacity;))   -  person Reino    schedule 25.07.2019