Add loudness normalization settings: introduce NormalizeLoudness and LoudnessTargetLufs options in configuration files, update FfmpegMediaProcessor to apply loudness normalization during media processing, and document changes in media storage guide.

This commit is contained in:
Leonid Pershin
2026-07-24 23:08:10 +03:00
parent 65f2a1d4ec
commit 0891b4e6a8
5 changed files with 34 additions and 3 deletions
@@ -124,10 +124,24 @@ public sealed class FfmpegMediaProcessor(
"48000",
};
// Аудиофильтры: нормализация громкости (EBU R128, чтобы все ролики звучали одинаково) и,
// при добивке хвоста, тишина apad. Порядок: сначала loudnorm по реальному звуку, потом apad.
var afilters = new List<string>();
if (_media.NormalizeLoudness)
afilters.Add(
$"loudnorm=I={_media.LoudnessTargetLufs.ToString(CultureInfo.InvariantCulture)}:TP=-1.5:LRA=11"
);
if (padding)
afilters.Add($"apad=pad_dur={Fmt(pad)}");
if (afilters.Count > 0)
{
args.Add("-af");
args.Add($"apad=pad_dur={Fmt(pad)}");
args.Add(string.Join(",", afilters));
}
if (padding)
{
args.Add("-t");
args.Add(Fmt(target));
}
@@ -15,4 +15,11 @@ public sealed class MediaOptions
/// <summary>Период опроса inbox/ сканером, секунды.</summary>
public int InboxScanSeconds { get; init; } = 15;
/// <summary>Нормализовать громкость при обработке (ffmpeg loudnorm, EBU R128) — чтобы все ролики
/// звучали одинаково.</summary>
public bool NormalizeLoudness { get; init; } = true;
/// <summary>Целевая интегральная громкость, LUFS (−16 — типично для стриминга; тише — уменьшить).</summary>
public int LoudnessTargetLufs { get; init; } = -16;
}