FFmpeg Helper
STDIOA lightweight server exposing FFmpeg functionality through MCP protocol for video processing.
A lightweight server exposing FFmpeg functionality through MCP protocol for video processing.
一个基于 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