ffmpeg-mcp
Um pacote Python para processamento de mídia usando FFmpeg e FastMCP.
Documentação

ffmpeg-mcp 🎬⚡
Edite vídeo e áudio apenas conversando com seu assistente de IA.
ffmpeg-mcp é um servidor Model Context Protocol que coloca todo o poder do FFmpeg atrás de um conjunto limpo de ferramentas que seu LLM pode chamar — cortar, recortar, redimensionar, sobrepor, concatenar com transições, extrair quadros/áudio, criar GIFs e muito mais. Sem flags de linha de comando para memorizar.
✨ Por que ffmpeg-mcp?
FFmpeg é incrivelmente poderoso e incrivelmente difícil de memorizar. ffmpeg-mcp entrega esse poder ao seu assistente de IA para que você possa dizer o que deseja em português simples:
"Pegue os primeiros 10 segundos de
demo.mov, redimensione para 1080p, coloque meu logotipo no canto superior direito e transforme em um GIF."
…e o modelo orquestra as ferramentas certas para você. Cada ferramenta é uma função Python pequena e validada — fácil de ler, reutilizar e estender.
- 🗣️ Edição de vídeo em linguagem natural — funciona em qualquer cliente MCP (Claude Desktop, Cursor, Cline, …)
- 🧱 12 ferramentas focadas — blocos de construção combináveis em vez de uma caixa preta gigante
- ✅ Validação de entrada integrada — os caminhos são verificados quanto à existência, vazio e validade antes de o FFmpeg ser executado
- 🧩 Personalizável — adicione uma nova ferramenta escrevendo uma função e registrando-a
🛠️ Ferramentas Disponíveis
| Ferramenta | O que faz | Parâmetros principais |
|---|---|---|
get_video_metadata | Analisar um arquivo para streams, codecs, duração, etc. | input_video_path |
extract_frames | Salvar quadros como imagens (uniformemente, por intervalo ou 1/seg) | input_video_path, number_of_frames?, timestamp_offset? |
extract_audio | Extrair áudio para um arquivo .wav | input_video_path |
scale_video | Aumentar resolução para 1080p / 2k / 4k, preservando proporção | input_video_path, resolution="1080p" |
crop_video | Recortar para uma região | input_video_path, width, height, x_offset, y_offset, safe_crop |
clip_video | Cortar um sub-clipe por início + duração | input_video_path, start_timestamp, duration |
make_gif | Transformar um segmento em um GIF otimizado | input_video_path, start_timestamp, duration |
overlay_image | Compor uma imagem (logotipo/marca d'água) com tempo e opacidade | input_video_path, overlay_image_path, positioning, opacity, start_time, duration |
overlays_video | Sobrepor um vídeo (em loop) em outro | input_video_path, overlay_video_path, positioning, scale |
trim_and_concat_operation | Cortar vários clipes e costurá-los juntos | inputs: [{path, start_time?, end_time?}], width, height |
get_normalized_clips | Normalizar clipes para uma resolução/fps/codec comum (em paralelo) | input_video_clips, resolution, frame_rate, crf |
concat_clips_with_transition | Concatenar clipes com uma transição xfade | input_video_clips, transition_type="fade", transition_duration |
?marca parâmetros opcionais.concat_clips_with_transitionsuporta muitas transições —fade,wipeleft,slideup,circlecrop,dissolve,pixelize,radial, e dezenas mais.
📦 Requisitos
Verifique se o FFmpeg está disponível:
ffmpeg -version
🚀 Início Rápido
1. Clone e instale
git clone https://github.com/yubraaj11/ffmpeg-mcp.git
cd ffmpeg-mcp
uv sync --frozen
2. Conecte-o ao seu cliente MCP
Aponte seu cliente para o servidor usando os trechos abaixo. Substitua /path/to/ffmpeg-mcp pelo caminho absoluto para seu clone.
Claude Desktop / Cursor (claude_desktop_config.json ou .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. Reinicie seu cliente e comece a editar
"Extraia 5 quadros uniformemente espaçados de
intro.mp4.""Faça um GIF de 3 segundos de
clip.movcomeçando em 12s.""Concatene
a.mp4,b.mp4ec.mp4com uma transiçãowipeleftde 1 segundo entre eles."
Os arquivos processados são gravados em ffmpeg_mcp/processed_elements/.
🧰 Estrutura do Projeto
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 ferramenta retorna o caminho do arquivo de saída ou um erro JSON estruturado (status, error_type, message, time), para que falhas sejam fáceis de ler e recuperar pelo modelo.
🤝 Contribuindo
Contribuições são muito bem-vindas! Adicionar uma ferramenta é aproximadamente:
- Escreva uma função em
ffmpeg_mcp/services/your_tool.py. - Exporte-a de
ffmpeg_mcp/services/__init__.py. - Registre-a em
main.pycommcp.tool(name_or_fn=your_tool).
Por favor, execute o linter antes de abrir um PR:
uv run ruff check .
Encontrou um bug ou tem uma ideia? Abra uma issue — e se este projeto te salvar de mais um mergulho na página de manual do ffmpeg, considere deixar uma ⭐.
📚 Construído Com
fastmcp— o framework do servidor MCPffmpeg-python— bindings Python para FFmpegpydantic— validação de dadoscolorlog— logs coloridos