
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 分