
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.
概览
用 ffmpeg 测量媒体文件的响度,并按 EBU R128 或 ATSC A/85 给出通过或未通过的判定及精确修正建议。
- 可以做什么
- 按选定标准检查媒体文件的响度,返回通过、未通过或仅测量三种判定,附各指标的实测值、目标值与偏差,以及未通过时的精确增益修正和 ffmpeg 命令。列出支持的标准及其目标值、容差和出处。在每次判定中报告测量所用的 ffmpeg 版本。
- 适用场景
- 适合在交付前判断音频或视频母版是否符合广播响度规范,而不只是读取原始电平数值,并获取需要施加的精确修正量。
- 运行要求
- 以本地进程通过 stdio 运行,使用 uvx 从 loudcheck 包(含 mcp 附加组件)启动。需要 Python 3.10 及以上,以及 PATH 中可用的 ffmpeg 5.0 或更新版本。未声明任何账号、API 密钥或请求头。
安装
在 SourceWeft 中
- 打开 控制台中的 loudcheck,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
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
measuredwith the numbers and no judgment)
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.
From a clone: pip install -e ".[mcp,dev]".
CLI
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. --jsonis the full contract: overallverdict, per-metricmeasured/target/tolerance/delta/passwith the spec citation attached to every gated metric,failuresin plain English, andremediationwith 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 withloudnormusing the delta provided.- MCP: register
loudcheck-mcp(stdio; orloudcheck --mcp, orpython -m loudcheck.mcp_server). Zero-install:uvx --from 'loudcheck[mcp]' loudcheck --mcp. Tools:check_loudness(path, standard)→ same JSON as the CLI, andlist_standards()→ the catalog with citations. Verified againstmcp==1.28.1. tool.jsonat the repo root describes the surface machine-readably — or fetch it live from any install withloudcheck --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版本历史
1- v0.3.1最新Sep 16, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分