fix(player): clamp loudnorm parameters to valid FFmpeg ranges (#1838)

- Define Integrated True Peak (TP) boundary constants.
- Use .clamp() in Volume.format to ensure parameters stay within [-9, 0] for 'TP'.
- Prevents FFmpeg filter errors when video metadata contains very low peak values (e.g., TP = -22).
This commit is contained in:
Starfallen
2026-02-19 15:31:29 +08:00
committed by GitHub
parent e3a1eb5c87
commit b1c0eca328

View File

@@ -351,6 +351,10 @@ class Volume {
// final MultiSceneArgs? multiSceneArgs;
// FFmpeg loudnorm 滤镜的标准有效范围https://ffmpeg.org/ffmpeg-filters.html#loudnorm
static const double minTpValue = -9.0;
static const double maxTpValue = 0.0;
factory Volume.fromJson(Map<String, dynamic> json) {
return Volume(
measuredI: json["measured_i"] ?? 0,
@@ -367,7 +371,7 @@ class Volume {
String format(Map<String, num> config) {
final lra = max(config['lra'] ?? 11, measuredLra);
num i = config['i'] ?? targetI;
final tp = min(config['tp'] ?? targetTp, measuredTp);
final tp = min(config['tp'] ?? targetTp, measuredTp).clamp(minTpValue, maxTpValue);
final offset = config['offset'] ?? targetOffset;
num measuredI = this.measuredI;
if (measuredI > 0) {