ワンクリックで
ffmpeg-usage
基于Ffmpeg和第三方API的音视频处理,包括,格式转换、视频拼接、合并、尺寸调整、压缩、GIF 制作、音频提取、字幕处理、社交平台优化、文案提取,文案转录等
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
基于Ffmpeg和第三方API的音视频处理,包括,格式转换、视频拼接、合并、尺寸调整、压缩、GIF 制作、音频提取、字幕处理、社交平台优化、文案提取,文案转录等
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
分析 Skill 使用日志,输出频率排行、满意度趋势、低频 Skill 清单。每周运行一次。 触发词:"分析 Skill 使用情况"、"Skill 周报"、"哪些 Skill 用得多"、"看看 Skill 数据"。 依赖 skill-logger 写入的 skill_usage_log.jsonl 日志文件。
记录一次 Skill 使用情况到日志文件。每次用完某个 Skill 后调用,追加一条使用记录。 触发词:"记录这次使用"、"记录用了 xxx"、"log skill"、"记录一下"(在使用完某个 Skill 之后)。 用于追踪 Skill 使用频率和满意度,为 skill-analyzer 提供数据。
飞书知识库文档管理工具。支持查看知识库目录结构、创建和保存文档、读取多维表格内容。当用户说"保存到飞书"、"写入飞书知识库"、"发布到飞书"、"查看飞书目录"、"读取飞书表格"时触发。适用于将 Obsidian 文档同步到飞书知识库,或读取飞书多维表格数据。
Analyzes article structure, identifies positions requiring visual aids, generates illustrations with Type × Style two-dimension approach. Use when user asks to "illustrate article", "add images", "generate images for article", or "为文章配图".
Knowledge comic creator supporting multiple art styles and tones. Creates original educational comics with detailed panel layouts and sequential image generation. Use when user asks to create "知识漫画", "教育漫画", "biography comic", "tutorial comic", or "Logicomix-style comic".
Compresses images to WebP (default) or PNG with automatic tool selection. Use when user asks to "compress image", "optimize image", "convert to webp", or reduce image file size.
| 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'