Enables comprehensive video and audio processing using FFmpeg and FastMCP.

ffmpeg-mcp 🎬⚡
A Python package for media processing using FFmpeg and FastMCP. It enables building microservices that handle video/audio tasks with clean, reusable interfaces.
📖 Overview
This project provides a framework for handling media processing tasks using:
- FFmpeg — A powerful multimedia framework for processing audio and video files
- FastMCP — A high-performance framework for building microservices
🛠️ Available Tools
1. Metadata & Frames
get_video_metadataparam(s):
input_video_path: str
extract_framesparams:
input_video_path: str | Pathnumber_of_frames: intframe_timestamps: int (eg: 5s, 10s, 15s, ...)
2. Audio
extract_audioparam(s):
input_video_path: str
3. Video Scaling & Resizing
scale_videoparams:
input_video_path: strresolution: Optional[str]
4. Overlay Operations
overlay_imageparams:
input_video_path: stroverlay_image_path: strpositioning: Literal[top_left, bottom_left, top_right, bottom_right, center, top_center, bottom_center] = 'top_right'scale: tuple[int, int] | None = (100, 100)keep_audio: bool = Trueopacity: float | None = None (range 0.0–1.0)start_time: float = 0.0 (in seconds)duration: float | None = None (in seconds; None = until end of video)
overlays_videoparams:
input_video_path: stroverlay_video_path: strpositioning: Literal[top_left, bottom_left, top_right, bottom_right] = 'top_left'
5. Video Editing
clip_videoparams:
input_video_path: strstart_timestampduration: int
crop_videoparams:
input_video_pathsafe_crop: boolheight: intwidth: intx_offset: inty_offset: int
trim_and_concatenateparams:
input_video_pathnumber_of_trims: inttrim_timestamp: List[(start, end), (start, end), ...]
make_gifparams:
input_video_pathstart_timestampduration
6. Concatenation & Transitions
concatenate_videosparam(s):
file_list: list[Path]
normalize_video_clipsparams:
input_video_clips: List[str]resolution: tuple default(1280, 720)frame_rate: int default30crf: int default23audio_bitrate: str default128kpreset: str defaultfast
concat_clips_with_transitionparams:
input_video_clips: List[str]transition_types: str defaultfade(e.g., fade, wipeleft, rectcrop, coverup, etc.)transition_duration: float default2
🧰 Utilities
The utils folder contains helper functions and decorators to enhance the functionality and robustness of the media processing tools.
a. Decorators
validate_input_video_pathA decorator that checks if the video path exists, is non-empty, and is a valid video file. This ensures that all video processing functions receive a valid input file.
📦 Requirements
- Python 3.12 or higher
- uv (package manager)
- FFmpeg installed on the system
🚀 Usage
The package can be used to build media processing microservices that leverage the power of FFmpeg through a Python interface.
1. Clone this repo
git clone git@github.com:yubraaj11/ffmpeg-mcp.git
2. Sync the project
uv sync --frozen
3. Use via MCP - Cline config
{
"mcpServers": {
"ffmpeg-mcp": {
"autoApprove": [],
"disabled": false,
"timeout": 60,
"command": "uv",
"args": [
"--directory",
"/path/to/ffmpeg-mcp/ffmpeg_mcp",
"run",
"main.py"
],
"env": {
"PYTHONPATH": "/path/to/ffmpeg-mcp"
},
"transportType": "stdio"
}
}
}
📚 Dependencies
ffmpeg-python— Python bindings for FFmpegfastmcp— Framework for building microservicescolorlog— Colored logging outputfastapi— Web framework for building APIspydantic— Data validation and settings management
Tools (13)
get_video_metadataExtracts metadata from a video file.extract_framesExtracts a specific number of frames or frames at specific timestamps from a video.extract_audioExtracts the audio track from a video file.scale_videoResizes a video to a specified resolution.overlay_imageOverlays an image onto a video with custom positioning, scale, and opacity.overlays_videoOverlays one video onto another at a specified position.clip_videoCuts a specific segment from a video based on start time and duration.crop_videoCrops a video to specific dimensions and offsets.trim_and_concatenateTrims multiple segments from a video and joins them together.make_gifConverts a video segment into a GIF.concatenate_videosJoins multiple video files into a single file.normalize_video_clipsStandardizes video clips to a specific resolution, frame rate, and bitrate.concat_clips_with_transitionConcatenates video clips using transitions like fade or wipe.Environment Variables
PYTHONPATHrequiredPath to the ffmpeg-mcp directory for module resolution.Configuration
{
"mcpServers": {
"ffmpeg-mcp": {
"autoApprove": [],
"disabled": false,
"timeout": 60,
"command": "uv",
"args": [
"--directory",
"/path/to/ffmpeg-mcp/ffmpeg_mcp",
"run",
"main.py"
],
"env": {
"PYTHONPATH": "/path/to/ffmpeg-mcp"
},
"transportType": "stdio"
}
}
}