A lightweight server that exposes FFmpeg's video processing capabilities to AI assistants through the Model Context Protocol (MCP), supporting operations like video format conversion, audio extraction, and adding watermarks.
一个基于 Model Context Protocol (MCP) 的 FFmpeg 辅助工具,提供视频处理功能。
MCP FFmpeg Helper 是一个轻量级服务器,它通过 MCP 协议将 FFmpeg 的强大功能暴露给 AI 助手。它支持以下视频处理操作:
检查是否安装成功ffmpeg -version
npm install
npm run build
要在 Windsurf 或其他支持 MCP 的应用程序中使用此工具,请将以下配置添加到 MCP 配置文件中:
1.本地配置node服务器
windows:
{ "mcp-ffmpeg-helper": { "command": "cmd", "args": [ "/c", "node", "path/to/mcp-ffmpeg-helper/build/index.js" ] } }
对于 Windows 用户,配置文件通常位于:%APPDATA%/.codeium/windsurf/mcp_config.json
macos:
{ "mcp-ffmpeg-helper": { "command": "node", "args": [ "path/to/mcp-ffmpeg-helper/build/index.js" ] } }
2.使用npm包的方式配置mcp服务器(推荐使用,不需要手动构建node服务器,不用克隆仓库到本地)
windows:
{ "mcp-ffmpeg-helper": { "command": "cmd", "args": [ "/c", "npx", "@sworddut/mcp-ffmpeg-helper" ] } }
macos:
{ "mcp-ffmpeg-helper": { "command": "npx", "args": [ "@sworddut/mcp-ffmpeg-helper" ] } }
直接在windsurf控制台输入: 请帮我查看"path/to/video.mp4"视频信息
直接在windsurf控制台输入: 请帮我将"path/to/input.avi"转换为"path/to/output.mp4"
直接在windsurf控制台输入: 请帮我从"path/to/video.mp4"提取音频到"path/to/audio.mp3"
直接在windsurf控制台输入: 请帮我从"path/to/images/%05d.jpg"创建视频到"path/to/output.mp4"
直接在windsurf控制台输入: 请帮我裁剪"path/to/input.mp4"到"path/to/output.mp4",从00:00:00开始,到00:01:00结束
直接在windsurf控制台输入: 请帮我为"path/to/input.mp4"添加水印到"path/to/output.mp4",使用"path/to/watermark.png"作为水印,位置在[右下角/左上角/中心等],透明度[0-1之间的值]
直接在windsurf控制台输入: 请帮我裁剪"path/to/input.mp3"到"path/to/output.mp3",从00:00:10开始,持续30秒
直接在windsurf控制台输入: 请帮我从"path/to/video.mp4"提取帧到"path/to/frames"文件夹,使用PNG格式以保持最高质量
获取视频文件的详细信息,包括格式、编解码器、分辨率、帧率等。
参数:
filePath
: 视频文件路径示例:
get_video_info({ filePath: "path/to/video.mp4" })
将视频转换为不同格式或应用特定编码选项。
参数:
inputPath
: 输入视频文件路径outputPath
: 输出视频文件路径options
: 附加的 FFmpeg 选项(可选)示例:
convert_video({ inputPath: "path/to/input.avi", outputPath: "path/to/output.mp4", options: "-c:v libx264 -crf 23 -preset medium" })
从视频文件中提取音频轨道。
参数:
inputPath
: 输入视频文件路径outputPath
: 输出音频文件路径format
: 音频格式(如 mp3, aac 等)示例:
extract_audio({ inputPath: "path/to/video.mp4", outputPath: "path/to/audio.mp3", format: "mp3" })
从图像序列创建视频文件。
参数:
inputPattern
: 输入图像模式(如 'img%03d.jpg' 或 'folder/*.png')outputPath
: 输出视频文件路径framerate
: 帧率(默认:25)codec
: 视频编解码器(默认:libx264)pixelFormat
: 像素格式(默认:yuv420p)extraOptions
: 附加的 FFmpeg 选项(可选)示例:
create_video_from_images({ inputPattern: "images/%05d.jpg", outputPath: "output.mp4", framerate: 30, codec: "libx264", pixelFormat: "yuv420p" })
将视频裁剪到指定的时间段。
参数:
inputPath
: 输入视频文件路径outputPath
: 输出视频文件路径startTime
: 开始时间(格式:HH:MM:SS.mmm 或秒数)duration
: 持续时间(可选,格式同上)endTime
: 结束时间(可选,格式同上)示例:
trim_video({ inputPath: "path/to/video.mp4", outputPath: "path/to/trimmed.mp4", startTime: "00:00:10", duration: "00:00:30" })
为视频添加图像水印。
参数:
inputPath
: 输入视频文件路径watermarkPath
: 水印图像路径outputPath
: 输出视频文件路径position
: 水印位置(topleft, topright, bottomleft, bottomright, center)opacity
: 水印不透明度(0.0-1.0)示例:
add_watermark({ inputPath: "path/to/video.mp4", watermarkPath: "path/to/logo.png", outputPath: "path/to/watermarked.mp4", position: "bottomright", opacity: 0.7 })
将音频文件裁剪到指定的时间段。
参数:
inputPath
: 输入音频文件路径outputPath
: 输出音频文件路径startTime
: 开始时间(格式:HH:MM:SS.mmm 或秒数)duration
: 持续时间(可选,格式同上)endTime
: 结束时间(可选,格式同上)format
: 音频格式(如 mp3, aac 等,可选)示例:
trim_audio({ inputPath: "path/to/audio.mp3", outputPath: "path/to/trimmed.mp3", startTime: "00:00:10", duration: "00:00:30", format: "mp3" })
从视频中提取帧并保存为图像序列。
参数:
inputPath
: 输入视频文件路径outputDir
: 输出图像目录(默认:'output')frameRate
: 帧提取率(如 '1' 提取每一帧,'0.5' 提取每两帧,'1/30' 每30秒提取一帧)format
: 输出图像格式(jpg, png 等,默认:jpg)quality
: 图像质量(1-100,默认:95)startTime
: 开始提取的时间点(可选)duration
: 提取的持续时间(可选)示例:
extract_frames({ inputPath: "path/to/video.mp4", outputDir: "path/to/frames", frameRate: "1", format: "png", quality: 99 })
create_video_from_images({ inputPattern: "C:/Users/username/images/bear/%05d.jpg", outputPath: "C:/Users/username/videos/bear.mp4", framerate: 30, codec: "libx264", pixelFormat: "yuv420p" })
trim_video({ inputPath: "C:/Users/username/videos/long_video.mp4", outputPath: "C:/Users/username/videos/clip.mp4", startTime: "0", duration: "10" })
extract_frames({ inputPath: "C:/Users/username/videos/movie.mp4", outputDir: "C:/Users/username/frames", frameRate: "1", format: "png", quality: 99 })
trim_audio({ inputPath: "C:/Users/username/music/song.mp3", outputPath: "C:/Users/username/music/clip.mp3", startTime: "01:30", duration: "00:30", format: "mp3" })
options
或 extraOptions
参数传递额外的命令行选项项目采用模块化结构,便于维护和扩展:
src/index.ts
- 主入口文件,设置 MCP 服务器src/utils/file.ts
- 文件操作相关的工具函数src/utils/ffmpeg.ts
- FFmpeg 相关的工具函数src/tools/definitions.ts
- 工具定义src/tools/handlers.ts
- 工具处理函数实现由于 MCP 服务器通过标准输入/输出进行通信,调试可能比较困难。建议使用控制台日志进行调试:
console.log("调试信息");
要添加新的 FFmpeg 功能,请修改以下文件:
src/tools/definitions.ts
中添加新工具的定义src/tools/handlers.ts
中添加相应的实现npm run build
Discover shared experiences
Shared threads will appear here, showcasing real-world applications and insights from the community. Check back soon for updates!