ffmpeg-skill

Local video and audio editing through 42 FFmpeg-backed tools, as an Agent Skill and a stdio MCP server

By Shogo Kajiyama (individual) Python Local · stdio Media

86 popularity score ★ 4.7k ↓ 9.1k/wk

Connect your client

Local (npm)

Add in one click

Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.

Or add it by command or config

FirstTerminal
npx -y ffmpeg-skill
Claude CodeTerminal
claude mcp add ffmpeg-skill -- python3 '<ABSOLUTE_PATH_TO_HOME>/.claude/skills/ffmpeg-skill/mcp/server.py'
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "ffmpeg-skill": {
      "command": "python3",
      "args": [
        "<ABSOLUTE_PATH_TO_HOME>/.claude/skills/ffmpeg-skill/mcp/server.py"
      ]
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "ffmpeg-skill": {
      "command": "python3",
      "args": [
        "<ABSOLUTE_PATH_TO_HOME>/.claude/skills/ffmpeg-skill/mcp/server.py"
      ]
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "ffmpeg-skill": {
      "type": "stdio",
      "command": "python3",
      "args": [
        "<ABSOLUTE_PATH_TO_HOME>/.claude/skills/ffmpeg-skill/mcp/server.py"
      ]
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.ffmpeg-skill]
command = "python3"
args = ["<ABSOLUTE_PATH_TO_HOME>/.claude/skills/ffmpeg-skill/mcp/server.py"]
Gemini CLITerminal
gemini mcp add --scope user ffmpeg-skill python3 -- '<ABSOLUTE_PATH_TO_HOME>/.claude/skills/ffmpeg-skill/mcp/server.py'
Local (from source)

Add in one click

Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.

Or add it by command or config

FirstTerminal
git clone https://github.com/kajisho5/ffmpeg-skill.git
Claude CodeTerminal
claude mcp add ffmpeg-skill -- python3 '<ABSOLUTE_PATH_TO_CLONE>/mcp/server.py'
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "ffmpeg-skill": {
      "command": "python3",
      "args": [
        "<ABSOLUTE_PATH_TO_CLONE>/mcp/server.py"
      ]
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "ffmpeg-skill": {
      "command": "python3",
      "args": [
        "<ABSOLUTE_PATH_TO_CLONE>/mcp/server.py"
      ]
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "ffmpeg-skill": {
      "type": "stdio",
      "command": "python3",
      "args": [
        "<ABSOLUTE_PATH_TO_CLONE>/mcp/server.py"
      ]
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.ffmpeg-skill]
command = "python3"
args = ["<ABSOLUTE_PATH_TO_CLONE>/mcp/server.py"]
Gemini CLITerminal
gemini mcp add --scope user ffmpeg-skill python3 -- '<ABSOLUTE_PATH_TO_CLONE>/mcp/server.py'

Settings 5

FFMPEG_SKILL_MCP_FULL Optional: Set to 1 to list all 42 tools in tools/list instead of the core 12. Default unset (core 12 listed).
FFMPEG_SKILL_TIMEOUT Optional: Seconds before a single ffmpeg call is stopped; 0 disables. Default 1800.
FFMPEG_SKILL_HW Optional: Set to 1 to encode on Apple VideoToolbox by default (Apple Silicon only); --no-hw opts out per call. Default unset (CPU encoders).
Set together: transcription
FFMPEG_SKILL_ASR_ENGINE Optional: Default speech engine: parakeet-mlx, parakeet.cpp, whisper.cpp, faster-whisper or openai-whisper; --engine overrides it. Default auto. For caption, silence.
FFMPEG_SKILL_ASR_MODEL Optional: Default speech model (e.g. large-v3-turbo); --model overrides it. Default base. For caption, silence.

What it does

ffmpeg-skill is a set of 42 Python scripts that drive the ffmpeg and ffprobe already installed on your machine: inspecting files, cutting and joining, removing silence, fitting clips to a length or aspect ratio, burning captions, adding overlays and motion graphics, HDR-to-SDR conversion, audio clean-up, loudness normalisation, multicam alignment, platform export presets and delivery checks. It is packaged first as an Agent Skill (a SKILL.md that Claude Code, Cursor or Codex reads), and it also ships mcp/server.py, a stdio JSON-RPC server that turns each script into an MCP tool.

The server builds its tool list from each script's own argument parser at start-up, so the MCP schemas follow the command-line flags. By default tools/list advertises only 12 core tools (render, look, caption, export, check, fit, cut, audio, loudness, graphics, silence, probe); setting FFMPEG_SKILL_MCP_FULL to anything but empty or 0 lists all 42, and every tool can be called by name either way. It also offers five prompts (reel, podcast, multicam, delivery_check, hdr) that return the command lines for a common workflow.

Editing runs on your machine. Tools write new files named after the input and refuse to replace an existing output unless --overwrite is passed. Each ffmpeg call is stopped after 1800 seconds by default (FFMPEG_SKILL_TIMEOUT, 0 for none). In scripts/_common/runner.py a value that is not a number falls back to 1800 and a negative one means no limit, and the server kills a tool process that runs past four times that limit plus 60 seconds. caption and silence can transcribe speech locally when a speech engine is installed (parakeet-mlx, parakeet.cpp, whisper.cpp, faster-whisper or openai-whisper), chosen with --engine/--model or the FFMPEG_SKILL_ASR_ENGINE and FFMPEG_SKILL_ASR_MODEL defaults. An engine name the code does not know is refused rather than ignored (scripts/_common/asr.py).

What it needs

RuntimePython 3.10+Node.js 16+
Runs onmacOS, Windows, Linux
Also
  • ffmpeg and ffprobe 6.1 or newer on PATH, with libx264, aac, libass and the filters doctor checks (drawtext, loudnorm, xfade, scdet, silencedetect and more)
  • Optional: a local speech engine (faster-whisper, whisper.cpp, openai-whisper, parakeet-mlx or parakeet.cpp) for transcription

Install ffmpeg first: brew install ffmpeg-full on macOS (the skill finds it by itself when the lean Homebrew ffmpeg is first on PATH), sudo apt install ffmpeg on Ubuntu or Debian, winget install Gyan.FFmpeg on Windows. Some flags need more of ffmpeg (libx265, prores_ks, zscale, libmp3lame, libopus, libvorbis). Node is needed only for the npx installer. Without it, clone the repository and copy SKILL.md, package.json, scripts/, templates/, references/, docs/ and mcp/ into place. For transcription, pip install faster-whisper is the simplest engine. It and openai-whisper and parakeet-mlx download model weights the first time they run.

Limits

  • Not covered tools/list shows 12 tools unless FFMPEG_SKILL_MCP_FULL is set; a client that only offers listed tools will not see the other 30.
  • Limit A tool whose filters or encoders are missing from your ffmpeg build cannot run; the plain Homebrew ffmpeg lacks subtitles, drawtext and zscale. Run doctor to see which tools are usable.
  • Limit Every tool refuses an ffmpeg or ffprobe whose version reads older than 6.1 (a git build with no release number is let through). The npx installer refuses Python below 3.10.
  • Limit The npm package's program is an installer that copies the skill files, not the MCP server; the client must start python3 on the copied mcp/server.py.
  • Platform On Windows with a python.org install, python3 may not be on PATH; change the command to python.
  • Not covered It finds nothing in the picture: crops, redaction boxes and reframes take coordinates you give, and highlight ranking is a loudness or length proxy.
  • Not covered Transcription needs a separately installed speech engine; without one, caption --transcribe and silence --filler refuse and print install lines.

tools/list shows 12 tools unless FFMPEG_SKILL_MCP_FULL=1 is set; a client that only offers listed tools will not see the other 30. Tools whose filters are missing from your ffmpeg build cannot run; run doctor to see which. The npm package only installs the skill files: its program is an installer, not the MCP server, so the client must point python3 at the copied mcp/server.py. On Windows with a python.org install, python3 may not be on PATH and the command must be changed to python. Highlight ranking is a loudness or length proxy, not a judgement of quality, and the tools do not decide what to cut or rewrite caption text.

Who it suits

Suits developers and editors who want an assistant to edit local footage with ffmpeg without uploading it or holding any credential, and who are comfortable installing a full-featured ffmpeg build and Python. Because it writes files on your machine and needs no account, it fits private material. If you would rather not install ffmpeg locally, a hosted ffmpeg service such as ffmpeg-micro-mcp (which we also list) processes files on the vendor's servers instead, at the cost of sending your media there.

Tools 42

3 only read, 39 change things.

probe
Report duration, frame rate, resolution, codecs, HDR format and audio streams of a file
scenes changes
Find scene changes, audio peaks and highlight candidates, and measure a music beat grid
look changes
Render contact sheets, single frames or side-by-side comparisons as PNG files for visual checking
cut changes
Cut one range or many segments, stream-copying first and re-encoding when needed
join changes
Concatenate clips with optional crossfade transitions, matching size, frame rate and audio layout
silence changes
Detect and remove silent stretches, or list them as a cut list
fit changes
Fit a clip to a target duration, aspect ratio or exact frame size by pad, crop or blurred fill
crop changes
Crop to an exact pixel rectangle
cropdetect
Measure black bars and report the rectangle that removes them, without writing video
deinterlace changes
Deinterlace interlaced footage with yadif
denoise changes
Reduce video grain with hqdn3d at a chosen strength
redact changes
Blur, pixelate or (delogo mode) blend away a given pixel rectangle for the whole clip
sphere changes
Extract a flat viewport from 360-degree video at a given yaw, pitch and field of view
straighten changes
Rotate by any angle to level a horizon, then crop or pad
insert changes
Turn a still image into a silent clip of fixed length and size
background changes
Generate a solid or gradient colour clip with no input file
reverse changes
Play a clip backwards, with or without its audio
stabilize changes
Two-pass motion stabilisation with vidstab
sequence changes
Assemble numbered or matched still images into a video
waveform changes
Turn an audio track into a waveform or spectrum video
freeze changes
Hold one frame for a set number of seconds
pad changes
Add black, silent time at the start or end
speedramp changes
Apply different constant speeds to different parts of a clip
loop changes
Repeat a clip a number of times or up to a target length
broll changes
Cut away to a B-roll clip over the main footage for set windows
metadata changes
Write chapter markers and title, artist and comment tags without re-encoding
grid changes
Composite several clips into a labelled grid
audio changes
Clean up voice audio and apply denoise, compressor, limiter, gate and music ducking
sync changes
Find the offset between two recordings by audio and correct clock drift
loudness changes
Normalise loudness to an EBU R128 target with two-pass loudnorm
caption changes
Burn SRT or ASS subtitles, build SRT from timed text, with animated and karaoke styles
overlay changes
Place logos, watermarks and titles with position, timing, opacity and fades
graphics changes
Draw lower-thirds, title cards, progress bars, countdowns and similar motion graphics
color changes
Tone-map HDR to SDR, apply 3D LUTs and rewrite colour tags
export changes
Encode to platform presets such as youtube, reels, tiktok and shorts
proxy changes
Make a small low-bitrate proxy copy for preview or analysis
check
Grade a file PASS, WARN or FAIL against platform, broadcast and podcast specs, writing no file
report changes
Write a single-file HTML delivery report with sheets, media facts and commands run
render changes
Render a whole edit described in a project.json file
batch changes
Apply a recipe or project to every file in a folder, with a cache and watch mode
multicam changes
Align several cameras by audio and cut between them from a switch list
verify changes
Run the toolchain on real device files and report PASS or FAIL per step

Prompts 5

reel
Command lines for cutting and delivering a short vertical reel
podcast
Command lines for cleaning, levelling and checking a podcast episode
multicam
Command lines for aligning and cutting several cameras
delivery_check
Command lines for checking a file against a destination's spec
hdr
Command lines for converting HDR footage to SDR

Similar servers