ffmpeg-mcp
Un paquete de Python para procesamiento multimedia utilizando FFmpeg y FastMCP.
Documentación

ffmpeg-mcp 🎬⚡
Edita video y audio simplemente hablando con tu asistente de IA.
ffmpeg-mcp es un servidor de Model Context Protocol que pone todo el poder de FFmpeg detrás de un conjunto limpio de herramientas que tu LLM puede invocar: recortar, cortar, escalar, superponer, concatenar con transiciones, extraer fotogramas/audio, crear GIFs y más. Sin banderas de línea de comandos que memorizar.
✨ ¿Por qué ffmpeg-mcp?
FFmpeg es increíblemente potente e increíblemente difícil de recordar. ffmpeg-mcp pone ese poder en manos de tu asistente de IA para que puedas decir lo que quieras en lenguaje natural:
"Toma los primeros 10 segundos de
demo.mov, escálalo a 1080p, coloca mi logo en la esquina superior derecha y conviértelo en un GIF."
…y el modelo orquesta las herramientas adecuadas para ti. Cada herramienta es una pequeña función de Python validada: fácil de leer, reutilizar y ampliar.
- 🗣️ Edición de video en lenguaje natural — funciona en cualquier cliente MCP (Claude Desktop, Cursor, Cline, …)
- 🧱 12 herramientas enfocadas — bloques de construcción componibles en lugar de una caja negra gigante
- ✅ Validación de entrada integrada — las rutas se verifican por existencia, vacío y validez antes de que FFmpeg se ejecute
- 🧩 Extensible — añade una nueva herramienta escribiendo una función y registrándola
🛠️ Herramientas disponibles
| Herramienta | Qué hace | Parámetros clave |
|---|---|---|
get_video_metadata | Inspecciona un archivo para streams, códecs, duración, etc. | input_video_path |
extract_frames | Guarda fotogramas como imágenes (uniformemente, por intervalo, o 1/seg) | input_video_path, number_of_frames?, timestamp_offset? |
extract_audio | Extrae el audio a un archivo .wav | input_video_path |
scale_video | Escala a 1080p / 2k / 4k, preservando la relación de aspecto | input_video_path, resolution="1080p" |
crop_video | Recorta a una región | input_video_path, width, height, x_offset, y_offset, safe_crop |
clip_video | Corta un subclip por inicio + duración | input_video_path, start_timestamp, duration |
make_gif | Convierte un segmento en un GIF optimizado | input_video_path, start_timestamp, duration |
overlay_image | Compone una imagen (logo/marca de agua) con sincronización y opacidad | input_video_path, overlay_image_path, positioning, opacity, start_time, duration |
overlays_video | Superpone un video (en bucle) sobre otro | input_video_path, overlay_video_path, positioning, scale |
trim_and_concat_operation | Recorta varios clips y los une | inputs: [{path, start_time?, end_time?}], width, height |
get_normalized_clips | Normaliza clips a una resolución/fps/códec común (en paralelo) | input_video_clips, resolution, frame_rate, crf |
concat_clips_with_transition | Concatena clips con una transición xfade | input_video_clips, transition_type="fade", transition_duration |
?marca parámetros opcionales.concat_clips_with_transitionadmite muchas transiciones:fade,wipeleft,slideup,circlecrop,dissolve,pixelize,radialy docenas más.
📦 Requisitos
Verifica que FFmpeg esté disponible:
ffmpeg -version
🚀 Inicio rápido
1. Clona e instala
git clone https://github.com/yubraaj11/ffmpeg-mcp.git
cd ffmpeg-mcp
uv sync --frozen
2. Conéctalo a tu cliente MCP
Apunta tu cliente al servidor usando los fragmentos siguientes. Reemplaza /path/to/ffmpeg-mcp con la ruta absoluta a tu clon.
Claude Desktop / Cursor (claude_desktop_config.json o .cursor/mcp.json)
{
"mcpServers": {
"ffmpeg-mcp": {
"command": "uv",
"args": ["--directory", "/path/to/ffmpeg-mcp/ffmpeg_mcp", "run", "main.py"],
"env": { "PYTHONPATH": "/path/to/ffmpeg-mcp" }
}
}
}
Cline (VS Code)
{
"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"
}
}
}
3. Reinicia tu cliente y empieza a editar
"Extrae 5 fotogramas espaciados uniformemente de
intro.mp4.""Crea un GIF de 3 segundos desde
clip.movcomenzando en el segundo 12.""Concatena
a.mp4,b.mp4yc.mp4con una transiciónwipeleftde 1 segundo entre ellos."
Los archivos procesados se escriben en ffmpeg_mcp/processed_elements/.
🧰 Estructura del proyecto
ffmpeg_mcp/
├── main.py # MCP server entry point — registers all tools
├── services/ # one module per tool
├── configs/ # colored logging setup
└── exceptions/ # structured error messages
utils/ # validation decorators & helpers
Cada herramienta devuelve la ruta del archivo de salida o un error JSON estructurado (status, error_type, message, time), de modo que los fallos son fáciles de leer y recuperar para el modelo.
🤝 Contribuciones
¡Las contribuciones son muy bienvenidas! Añadir una herramienta es aproximadamente:
- Escribe una función en
ffmpeg_mcp/services/your_tool.py. - Expórtala desde
ffmpeg_mcp/services/__init__.py. - Regístrala en
main.pyconmcp.tool(name_or_fn=your_tool).
Por favor, ejecuta el linter antes de abrir un PR:
uv run ruff check .
¿Encontraste un error o tienes una idea? Abre un issue — y si este proyecto te salva de otra inmersión en la página de manual de ffmpeg, considera dejar una ⭐.
📚 Construido con
fastmcp— el framework de servidor MCPffmpeg-python— enlaces de Python para FFmpegpydantic— validación de datoscolorlog— registros de colores