ffmpeg-skill
FFmpeg 多媒体处理技能 — 把自然语言指令转成正确、安全的 ffmpeg 命令。
定位
本 skill 是 FFmpeg 的命令翻译层:用户说"把视频压缩到 10MB 以内",输出对应的 ffmpeg 命令行并执行。skill 不捆绑 FFmpeg 本体,只提供安装脚本和命令模板。
核心能力
| 操作域 | 说明 | 关键命令/滤镜 |
|---|---|---|
| 安装检测 | 自动检测 + 一键安装脚本 | scripts/install-ffmpeg.ps1 / .sh |
| 剪辑 | 裁剪、分割、调速、倒放 | -ss, -t, setpts, reverse |
| 转码 | 格式转换、压缩、分辨率、帧率 | -c:v, -crf, scale, -r |
| 去水印 | 模糊遮盖固定区域水印 | delogo |
| 加水印 | 图片水印、文字水印、动态水印 | overlay, drawtext |
| 合成 | 拼接、画中画、多轨混合 | concat, overlay, amix |
| 提取 | 抽帧、提取音频/字幕、视频转 GIF | -vn, -an, -map, fps |
| 音频 | 替换音轨、音量、混音、淡入淡出 | volume, atempo, amix, afade |
| 生成 | 图片序列→视频、单图+音频、测试画面 | -loop, -framerate |
工作流
Step 0: 检测 FFmpeg 是否安装 → 已安装 → Step 1 → 未安装 → 提供安装选项: "FFmpeg 未安装,请选择安装方式:" - 运行 scripts/install-ffmpeg.ps1 (Windows) - 运行 scripts/install-ffmpeg.sh (Mac/Linux) - 参考 references/install-guide.md 手动安装 → 用户确认后执行安装,然后进入 Step 1 Step 1: 解析用户意图 → 匹配操作域 Step 2: 查 references/ 中对应命令模板,填充参数 Step 3: 构造完整命令 → 确认文件不会误覆盖 Step 4: 通过 Bash 执行 ffmpeg 命令 Step 5: 验证输出文件,报告结果
使用场景
场景 1:去水印
用户:帮我把 video.mp4 右上角的水印去掉 AI: 1. 先定位水印: ffmpeg -i "video.mp4" -vf "delogo=x=W-250:y=10:w=240:h=60:show=1" -t 5 preview.mp4 2. 用户确认位置后执行: ffmpeg -i "video.mp4" -vf "delogo=x=W-250:y=10:w=240:h=60" -c:a copy output.mp4
场景 2:视频剪辑
用户:把 demo.mp4 从第 30 秒开始,剪出 15 秒 AI: ffmpeg -ss 00:00:30 -i "demo.mp4" -t 00:00:15 -c:v libx264 -c:a aac output.mp4
场景 3:视频压缩
用户:把这个视频压缩到小一点,最好 720p AI: ffmpeg -i "input.mp4" -vf "scale=1280:-1" -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output.mp4
场景 4:视频拼接
用户:把 part1.mp4、part2.mp4、part3.mp4 拼成一个视频 AI: 生成文件列表 filelist.txt → 执行: ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp4
场景 5:提取音频
用户:把这个视频的声音单独导出来,要 MP3 AI: ffmpeg -i "video.mp4" -vn -c:a libmp3lame -q:a 2 audio.mp3
场景 6:视频转 GIF
用户:把 video.mp4 的 5~8 秒转成 GIF AI: 先创建调色板再生成 GIF(两步,保证画质) ffmpeg -ss 00:00:05 -t 3 -i "video.mp4" -vf "fps=10,scale=480:-1:flags=lanczos,palettegen" palette.png ffmpeg -ss 00:00:05 -t 3 -i "video.mp4" -i palette.png -vf "fps=10,scale=480:-1:flags=lanczos,paletteuse" output.gif
场景 7:倍速播放
用户:把视频调成 1.5 倍速 AI: ffmpeg -i "input.mp4" -vf "setpts=0.6667*PTS" -af "atempo=1.5" output.mp4
场景 8:画中画
用户:把 main.mp4 作为主画面,pip.mp4 放在右下角小窗 AI: ffmpeg -i "main.mp4" -i "pip.mp4" -filter_complex "[1:v]scale=iw/4:ih/4[pip];[0:v][pip]overlay=W-w-10:H-h-10" -c:a copy output.mp4
约束红线
- 必须先检测安装:任何操作前检查
ffmpeg -version是否可执行 - 路径必须引号:Windows 路径含空格或中文时必须用双引号包裹
- 默认
-y覆盖:所有命令默认加-y,但在执行前确认不会误覆盖用户重要文件 -ss位置规则:- 放
-i前 → 快速 seek,精度 ±关键帧间隔 → 适合粗略裁剪 - 放
-i后 → 精确到帧,但慢 → 适合精确裁剪 - 推荐:
-ss放-i前 + 重编码(不-c copy)= 又快又准
- 放
- 无损复制限制:
-c copy只能在关键帧位置切割,不能与滤镜同时使用 - 不删原始文件:skill 只生成新文件,绝对不删除用户的源文件
- delogo 局限性:只遮盖固定位置水印,不能还原被遮盖画面,动态水印基本无效
- 安装脚本安全:安装脚本询问确认后才执行,不偷偷改系统环境变量
- GIF 两步走:视频转 GIF 必须先生成调色板再编码,否则色彩极差
- concat 用 demuxer:拼接相同编码的视频优先用 concat demuxer(
-f concat),不用重编码
安装脚本使用
Windows
powershell# 在 ffmpeg-skill 目录下 powershell -ExecutionPolicy Bypass -File scripts/install-ffmpeg.ps1
脚本逻辑:检测 ffmpeg → winget 安装 → 失败则从 gyan.dev 下载 → 询问是否添加 PATH。
Mac / Linux
bash# 在 ffmpeg-skill 目录下 bash scripts/install-ffmpeg.sh
脚本逻辑:检测 ffmpeg → Mac 用 brew → Linux 检测包管理器(apt/dnf/pacman 等)→ 自动安装。
手动安装
参考 references/install-guide.md。
常见问题处理
| 错误现象 | 原因 | 解决 |
|---|---|---|
No such file or directory | 路径有空格未加引号 | 用双引号包裹路径 |
-ss 位置不精确 | 用了 -c copy 在非关键帧位置剪 | 去掉 -c copy 改为重编码 |
| GIF 色彩像浆糊 | 直接转未先建调色板 | 用两步流程(palettegen + paletteuse) |
concat 拼接失败 | 编码格式或分辨率不一致 | 先统一转码后再拼接,或用 concat filter |
| 字幕乱码 | 未指定中文字体 | 加 fontsdir 指向系统字体目录 |
hevc 编码器不可用 | FFmpeg 构建不含 libx265 | 改用 libx264 |
详细陷阱和解决方案见 references/gotchas.md。
与其他技能的关系
| 技能 | 关系 |
|---|---|
image-forge-skill | 互补:image-forge 处理静态图片,ffmpeg-skill 处理视频/音频 |
workflow-diagram-skill | 无直接关联 |
icon-image-catch-skill | 可用于抓取水印素材图片 |
参考资料索引
| 文件 | 内容 |
|---|---|
references/install-guide.md | 三平台手动安装指引 |
references/gotchas.md | 常见陷阱与最佳实践 |
references/codec-guide.md | 编码器与容器格式速查 |
references/filter-guide.md | 滤镜参数速查(scale/crop/delogo/overlay/drawtext) |
references/commands-trim.md | 剪辑类命令模板 |
references/commands-convert.md | 转码类命令模板 |
references/commands-watermark.md | 水印类命令模板 |
references/commands-compose.md | 合成类命令模板 |
references/commands-extract.md | 提取类命令模板 |
references/commands-generate.md | 生成类命令模板 |
references/commands-audio.md | 音频类命令模板 |


