mirror of
https://github.com/bggRGjQaUbCoE/PiliPlus.git
synced 2026-05-31 16:18:22 +08:00
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:
@@ -351,6 +351,10 @@ class Volume {
|
|||||||
|
|
||||||
// final MultiSceneArgs? multiSceneArgs;
|
// 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) {
|
factory Volume.fromJson(Map<String, dynamic> json) {
|
||||||
return Volume(
|
return Volume(
|
||||||
measuredI: json["measured_i"] ?? 0,
|
measuredI: json["measured_i"] ?? 0,
|
||||||
@@ -367,7 +371,7 @@ class Volume {
|
|||||||
String format(Map<String, num> config) {
|
String format(Map<String, num> config) {
|
||||||
final lra = max(config['lra'] ?? 11, measuredLra);
|
final lra = max(config['lra'] ?? 11, measuredLra);
|
||||||
num i = config['i'] ?? targetI;
|
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;
|
final offset = config['offset'] ?? targetOffset;
|
||||||
num measuredI = this.measuredI;
|
num measuredI = this.measuredI;
|
||||||
if (measuredI > 0) {
|
if (measuredI > 0) {
|
||||||
|
|||||||
Reference in New Issue
Block a user