ffmpeg-skill 2.8.1 → 2.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -1
- package/bin/install.js +3 -1
- package/docs/contract.md +2 -2
- package/package.json +1 -1
- package/scripts/_common/runner.py +3 -1
- package/scripts/_contract.py +7 -2
package/README.md
CHANGED
|
@@ -480,10 +480,15 @@ FFmpeg itself:
|
|
|
480
480
|
|
|
481
481
|
| OS | Command |
|
|
482
482
|
|----|---------|
|
|
483
|
-
| macOS | `brew install ffmpeg-full` (
|
|
483
|
+
| macOS | `brew install ffmpeg-full`, then put it on `PATH` (below). The plain `ffmpeg` formula lacks the subtitles, drawtext and zscale filters |
|
|
484
484
|
| Ubuntu / Debian | `sudo apt install ffmpeg` |
|
|
485
485
|
| Windows | `winget install Gyan.FFmpeg` |
|
|
486
486
|
|
|
487
|
+
**On macOS, `ffmpeg-full` is keg-only:** Homebrew installs it without linking it, so after `brew install ffmpeg-full` the `ffmpeg` on `PATH` is still the lean `ffmpeg` formula (often present as a dependency of another formula), or no `ffmpeg` at all, so `doctor` keeps reporting `ffmpeg`, or the `subtitles` and `drawtext` filters, as missing. Make it the one the tools find, in one of two ways:
|
|
488
|
+
|
|
489
|
+
- **Put it first on `PATH`.** Add `export PATH="$(brew --prefix ffmpeg-full)/bin:$PATH"` to your shell profile. `brew --prefix ffmpeg-full` is the stable `opt/` path, so this survives upgrades, but it only reaches processes started from a shell that read the profile.
|
|
490
|
+
- **Link it over the lean formula:** `brew unlink ffmpeg 2>/dev/null; brew link --overwrite --force ffmpeg-full`. Every process finds this one, but `brew doctor` warns about a linked keg-only formula, and an upgrade of the lean `ffmpeg` has been seen to link the lean build back on top without a message. After upgrading, check that `command -v ffmpeg` still resolves into `ffmpeg-full`, and re-run the link if it doesn't.
|
|
491
|
+
|
|
487
492
|
## Requirements
|
|
488
493
|
|
|
489
494
|
- FFmpeg 5.0+. Always required: `libx264`, `aac`, and the `drawtext`, `subtitles` (libass), `loudnorm`, `xfade`, `acrossfade`, `scdet`, `silencedetect` and `tile` filters. Needed only by the flags that use them: `libx265`, `prores_ks`, `libzimg` / `zscale`, `libmp3lame`, `libopus`, `libvorbis`, the `ass` filter. `doctor` tells you which are present. The apt and gyan.dev builds carry all of them; some Homebrew bottles lack `libass` / `libfreetype` / `libzimg`, which `doctor` reports as missing.
|
package/bin/install.js
CHANGED
|
@@ -94,7 +94,9 @@ function checkFfmpeg() {
|
|
|
94
94
|
const r = spawnSync('ffmpeg', ['-version'], { encoding: 'utf8' });
|
|
95
95
|
if (r.error || r.status !== 0) {
|
|
96
96
|
console.warn('\n warning: ffmpeg was not found on PATH. The skill needs FFmpeg to run:');
|
|
97
|
-
console.warn(' macOS: brew install ffmpeg-full
|
|
97
|
+
console.warn(' macOS: brew install ffmpeg-full; export PATH="$(brew --prefix ffmpeg-full)/bin:$PATH"');
|
|
98
|
+
console.warn(' # keg-only, so installing it does not put it on PATH: keep the export in your shell profile;');
|
|
99
|
+
console.warn(' # the plain ffmpeg formula lacks subtitles/drawtext/zscale');
|
|
98
100
|
console.warn(' Ubuntu: sudo apt install ffmpeg');
|
|
99
101
|
console.warn(' Windows: winget install Gyan.FFmpeg\n');
|
|
100
102
|
return false;
|
package/docs/contract.md
CHANGED
|
@@ -21,7 +21,7 @@ The contract is derived from the code that runs, not maintained beside it:
|
|
|
21
21
|
| Field | Meaning | Changes when |
|
|
22
22
|
|---|---|---|
|
|
23
23
|
| `contract_version` | shape of this document (`1.0`) | a key is renamed, removed or changes meaning |
|
|
24
|
-
| `skill.version` | the npm / package.json version (`2.8.
|
|
24
|
+
| `skill.version` | the npm / package.json version (`2.8.2`) | any release |
|
|
25
25
|
|
|
26
26
|
A release that adds a tool or a flag keeps `contract_version`; a breaking change to the
|
|
27
27
|
ToolSpec shape bumps it. Consumers pin on `contract_version` and read `skill.version`
|
|
@@ -119,7 +119,7 @@ JSON would have been rewritten for that. The flat keys, typed per tool in `outpu
|
|
|
119
119
|
"contract_version": "1.0",
|
|
120
120
|
"deprecated": [],
|
|
121
121
|
"removed": [{"what": "...", "since": "1.10.0", "replacement": "...", "removed_in": "2.0.0", "where": "cli | json | mcp | behaviour"}],
|
|
122
|
-
"skill": {"id": "ffmpeg-skill", "version": "2.8.
|
|
122
|
+
"skill": {"id": "ffmpeg-skill", "version": "2.8.2", "execution_mode": "local", "kind": "execution",
|
|
123
123
|
"entrypoints": {"cli": "...", "mcp": "...", "contract": "...", "doctor": "..."},
|
|
124
124
|
"not_provided": ["AI reasoning", "decisions", "production plans", "project IR", "approvals", "network access", "transcription engine"]},
|
|
125
125
|
"requirements": {"python": ">=3.9 (standard library only)", "ffmpeg": ">=5.0", "ffprobe": ">=5.0"},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ffmpeg-skill",
|
|
3
|
-
"version": "2.8.
|
|
3
|
+
"version": "2.8.2",
|
|
4
4
|
"description": "Agent Skill that gives coding agents (Claude Code, Cursor, Codex) a local video editor: 42 FFmpeg tools with a machine-readable contract, contract-derived MCP server, FFmpeg capability detection, probe-first / verify-last workflow. Cut, join, silence removal, fit, captions and karaoke, overlays, motion graphics, HDR to SDR, LUTs, audio clean-up and typed dynamics, sync with drift correction, multicam, loudness, delivery checks, project rendering, batch. No API keys, no cloud, no dependencies.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ffmpeg",
|
|
@@ -18,7 +18,9 @@ from typing import Any, Dict, List, Optional, Sequence, Tuple
|
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
INSTALL_HINTS = {
|
|
21
|
-
"Darwin": " brew install ffmpeg-full
|
|
21
|
+
"Darwin": (" brew install ffmpeg-full; export PATH=\"$(brew --prefix ffmpeg-full)/bin:$PATH\""
|
|
22
|
+
" # keg-only, so installing it does not put it on PATH: keep the export in your shell profile;"
|
|
23
|
+
" the plain ffmpeg formula lacks subtitles/drawtext/zscale"),
|
|
22
24
|
"Linux": (
|
|
23
25
|
" Debian/Ubuntu: sudo apt install ffmpeg\n"
|
|
24
26
|
" Fedora: sudo dnf install ffmpeg\n"
|
package/scripts/_contract.py
CHANGED
|
@@ -1011,10 +1011,15 @@ def _capability_fix_hint(cap: str) -> str:
|
|
|
1011
1011
|
if cap in ("ffmpeg", "ffprobe"):
|
|
1012
1012
|
from _common import INSTALL_HINTS
|
|
1013
1013
|
hint = INSTALL_HINTS.get(platform.system(), "see https://ffmpeg.org/download.html").strip().splitlines()[0].strip()
|
|
1014
|
-
|
|
1014
|
+
# a hint's "# why" is a shell comment so the printed line pastes; joined into a fix string
|
|
1015
|
+
# with "; " it would swallow what follows, so show it in parentheses here instead
|
|
1016
|
+
cmd, _, why = hint.partition("#")
|
|
1017
|
+
return f"install ffmpeg: {cmd.strip()} ({why.strip()})" if why else f"install ffmpeg: {hint}"
|
|
1015
1018
|
system = platform.system()
|
|
1016
1019
|
if system == "Darwin":
|
|
1017
|
-
full_hint = "on macOS, brew install ffmpeg-full (
|
|
1020
|
+
full_hint = ("on macOS, brew install ffmpeg-full; export PATH=\"$(brew --prefix ffmpeg-full)/bin:$PATH\" "
|
|
1021
|
+
"(ffmpeg-full is keg-only, so installing it does not replace the ffmpeg already found: keep the "
|
|
1022
|
+
"export in your shell profile; the plain formula lacks subtitles/drawtext/zscale)")
|
|
1018
1023
|
elif system == "Windows":
|
|
1019
1024
|
full_hint = "on Windows, winget install Gyan.FFmpeg (the gyan.dev full build carries subtitles/drawtext/zscale; a plain choco ffmpeg package can lack them)"
|
|
1020
1025
|
else:
|