loudcheck

io.github.chaoz23由 GitHub 账号 chaoz23 发布v0.3.1更新于 Oct 24, 2026

Loudness compliance verdicts (EBU R128, ATSC A/85): pass/fail with exact ffmpeg remediation.

已验证STDIO仅桌面开发者工具媒体与设计

概览

AI 生成的概览

用 ffmpeg 测量媒体文件的响度,并按 EBU R128 或 ATSC A/85 给出通过或未通过的判定及精确修正建议。

可以做什么
按选定标准检查媒体文件的响度,返回通过、未通过或仅测量三种判定,附各指标的实测值、目标值与偏差,以及未通过时的精确增益修正和 ffmpeg 命令。列出支持的标准及其目标值、容差和出处。在每次判定中报告测量所用的 ffmpeg 版本。
适用场景
适合在交付前判断音频或视频母版是否符合广播响度规范,而不只是读取原始电平数值,并获取需要施加的精确修正量。
运行要求
以本地进程通过 stdio 运行,使用 uvx 从 loudcheck 包(含 mcp 附加组件)启动。需要 Python 3.10 及以上,以及 PATH 中可用的 ffmpeg 5.0 或更新版本。未声明任何账号、API 密钥或请求头。
安装前请注意
该工具只做测量和判定,不会自动应用修正,修正需由助手或用户自行执行。它按路径读取本地媒体文件,因此传入的路径应可信。判定结果取决于所安装的 ffmpeg 版本,每次结果都会注明该版本。

安装

在 SourceWeft 中

  1. 打开 控制台中的 loudcheck,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

loudcheck

A loudness compliance verdict, not raw meter output. loudcheck measures a media file with ffmpeg and answers the question that actually matters — does this file pass the spec? — against formal published standards:

Agents start here → SKILL.md — when to call this, worked examples, MUST/MUST NOTs. Family contract: FAMILY.md.

  • EBU R 128 (European broadcast: −23.0 LUFS ±0.5 LU, max −1 dBTP)
  • ATSC A/85 (US television: −24 LKFS ±2 dB, true peak below −2 dBTP)
  • BS.1770 (measure-only: BS.1770 defines no compliance target, so this mode returns verdict measured with the numbers and no judgment)
$ loudcheck master.wav --standard EBU_R128FAIL — EBU R 128  ✗ integrated -19.4 LUFS (target -23.0 ±0.5, delta +3.6)  ✓ true peak -16.3 dBTP (max -1.0)  · LRA 0.0 LU (informational)  → apply -3.6 LU gain to reach -23.0 LUFS (e.g. ffmpeg -af volume=-3.6dB, or loudnorm I=-23)

Ships as a CLI and an MCP tool over one engine, so agents and humans get the identical verdict.

[loudcheck demo: FAIL with exact fix, apply it, PASS, exit code carries the verdict]

Why this exists

An agent (or an engineer) can run ffmpeg's ebur128 filter and get numbers. What it can't get from a shell is the verdict — that requires knowing the standard's target, tolerance, and gating, and interpreting integrated loudness vs. LRA vs. true peak against them. Loudness is one of the most common causes of delivery rejection, and the gap is not measurement — it's the standards-aware answer. That's the whole tool.

Install

Requires Python 3.10+ and ffmpeg 5.0+ on PATH.

bash
uvx loudcheck file.wav          # zero-install run (requires ffmpeg >= 5.0 on PATH)pip install loudcheck           # CLIpip install "loudcheck[mcp]"    # + MCP server

From a clone: pip install -e ".[mcp,dev]".

CLI

bash
loudcheck file.wav                          # EBU R128 by defaultloudcheck file.mp4 --standard ATSC_A85      # first audio stream of a videoloudcheck file.wav --json                   # full structured verdictloudcheck file.wav --standard BS_1770       # measurement only, no gatesloudcheck file.mov --all-streams            # verdict every audio trackloudcheck file.mov --stream 1               # a specific audio trackloudcheck file.wav --detailed               # + max momentary / short-termloudcheck masters/ --standard EBU_R128      # batch a directory -> tableloudcheck a.wav b.wav c.wav                 # batch multiple filesloudcheck --schema                          # print the tool definition

Batch mode prints one line per file (plus remediation for fails) and a summary; --json in batch emits an array. Exit code is 1 if any file fails.

For agents

  • Exit codes carry the verdict: 0 = pass, 1 = fail (non-compliant), 2 = error (missing file, no audio stream, no ffmpeg). Gate a delivery on the exit code alone.
  • --json is the full contract: overall verdict, per-metric measured/target/tolerance/delta/pass with the spec citation attached to every gated metric, failures in plain English, and remediation with the exact correction — a fail 2.3 LU over target tells you to apply −2.3 LU gain and hands you the ffmpeg incantation. This tool never applies the fix (measurement and verdict only); the agent one-shots it with loudnorm using the delta provided.
  • MCP: register loudcheck-mcp (stdio; or loudcheck --mcp, or python -m loudcheck.mcp_server). Zero-install: uvx --from 'loudcheck[mcp]' loudcheck --mcp. Tools: check_loudness(path, standard) → same JSON as the CLI, and list_standards() → the catalog with citations. Verified against mcp==1.28.1.
  • tool.json at the repo root describes the surface machine-readably — or fetch it live from any install with loudcheck --schema (the file ships inside the package; a test keeps the two copies in sync).
  • ffmpeg version is part of the contract: every verdict includes measurement_context.ffmpeg_version. Minimum supported: 5.0. Developed and verified against 8.1.

The scope guardrail (read before contributing)

Only formal, stable standards live in this repo; per-platform delivery templates (Netflix, DPP, Apple TV+, Amazon, broadcaster specs) never do. Platform specs change unilaterally and cover far more than loudness — the moment they enter, this stops being a near-zero-maintenance community tool and becomes a yearly-maintenance product. If a PR adds a target that a platform can change on its own, it belongs in a separate template layer built on top of this primitive, not here.

Contributions of additional formal standards (e.g. a plain ITU-R BS.1770 mode) are welcome: a standard is pure data in loudcheck/standards.py — targets, tolerances, and citations. No code changes required.

How it measures

One ffmpeg pass with loudnorm=print_format=json (analysis mode) yields integrated loudness, loudness range, true peak (oversampled dBTP per BS.1770), and the gating threshold. The test suite cross-checks loudnorm's reading against ffmpeg's independent ebur128 implementation — the two must agree within 1 LU for CI to pass, so an ffmpeg release that changes filter behavior is caught by the suite, not by users.

Verification corpus

pytest generates calibrated test tones on the fly (no binaries in the repo): per BS.1770's calibration statement, a mono 997 Hz sine at 0 dBFS reads −3.01 LKFS, so tones are generated at exact known loudness — compliant, too loud, too quiet, and true-peak-hot — and every verdict must match its known expectation.

Out of scope, permanently

Loudness correction (use ffmpeg loudnorm with the delta this tool gives you) · full-file QC (codec/colour/cadence) · real-time monitoring · GUIs · platform delivery templates (see guardrail).

License

MIT

来源:README.md,提交 ec4b80a

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v0.3.1最新Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分