ffmpeg-mcp-server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| media_probeA | Inspect audio and video files with ffprobe. Returns container metadata, stream details, codecs, resolution, bitrate, and duration as JSON. |
| media_convertA | 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. |
| trim_mediaA | 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. |
| extract_audioA | 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. |
| extract_thumbnailA | 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. |
| compress_videoA | 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. |
| concat_mediaA | Join multiple video or audio files in order into a single file. Uses stream copy for matching files or re-encodes when formats differ. |
| generate_waveformB | Generate a PNG waveform image from an audio or video file. Returns the file path and inlined base64 image data. |
| add_subtitlesA | Embed an SRT or VTT subtitle track into a video container (mov_text for MP4, srt for MKV) without re-encoding the video stream. |
| change_speedB | Change video and audio playback speed (such as 2x for fast forward or 0.5x for slow motion) with pitch correction. |
| reformat_aspect_ratioB | Change video aspect ratio to 9:16 vertical, 1:1 square, or 4:5 portrait. Adds blurred video borders, solid padding, or center crops. |
| trim_silenceA | 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. |
| create_split_screenB | 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. |
| burn_subtitlesA | 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. |
| extract_keyframesB | 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. |
| normalize_audioB | 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. |
| add_overlayB | Place a watermark image, logo PNG, or branding graphic over a video with customizable position, padding, scaling, and opacity. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| social_clip_generator | Step-by-step workflow for turning landscape footage into a 9:16 vertical short with burned subtitles. |
| whisper_audio_prep | Extract and normalize 16kHz mono audio optimized for Whisper and local STT models. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| system_capabilities | Detected FFmpeg version, hardware acceleration devices, and available video encoders. |
| social_presets | Aspect ratio standards, loudness limits, and upload specifications for social media platforms. |
TDQS
Scored across 17 tools
Each tool maps to a distinct operation: extraction (audio, thumbnail, keyframes), transformation (convert, compress, speed, aspect ratio, split-screen), audio processing (normalize, trim_silence), and assembly (concat, overlay, subtitles). The few potentially confusable pairs—extract_thumbnail vs extract_keyframes, add_subtitles vs burn_subtitles, trim_media vs trim_silence—are explicitly differentiated in their descriptions. An agent should reliably pick the right tool.
Strong snake_case verb_noun convention throughout (extract_audio, compress_video, trim_silence, add_overlay, concat_media). The only deviations are the resource-prefixed names media_convert and media_probe, which put the noun first, but they remain readable and predictable within the pattern.
17 tools is on the high side of the ideal 3-15 band but well justified for a media-manipulation domain with many independent operations. Each tool covers a genuinely distinct capability, so nothing feels padded, though the surface is nearing the point where discoverability could suffer.
The surface covers the core media lifecycle: probe, trim, trim silence, compress, convert, audio extract/normalize, subtitles, overlays, overlays/speed/concat, and vertical-format output. Minor gaps exist for rotation/flip, arbitrary cropping or resolution scaling as a standalone tool, and multi-audio-track mixing, but these are workaroundable.