用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/SpaceZephyr/myskill --skill ffmpeg-usage命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
正在显示 SKILL.md
| name | ffmpeg-usage |
| description | 基于Ffmpeg和第三方API的音视频处理,包括,格式转换、视频拼接、合并、尺寸调整、压缩、GIF 制作、音频提取、字幕处理、社交平台优化、文案提取,文案转录等 |
本技能提供基于 ffmpeg 的全面音视频处理能力,包括经过实战验证的命令和工作流,适用于常见多媒体任务、平台特定优化,以及质量与文件大小管理的最佳实践。
版本: 1.0.0 要求: ffmpeg >= 4.0,ffprobe(可选但推荐)
当用户提及视频或音频处理任务、格式转换、社交媒体优化或多媒体编辑时,Claude 应使用本技能。
当用户需要以下操作时使用本技能:
使用本技能前,请确保已安装 ffmpeg:
# macOS
brew install ffmpeg
# Ubuntu/Debian
sudo apt-get install ffmpeg
# Windows(使用 Chocolatey)
choco install ffmpeg
验证安装:
ffmpeg -version
在不同视频格式之间转换,并使用优化设置。
MP4 转 WebM:
ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 -c:a libopus output.webm
MOV 转 MP4:
ffmpeg -i input.mov -c:v libx264 -c:a aac -strict experimental output.mp4
任意格式转 MP4(通用兼容):
ffmpeg -i input.* -c:v libx264 -preset medium -crf 23 -c:a aac -b:a 128k output.mp4
调整视频尺寸同时保持宽高比。
缩放到 720p:
ffmpeg -i input.mp4 -vf scale=-1:720 -c:a copy output_720p.mp4
缩放到 1080p:
ffmpeg -i input.mp4 -vf scale=-1:1080 -c:a copy output_1080p.mp4
缩放到指定宽度(高度自适应):
ffmpeg -i input.mp4 -vf scale=1280:-1 -c:a copy output.mp4
带填充缩放(黑边填充/信箱模式):
ffmpeg -i input.mp4 -vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2" output.mp4
从视频创建高质量 GIF,并优化文件大小。
基本 GIF(10 帧/秒):
ffmpeg -i input.mp4 -vf "fps=10,scale=480:-1:flags=lanczos" output.gif
高质量 GIF(使用调色板):
# 生成调色板
ffmpeg -i input.mp4 -vf "fps=10,scale=480:-1:flags=lanczos,palettegen" palette.png
# 使用调色板创建 GIF
ffmpeg -i input.mp4 -i palette.png -filter_complex "fps=10,scale=480:-1:flags=lanczos[x];[x][1:v]paletteuse" output.gif
从指定时间范围创建 GIF:
ffmpeg -ss 00:00:10 -t 5 -i input.mp4 -vf "fps=10,scale=480:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" output.gif
提取、转换和处理音频流。
提取音频为 MP3:
ffmpeg -i input.mp4 -vn -acodec libmp3lame -q:a 2 output.mp3
提取音频为 WAV:
ffmpeg -i input.mp4 -vn -acodec pcm_s16le -ar 44100 -ac 2 output.wav
转换音频格式:
ffmpeg -i input.wav -c:a aac -b:a 192k output.m4a
添加背景音乐:
ffmpeg -i video.mp4 -i music.mp3 -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 -shortest output.mp4
混合音频(叠加):
ffmpeg -i video.mp4 -i music.mp3 -filter_complex "[0:a][1:a]amix=inputs=2:duration=first" -c:v copy output.mp4
裁剪、拼接和修改视频。
裁剪视频:
# 从第 10 秒到第 30 秒
ffmpeg -i input.mp4 -ss 00:00:10 -to 00:00:30 -c copy output.mp4
# 基于时长(从第 5 秒开始,截取 10 秒)
ffmpeg -i input.mp4 -ss 00:00:05 -t 10 -c copy output.mp4
拼接视频:
根据格式和兼容性选择方法:
方法一:Concat 协议(推荐——无需临时文件)
# 适用于 MPEG 格式:.ts、.mpg、.mpeg、.mp3、.aac 等
# 直接拼接,无需创建列表文件
ffmpeg -i "concat:file1.mp3|file2.mp3|file3.mp3" -c copy output.mp3
ffmpeg -i "concat:video1.ts|video2.ts|video3.ts" -c copy output.ts
# 支持格式:TS、MPEG-1、MPEG-2、MP3、AAC
# 不支持:MP4、MOV、MKV(请使用方法二)
方法二:Concat 分离器(适用于 MP4、MOV、MKV)
# 使用进程替换避免临时文件
ffmpeg -f concat -safe 0 -i <(printf "file '%s'\n" video1.mp4 video2.mp4 video3.mp4) -c copy output.mp4
# 如果 shell 不支持进程替换:
printf "file '%s'\n" video1.mp4 video2.mp4 video3.mp4 > list.txt
ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4
rm list.txt
方法三:Concat 滤镜(可接受重新编码时使用)
# 当视频编码/分辨率不同时使用
ffmpeg -i video1.mp4 -i video2.mp4 -i video3.mp4 \
-filter_complex "[0:v][0:a][1:v][1:a][2:v][2:a]concat=n=3:v=1:a=1[v][a]" \
-map "[v]" -map "[a]" output.mp4
格式选择指南:
.mp3、.aac、.ts、.mpg、.mpeg → 使用 concat 协议(方法一).mp4、.mov、.mkv → 使用 concat 分离器(方法二)加速/减速:
# 2 倍速
ffmpeg -i input.mp4 -filter:v "setpts=0.5*PTS" -an output.mp4
# 0.5 倍速(慢动作)
ffmpeg -i input.mp4 -filter:v "setpts=2.0*PTS" output.mp4
旋转视频:
# 顺时针旋转 90 度
ffmpeg -i input.mp4 -vf "transpose=1" output.mp4
# 旋转 180 度
ffmpeg -i input.mp4 -vf "transpose=2,transpose=2" output.mp4
添加、提取或烧录字幕。
烧录字幕到视频(硬字幕):
ffmpeg -i input.mp4 -vf subtitles=subtitles.srt output.mp4
添加软字幕:
ffmpeg -i input.mp4 -i subtitles.srt -c copy -c:s mov_text output.mp4
提取字幕:
ffmpeg -i input.mp4 -map 0:s:0 subtitles.srt
从视频中提取帧作为图片。
在指定时间提取单帧:
ffmpeg -i input.mp4 -ss 00:00:05 -vframes 1 thumbnail.jpg
提取多张缩略图:
# 每 10 秒提取一帧
ffmpeg -i input.mp4 -vf fps=1/10 thumb%04d.jpg
# 提取前 10 帧
ffmpeg -i input.mp4 -vframes 10 frame%04d.png
在保持质量的同时减小文件大小。
视频压缩(均衡模式):
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output.mp4
高压缩(更小文件):
ffmpeg -i input.mp4 -c:v libx264 -crf 28 -preset veryslow -c:a aac -b:a 96k output.mp4
Web 优化压缩:
ffmpeg -i input.mp4 -c:v libx264 -preset medium -crf 23 -movflags +faststart -c:a aac -b:a 128k output.mp4
ffmpeg -i input.mp4 \
-c:v libx264 -preset slow -crf 18 \
-c:a aac -b:a 192k \
-pix_fmt yuv420p \
-movflags +faststart \
youtube.mp4
ffmpeg -i input.mp4 \
-vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2" \
-c:v libx264 -preset medium -crf 23 \
-c:a aac -b:a 128k \
-t 15 \
instagram_story.mp4
ffmpeg -i input.mp4 \
-vf scale=1280:720 \
-c:v libx264 -preset medium -crf 23 \
-c:a aac -b:a 128k \
-t 140 \
twitter.mp4
ffmpeg -i input.mp4 \
-vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2" \
-c:v libx264 -preset medium -crf 23 \
-c:a aac -b:a 128k \
-t 60 \
tiktok.mp4
# 减小屏幕录制文件大小
ffmpeg -i screen_recording.mov \
-c:v libx264 -preset medium -crf 23 \
-vf "scale=1920:-1" \
-c:a aac -b:a 128k \
optimized.mp4
# 将所有 MOV 文件转换为 MP4
for i in *.mov; do
ffmpeg -i "$i" -c:v libx264 -crf 23 -c:a aac "${i%.mov}.mp4"
done
# 从图片序列创建
ffmpeg -framerate 30 -pattern_type glob -i '*.jpg' \
-c:v libx264 -pix_fmt yuv420p \
output.mp4
# 单张图片转视频(5 秒)
ffmpeg -loop 1 -i image.jpg -c:v libx264 -t 5 -pix_fmt yuv420p output.mp4
始终先检查输入文件:
ffmpeg -i input.mp4
# 或使用 ffprobe 获取详细信息
ffprobe -v quiet -print_format json -show_format -show_streams input.mp4
尽可能使用 -c copy 避免重新编码:
ffmpeg -i input.mp4 -ss 00:01:00 -t 30 -c copy output.mp4
处理前用 -t 参数预览效果:
# 先测试前 10 秒
ffmpeg -i input.mp4 -t 10 [其他参数] test.mp4
使用合适的 CRF 值:
为 Web 视频添加 -movflags +faststart:
使用本技能时,请始终:
当用户请求音视频处理时:
对于复杂工作流,应分步骤执行并逐一说明。
视频拼接注意事项: 尽可能使用 printf 配合进程替换来避免临时文件(参见拼接部分的方法二)。仅在必要时使用临时 list.txt 文件。
用户:"把这个 MOV 文件转成 MP4" 响应: 使用 H.264 编码的 MOV 转 MP4 命令
用户:"从这个视频做一个 GIF,从第 10 秒开始只要 5 秒" 响应: 使用带时间范围的 GIF 创建命令
用户:"我需要把这个 4K 视频缩小到 1080p 用于网页" 响应: 结合分辨率缩放和 Web 优化预设
用户:"提取音频为 MP3" 响应: 使用 MP3 编码的音频提取命令
文案提取和转录功能,当涉及到转录和文案提取功能的时候,参考下面文档:
应用启动后自动在 http://127.0.0.1:18923 开启本地 HTTP 接口,供 Claude Skill 等外部调用方使用。
GET /v1/audio/models/status
响应示例:
{
"installed": true,
"modelDir": "/Users/xxx/.newmax/models/sensevoice-small",
"modelSize": 239549735
}
{
"installed": false,
"modelDir": "/Users/xxx/.newmax/models/sensevoice-small",
"missingFiles": ["model.int8.onnx", "tokens.txt"]
}
POST /v1/audio/transcriptions
Content-Type: application/json
请求参数:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| audioPath | string | 是 | 音频文件的本地绝对路径 |
| language | string | 否 | 语言代码(如 zh, en, ja),留空自动检测 |
请求示例:
{
"audioPath": "/Users/xxx/Downloads/interview.mp3",
"language": "zh"
}
成功响应(200):
{
"success": true,
"text": "第一段转录文字\n第二段转录文字\n第三段转录文字"
}
失败响应(400/500):
{
"success": false,
"error": "模型未安装,请先下载模型"
}
18923,仅监听 127.0.0.1(本机访问)# 检查模型是否已安装
curl http://127.0.0.1:18923/v1/audio/models/status
# 转录音频文件
curl -X POST http://127.0.0.1:18923/v1/audio/transcriptions \
-H 'Content-Type: application/json' \
-d '{"audioPath": "/path/to/audio.mp3"}'
# 在 skill 脚本中调用转录 API
result=$(curl -s -X POST http://127.0.0.1:18923/v1/audio/transcriptions \
-H 'Content-Type: application/json' \
-d "{\"audioPath\": \"$AUDIO_FILE\"}")
echo "$result" | jq -r '.text'
分析 Skill 使用日志,输出频率排行、满意度趋势、低频 Skill 清单。每周运行一次。 触发词:"分析 Skill 使用情况"、"Skill 周报"、"哪些 Skill 用得多"、"看看 Skill 数据"。 依赖 skill-logger 写入的 skill_usage_log.jsonl 日志文件。
记录一次 Skill 使用情况到日志文件。每次用完某个 Skill 后调用,追加一条使用记录。 触发词:"记录这次使用"、"记录用了 xxx"、"log skill"、"记录一下"(在使用完某个 Skill 之后)。 用于追踪 Skill 使用频率和满意度,为 skill-analyzer 提供数据。
飞书知识库文档管理工具。支持查看知识库目录结构、创建和保存文档、读取多维表格内容。当用户说"保存到飞书"、"写入飞书知识库"、"发布到飞书"、"查看飞书目录"、"读取飞书表格"时触发。适用于将 Obsidian 文档同步到飞书知识库,或读取飞书多维表格数据。
基于 SOC 职业分类