FFmpeg MCP Server
NPM · @ASH_J1997/FFMPEG-MCP-SERVER
FFmpeg & FFprobe media processing toolkit for video, audio, and social formats
Available components
Last scanned (3 hours ago)
Scores higher than 42% of npm servers
Category Design and Media
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security98
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- No install/post-install scripts declared.Pass
- 30 of 92 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency45
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 0 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability78
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 3373 tokens (~177/item across 19 items; 17 tools + 2 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management7
- Stability observed for 2 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 17 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 18 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 24 Oct 26 +15
- Malware scan: unverified → pass ▲ security
- 23 Oct 26 −12
- Malware scan: pass → unverified ▼ security
- Schema quality: 2376 → 3373 ▼ functional
- First check of Schema quality: 100 functional
- Schema quality: excellent → good functional
- Package version: 0.4.2 → 0.5.0 functional
- 22 Oct 26 68
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 24 Oct 2026 · Analysed npm/@ash_j1997/ffmpeg-mcp-server@0.5.0
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | npm |
Background: How many MCP packages publish verified provenance →
Dependencies 92 packages
| Packages resolved | 92 |
|---|---|
| Stale | 30 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
add_overlay ~217
Place a watermark image, logo PNG, or branding graphic over a video with customizable position, padding, scaling, and opacity.
| Name | Type | Req | Description |
|---|---|---|---|
| hardwareAcceleration | boolean | – | Use hardware-accelerated video encoding when available. Default: true. |
| opacity | number | – | Overlay opacity from 0.05 (subtle watermark) to 1.0 (fully opaque). Default: 1.0. |
| outputPath | string | yes | Destination path for the output video (.mp4 or .mov). |
| overlayPath | string | yes | Path to the watermark, logo, or overlay image (.png, .jpg, or .webp). |
| padding | integer | – | Margin padding in pixels from the edge. Default: 20. |
| position | string | – | Corner or screen placement for the overlay. Default: 'bottom_right'. |
| scaleWidth | integer | – | Optional width in pixels to scale the overlay, keeping its original aspect ratio (e.g. 150). |
| videoPath | string | yes | Path to the base video file. |
No output schema declared.
No examples provided.
add_subtitles ~145
Embed an SRT or VTT subtitle track into a video container (mov_text for MP4, srt for MKV) without re-encoding the video stream.
| Name | Type | Req | Description |
|---|---|---|---|
| language | string | – | ISO 639-2 three-letter language code (e.g. 'eng', 'spa', 'fra', 'deu') |
| outputPath | string | yes | Target output video path (.mp4, .mkv, or .mov) |
| subtitlesPath | string | yes | Path to subtitle file (.srt or .vtt) |
| title | string | – | Subtitle track label displayed in video players |
| videoPath | string | yes | Path to the source video file |
No output schema declared.
No examples provided.
burn_subtitles ~261
Hardcode/burn subtitles directly into video frames with customizable font size, colors, and positioning. Unlike soft subtitles, burned subtitles render on all platforms including TikTok, Instagram Reels, and YouTube Shorts.
| Name | Type | Req | Description |
|---|---|---|---|
| fontColor | string | – | Primary subtitle text color: 'white', 'yellow', 'cyan', or ASS hex e.g. '&H00FFFFFF'. Default: 'white'. |
| fontSize | integer | – | Subtitle font size in points. Default: 24. |
| hardwareAcceleration | boolean | – | Use hardware-accelerated video encoding when available. Default: true. |
| marginV | integer | – | Vertical margin distance in pixels from the bottom edge. Default: 35. |
| outlineColor | string | – | Subtitle border/outline color: 'black', 'white', or ASS hex. Default: 'black'. |
| outlineWidth | integer | – | Outline thickness in pixels. Default: 2. |
| outputPath | string | yes | Target output video path (.mp4, .mov, or .mkv). |
| subtitlesPath | string | yes | Path to the subtitle file (.srt, .vtt, or .ass) to burn into the video. |
| videoPath | string | yes | Path to the source video file. |
No output schema declared.
No examples provided.
change_speed ~115
Change video and audio playback speed (such as 2x for fast forward or 0.5x for slow motion) with pitch correction.
| Name | Type | Req | Description |
|---|---|---|---|
| inputPath | string | yes | Path to the source video or audio file |
| muteAudio | boolean | – | Whether to strip audio track completely |
| outputPath | string | yes | Target output file path |
| speed | number | yes | Playback speed multiplier (e.g., 2.0 for 2x fast-forward/timelapse, 0.5 for slow-motion) |
No output schema declared.
No examples provided.
compress_video ~264
Compress video files to fit upload limits (such as GitHub PRs under 10MB or Discord under 25MB) using target file sizes or CRF quality levels. Does not modify the original file.
| Name | Type | Req | Description |
|---|---|---|---|
| crf | integer | – | Quality value between 18 (higher quality) and 45 (smaller file). Overrides preset. |
| hardwareAcceleration | boolean | – | Use hardware-accelerated video encoding (VideoToolbox, NVENC, QSV, etc.) when available. Default: true. |
| inputPath | string | yes | Path to the source video file (e.g. './recordings/demo.mov') |
| maxWidth | integer | – | Maximum video width in pixels, such as 1280 for 720p. Keeps aspect ratio. |
| outputPath | string | yes | Destination path for the compressed MP4 file (e.g. './recordings/demo_compressed.mp4') |
| preset | string | – | Preset when targetSizeMB is not set: 'github_pr', 'discord', 'email', 'balanced', or 'high_quality'. Default: 'balanced'. |
| targetSizeMB | number | – | Target output size in megabytes, such as 9.5 for GitHub or 24 for Discord. Computes bitrates from duration. |
No output schema declared.
No examples provided.
concat_media ~103
Join multiple video or audio files in order into a single file. Uses stream copy for matching files or re-encodes when formats differ.
| Name | Type | Req | Description |
|---|---|---|---|
| inputPaths | array | yes | List of media files to concatenate in sequential order |
| mode | string | – | Concatenation mode. 'lossless' uses stream copy without quality loss (inputs must share codecs). 'reencode' normalizes differing resolutions/codecs. |
| outputPath | string | yes | Target output file path |
No output schema declared.
No examples provided.
create_split_screen ~311
Combine two video files into a split-screen video. Stacks clips vertically (1080x1920 for Reels and TikTok) or places them side-by-side. Supports audio mixing and subtitle embedding.
| Name | Type | Req | Description |
|---|---|---|---|
| audioSource | string | – | Audio track selection: 'mix' (blends audio from both videos), 'first' (uses only top/left audio), 'second' (uses only bottom/right audio), or 'mute'. Default: 'mix'. |
| firstVideoPath | string | yes | Path to the top video (vertical layout) or left video (horizontal layout). |
| hardwareAcceleration | boolean | – | Use hardware-accelerated video encoding (VideoToolbox, NVENC, QSV, etc.) when available. Default: true. |
| layout | string | – | Split layout: 'vertical_9_16' (1080x1920 stacked top/bottom for Reels and TikTok), 'horizontal_16_9' (1920x1080 side-by-side), or 'square_1_1' (1080x1080 stacked). Default: 'vertical_9_16'. |
| outputPath | string | yes | Destination path for the split-screen output file (e.g. './reel.mp4'). |
| secondVideoPath | string | yes | Path to the bottom video (vertical layout) or right video (horizontal layout). |
| subtitlesPath | string | – | Optional path to an .srt or .vtt subtitle file to embed into the output video. |
No output schema declared.
No examples provided.
extract_audio ~183
Extract an audio track from a video file into a standalone audio file. Supports the 'whisper_wav' preset (16kHz mono WAV) for speech recognition models, plus MP3, AAC, FLAC, and stream copy.
| Name | Type | Req | Description |
|---|---|---|---|
| bitrate | string | – | Target audio bitrate for MP3 or AAC (e.g. '128k', '192k', '320k'). |
| format | string | – | Audio format: 'whisper_wav' (16kHz mono WAV for Whisper), 'mp3', 'aac', 'flac', or 'copy' (extract without re-encoding). Default: 'mp3'. |
| inputPath | string | yes | Path to the source video or audio file. |
| outputPath | string | yes | Destination path for the output audio file (e.g. './extracted.wav' or './audio.mp3'). |
No output schema declared.
No examples provided.
extract_keyframes ~179
Extract multiple representative frames across a video's timeline. In 'montage' mode, merges frames into a single contact-sheet grid image and inlines base64 for vision models to inspect the whole video at once.
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | – | Number of representative frames to extract across the video timeline. Default: 6. |
| includeBase64 | boolean | – | Inline base64 image data in response for vision models. Default: true. |
| inputPath | string | yes | Path to the source video file. |
| layout | string | – | Output format: 'montage' combines all frames into a single contact-sheet grid image for vision models; 'individual' exports separate frame images. Default: 'montage'. |
| outputPath | string | yes | Destination image path (e.g. './keyframes_grid.png' or './frames/frame_%02d.jpg'). |
No output schema declared.
No examples provided.
extract_thumbnail ~169
Capture a single still image from a video. Returns the saved image path and inlined base64 image data so vision models can inspect the frame.
| Name | Type | Req | Description |
|---|---|---|---|
| includeBase64 | boolean | – | Return base64 image data in response for vision models. Default: true. |
| inputPath | string | yes | Path to the source video file. |
| outputPath | string | yes | Destination image path ending in .png or .jpg (e.g. './thumb.png'). |
| resolution | string | – | Optional scaled size formatted as 'WIDTHxHEIGHT', such as '1280x720'. Defaults to source resolution. |
| timestamp | string | – | Timestamp to capture, such as '00:00:05', '10', or 'midpoint' for the middle frame. Default: '00:00:01'. |
No output schema declared.
No examples provided.
generate_waveform ~185
Generate a PNG waveform image from an audio or video file. Returns the file path and inlined base64 image data.
| Name | Type | Req | Description |
|---|---|---|---|
| color | string | – | Waveform color in hex or name (such as '0x6366f1', 'white', or 'black'). Default: '0x6366f1'. |
| height | integer | – | Image height in pixels. Default: 280. |
| includeBase64 | boolean | – | Return base64 image data in the response for vision models. Default: true. |
| inputPath | string | yes | Path to the audio or video file. |
| outputPath | string | yes | Destination path for the PNG image. |
| scale | string | – | Amplitude scale: 'lin', 'log', or 'sqrt'. Default: 'lin'. |
| width | integer | – | Image width in pixels. Default: 1200. |
No output schema declared.
No examples provided.
media_convert ~273
Convert video and audio files between formats. Includes presets for web MP4 (H.264/AAC), WebM (VP9/Opus), and animated GIF. Supports hardware acceleration on Apple Silicon, NVIDIA, Intel, and AMD.
| Name | Type | Req | Description |
|---|---|---|---|
| crf | number | – | Quality factor from 0 to 51. Lower numbers mean higher quality. Default: 23 for MP4, 30 for WebM. |
| fps | number | – | Target frame rate in frames per second, such as 30, 60, or 15 |
| hardwareAcceleration | boolean | – | Use hardware-accelerated video encoding (VideoToolbox, NVENC, QSV, etc.) when available. Default: true. |
| inputPath | string | yes | Path to the source media file to convert |
| outputPath | string | yes | Destination path for the converted file (e.g. ./output.mp4, ./output.webm, ./animation.gif) |
| preset | string | – | Encoding preset: 'web_mp4' for browser playback, 'webm' for WebM video, 'gif' for animated GIF, or 'auto'. Default: 'auto'. |
| resolution | string | – | Target size formatted as 'WIDTHxHEIGHT', such as '1920x1080' or '1280x720' |
No output schema declared.
No examples provided.
media_probe ~58
Inspect audio and video files with ffprobe. Returns container metadata, stream details, codecs, resolution, bitrate, and duration as JSON.
| Name | Type | Req | Description |
|---|---|---|---|
| inputPath | string | yes | Path to the media file to inspect (e.g. './video.mp4') |
No output schema declared.
No examples provided.
normalize_audio ~193
Normalize audio loudness using the broadcast standard EBU R128 (loudnorm). Supports -16 LUFS (podcasts/Reels), -14 LUFS (YouTube), and optional voice clarity enhancement (80Hz high-pass to remove mic rumble). Works on audio or video files.
| Name | Type | Req | Description |
|---|---|---|---|
| inputPath | string | yes | Path to the source audio or video file. |
| outputPath | string | yes | Destination path for the normalized media file. |
| targetLufs | number | – | Target integrated loudness in LUFS (-16 for podcasts/Reels, -14 for YouTube, -23 for broadcast). Default: -16. |
| targetPeakDb | number | – | Maximum allowed true peak level in dBTP. Default: -1.5. |
| voiceClarity | boolean | – | Apply speech enhancement filters (80Hz high-pass to remove mic rumble and gentle compressor for presence). Default: false. |
No output schema declared.
No examples provided.
reformat_aspect_ratio ~271
Change video aspect ratio to 9:16 vertical, 1:1 square, or 4:5 portrait. Adds blurred video borders, solid padding, or center crops.
| Name | Type | Req | Description |
|---|---|---|---|
| blurAmount | number | – | Blur strength (5 to 50) for blur_background mode. Default: 20. |
| hardwareAcceleration | boolean | – | Use hardware-accelerated video encoding (VideoToolbox, NVENC, QSV, etc.) when available. Default: true. |
| inputPath | string | yes | Path to the source video file. |
| mode | string | – | Format mode: 'blur_background' adds blurred video borders, 'fit_pad' adds solid color padding, and 'crop_center' zooms and crops the center. Default: 'blur_background'. |
| outputPath | string | yes | Destination path for the reformatted video. |
| padColor | string | – | Background color for fit_pad mode, such as 'black', 'white', or hex '0x1e1e2e'. Default: 'black'. |
| targetRatio | string | – | Target aspect ratio: '9:16' for vertical reels, '1:1' for square, '16:9' for horizontal, or '4:5' for portrait. Default: '9:16'. |
No output schema declared.
No examples provided.
trim_media ~206
Cut a segment from a video or audio file. Uses stream copy without re-encoding by default, or re-encodes when accurate cuts are needed.
| Name | Type | Req | Description |
|---|---|---|---|
| accurateReencode | boolean | – | Re-encode video for cuts between keyframes. Default: false (uses fast stream copy). |
| duration | string | – | Optional duration in seconds from startTime (e.g. '30'). If neither endTime nor duration is set, trims to end of file. |
| endTime | string | – | Optional end timestamp formatted as 'HH:MM:SS' or seconds. Do not combine with duration. |
| inputPath | string | yes | Path to the source media file to cut. |
| outputPath | string | yes | Destination path for the trimmed output file (e.g. './clip.mp4'). |
| startTime | string | yes | Start timestamp formatted as 'HH:MM:SS' (e.g. '00:01:30') or seconds (e.g. '90'). |
No output schema declared.
No examples provided.
trim_silence ~196
Detect and remove silent pauses from audio or video files. Preserves video & audio lip-sync in 'start_end' mode. Returns original duration and seconds saved.
| Name | Type | Req | Description |
|---|---|---|---|
| inputPath | string | yes | Path to the source audio or video file. |
| minDurationSeconds | number | – | Minimum silence duration in seconds to trigger a cut. Default: 0.5. |
| mode | string | – | Trim mode: 'start_end' removes silence at the start and end (preserving perfect A/V sync on videos); 'all_pauses' removes silent pauses across audio files. Default: 'start_end'. |
| outputPath | string | yes | Destination path for the trimmed file (e.g. './recordings/cleaned.mp4'). |
| thresholdDb | number | – | Volume threshold in decibels, between -60dB and -10dB. Audio quieter than this is treated as silence. Default: -35. |
No output schema declared.
No examples provided.
How do I install the FFmpeg MCP Server server?
FFmpeg MCP Server runs locally as an npm package, launched with npx -y @ash_j1997/ffmpeg-mcp-server. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · @ash_j1997/ffmpeg-mcp-server
claude mcp add ashutos1997-ffmpeg-mcp-server -- npx -y @ash_j1997/ffmpeg-mcp-server
What is the FFmpeg MCP Server server?
FFmpeg MCP Server is listed in the public MCP registry as io.github.Ashutos1997/ffmpeg-mcp-server. FFmpeg & FFprobe media processing toolkit for video, audio, and social formats. This page covers its npm package (@ash_j1997/ffmpeg-mcp-server).
Is the FFmpeg MCP Server server safe to use?
FFmpeg MCP Server scores 71 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 24 October 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the FFmpeg MCP Server server expose?
FFmpeg MCP Server exposes 17 tools: media_probe, media_convert, trim_media, extract_audio, extract_thumbnail, and 12 more. Their descriptions and schemas cost roughly 3,329 tokens of context every time the server is loaded.
Is the FFmpeg MCP Server server still maintained?
FFmpeg MCP Server is still listed as active in the MCP registry. We last reached this channel on 24 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the FFmpeg MCP Server server under?
FFmpeg MCP Server declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.