关于 ffmpeg-toolkit
ffmpeg-toolkit 是面向媒体处理任务的技能,为使用 ffmpeg 的用户提供音视频操作指南,涵盖转码、剪辑、滤镜、提取与压缩,并说明流复制和重新编码的取舍。
主要功能
- 01格式转换与无损封装
- 02剪辑、缩放、裁剪和旋转
- 03提取、替换及调整音频
- 04压缩视频并创建 GIF
- 05字幕、水印、帧与元数据处理
适用场景
- 01将视频转为适合网页播放的 MP4
- 02剪辑片段并提取音轨
- 03缩放或裁剪视频并生成 GIF
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ simonlee2/ claude-plugins --skill ffmpeg-toolkit安装后在 Claude Code 中输入/ffmpeg-toolkit确认已加载。
附带文件references/ffmpeg-commands.md
详细介绍
FFmpeg 工具包
使用 ffmpeg 处理视频和音频的综合指南。
概述
本技能介绍如何使用 ffmpeg 执行常见的视频和音频操作。ffmpeg 是一款功能强大的多媒体文件处理命令行工具,可用于转换格式、剪辑、调整大小、提取音频、创建 GIF 等。
核心原则
始终使用以下标志
-hide_banner- 隐藏 ffmpeg 版本信息,让输出更简洁-y- 无需询问,直接覆盖输出文件(适用于自动化)
何时使用 -c copy(流复制)
在以下情况下使用 -c copy:
- 保留原始质量(无需重新编码)
- 快速处理(比重新编码快 10-100 倍)
- 使文件大小与源文件相近
限制: 流复制无法更改编解码器、分辨率或应用滤镜。
何时重新编码
在以下情况下需要重新编码:
- 更改分辨率或宽高比
- 应用滤镜(裁剪、旋转、叠加)
- 更改编解码器(例如,从 HEVC 转为 H.264)
- 调整质量/比特率
- 按帧精确剪辑
常见操作
1. 格式转换
基本转换(重新编码):
ffmpeg -hide_banner -i input.mkv output.mp4
无损重封装(无需重新编码):
ffmpeg -hide_banner -i input.mkv -c copy output.mp4
转换为适用于 Web 的 MP4:
ffmpeg -hide_banner -i input.mov -c:v libx264 -crf 23 -c:a aac -movflags faststart output.mp4
2. 剪辑/截取
快速剪辑(无需重新编码,但可能遇到关键帧问题):
ffmpeg -hide_banner -ss 00:01:30 -i input.mp4 -t 00:00:30 -c copy output.mp4
-ss 00:01:30- 从 1 分 30 秒处开始-t 00:00:30- 时长为 30 秒
按帧精确剪辑(需要重新编码):
ffmpeg -hide_banner -i input.mp4 -ss 00:01:30 -t 00:00:30 -c:v libx264 -c:a aac output.mp4
剪辑至文件末尾:
ffmpeg -hide_banner -ss 00:05:00 -i input.mp4 -c copy output.mp4
3. 音频操作
提取音频为 MP3:
ffmpeg -hide_banner -i video.mp4 -vn -c:a libmp3lame -q:a 2 audio.mp3
提取音频为 WAV(无损):
ffmpeg -hide_banner -i video.mp4 -vn audio.wav
移除视频中的音频:
ffmpeg -hide_banner -i input.mp4 -an -c:v copy output.mp4
为视频添加音频:
ffmpeg -hide_banner -i video.mp4 -i audio.mp3 -c:v copy -c:a aac -map 0:v -map 1:a output.mp4
替换视频中的音频:
ffmpeg -hide_banner -i video.mp4 -i new_audio.mp3 -c:v copy -c:a aac -map 0:v -map 1:a -shortest output.mp4
4. 调整大小/缩放
缩放至指定分辨率:
ffmpeg -hide_banner -i input.mp4 -vf "scale=1920:1080" -c:a copy output.mp4
缩放并保持宽高比(宽度为 1280,高度自动调整):
ffmpeg -hide_banner -i input.mp4 -vf "scale=1280:-1" -c:a copy output.mp4
缩放至边界范围内(不超过 1920x1080):
ffmpeg -hide_banner -i input.mp4 -vf "scale='min(1920,iw)':'min(1080,ih)'" -c:a copy output.mp4
5. 压缩
恒定速率因子(CRF)—— 推荐:
ffmpeg -hide_banner -i input.mp4 -c:v libx264 -crf 23 -c:a aac output.mp4
- CRF 18:视觉上无损
- CRF 23:默认值,质量与大小较为均衡
- CRF 28:文件更小,质量较低
目标比特率:
ffmpeg -hide_banner -i input.mp4 -c:v libx264 -b:v 2M -c:a aac -b:a 128k output.mp4
两遍编码(针对目标文件大小获得最佳质量):
ffmpeg -hide_banner -i input.mp4 -c:v libx264 -b:v 2M -pass 1 -f null /dev/null
ffmpeg -hide_banner -i input.mp4 -c:v libx264 -b:v 2M -pass 2 output.mp4
6. 创建 GIF
基本 GIF:
ffmpeg -hide_banner -i input.mp4 -vf "fps=10,scale=480:-1" output.gif
使用调色板创建高质量 GIF:
ffmpeg -hide_banner -i input.mp4 -vf "fps=10,scale=480:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" output.gif
从指定片段创建 GIF:
ffmpeg -hide_banner -ss 00:00:05 -t 3 -i input.mp4 -vf "fps=15,scale=320:-1:flags=lanczos" output.gif
7. 合并视频
拼接视频(编解码器相同):
首先创建文件列表(videos.txt):
file 'video1.mp4'
file 'video2.mp4'
file 'video3.mp4'
然后进行拼接:
ffmpeg -hide_banner -f concat -safe 0 -i videos.txt -c copy output.mp4
重新编码后拼接(编解码器/分辨率不同):
ffmpeg -hide_banner -f concat -safe 0 -i videos.txt -c:v libx264 -c:a aac output.mp4
8. 旋转
顺时针旋转 90°:
ffmpeg -hide_banner -i input.mp4 -vf "transpose=1" output.mp4
转置值:
0- 逆时针旋转 90° + 垂直翻转1- 顺时针旋转 90°2- 逆时针旋转 90°3- 顺时针旋转 90° + 垂直翻转
旋转 180°:
ffmpeg -hide_banner -i input.mp4 -vf "transpose=1,transpose=1" output.mp4
9. 裁剪
裁剪至指定尺寸:
ffmpeg -hide_banner -i input.mp4 -vf "crop=640:480:100:50" output.mp4
格式:crop=width:height:x:y
裁剪为居中正方形:
ffmpeg -hide_banner -i input.mp4 -vf "crop=min(iw\,ih):min(iw\,ih)" output.mp4
10. 调整速度
将视频加速至 2 倍:
ffmpeg -hide_banner -i input.mp4 -vf "setpts=0.5*PTS" -af "atempo=2.0" output.mp4
将视频减速至 0.5 倍:
ffmpeg -hide_banner -i input.mp4 -vf "setpts=2*PTS" -af "atempo=0.5" output.mp4
静音加速视频:
ffmpeg -hide_banner -i input.mp4 -vf "setpts=0.5*PTS" -an output.mp4
高级操作
添加字幕
将字幕烧录到视频中:
ffmpeg -hide_banner -i input.mp4 -vf "subtitles=subs.srt" output.mp4
烧录 ASS 字幕(带样式):
ffmpeg -hide_banner -i input.mp4 -vf "ass=subs.ass" output.mp4
添加水印/叠加层
叠加图像(右上角):
ffmpeg -hide_banner -i input.mp4 -i logo.png -filter_complex "overlay=W-w-10:10" output.mp4
提取帧
提取所有帧:
ffmpeg -hide_banner -i input.mp4 frame_%04d.png
每秒提取 1 帧:
ffmpeg -hide_banner -i input.mp4 -vf "fps=1" frame_%04d.png
提取指定时间戳处的单帧:
ffmpeg -hide_banner -ss 00:00:10 -i input.mp4 -frames:v 1 thumbnail.png
根据图像创建视频
将图像转换为视频:
ffmpeg -hide_banner -framerate 30 -i frame_%04d.png -c:v libx264 -pix_fmt yuv420p output.mp4
更改元数据
设置标题:
ffmpeg -hide_banner -i input.mp4 -c copy -metadata title="My Video" output.mp4
移除所有元数据:
ffmpeg -hide_banner -i input.mp4 -c copy -map_metadata -1 output.mp4
硬件加速(NVIDIA)
使用 NVENC 编码:
ffmpeg -hide_banner -i input.mp4 -c:v h264_nvenc -preset fast -b:v 5M output.mp4
使用 GPU 解码和编码:
ffmpeg -hide_banner -hwaccel cuda -i input.mp4 -c:v h264_nvenc output.mp4
快速参考
| 任务 | 命令 |
|---|---|
| 获取信息 | ffmpeg -i input.mp4 |
| 转换格式 | ffmpeg -i in.mkv out.mp4 |
| 重新封装(快速) | ffmpeg -i in.mkv -c copy out.mp4 |
| 剪辑 | ffmpeg -ss 00:01:00 -t 30 -i in.mp4 -c copy out.mp4 |
| 提取音频 | ffmpeg -i in.mp4 -vn out.mp3 |
| 移除音频 | ffmpeg -i in.mp4 -an -c:v copy out.mp4 |
| 缩放 | ffmpeg -i in.mp4 -vf "scale=1280:-1" out.mp4 |
| 压缩 | ffmpeg -i in.mp4 -crf 28 out.mp4 |
| 转为 GIF | ffmpeg -i in.mp4 -vf "fps=10,scale=320:-1" out.gif |
| 旋转 90° | ffmpeg -i in.mp4 -vf "transpose=1" out.mp4 |
最佳实践
- 处理大文件前,务必先用短片段测试
- 尽可能使用
-c copy,以提高速度并保留画质 - 添加
-movflags faststart,以优化 MP4 的网页播放效果 - 使用 CRF 进行基于画质的编码,而不是使用固定比特率
- 先用
ffmpeg -i input.mp4检查输入信息,了解源文件 - 需要指定文件大小时,使用两遍编码
常见问题
- 剪辑后音视频不同步:使用重新编码,而不是
-c copy - 开头出现黑帧:添加
-avoid_negative_ts make_zero - 容器中的编解码器不兼容:检查容器格式是否支持该编解码器
- GIF 文件过大:降低 FPS、缩小尺寸或缩短时长
更多资源
详细的命令参考,请参阅 references/ffmpeg-commands.md。