mcpField
F
ffmpeg-toolkit

ffmpeg-toolkit

github.com/simonlee2创意与媒体146 次安装16 周前更新
代码仓库

关于 ffmpeg-toolkit

ffmpeg-toolkit 是面向媒体处理任务的技能,为使用 ffmpeg 的用户提供音视频操作指南,涵盖转码、剪辑、滤镜、提取与压缩,并说明流复制和重新编码的取舍。

主要功能

  1. 01格式转换与无损封装
  2. 02剪辑、缩放、裁剪和旋转
  3. 03提取、替换及调整音频
  4. 04压缩视频并创建 GIF
  5. 05字幕、水印、帧与元数据处理

适用场景

  1. 01将视频转为适合网页播放的 MP4
  2. 02剪辑片段并提取音轨
  3. 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
转为 GIFffmpeg -i in.mp4 -vf "fps=10,scale=320:-1" out.gif
旋转 90°ffmpeg -i in.mp4 -vf "transpose=1" out.mp4

最佳实践

  1. 处理大文件前,务必先用短片段测试
  2. 尽可能使用 -c copy,以提高速度并保留画质
  3. 添加 -movflags faststart,以优化 MP4 的网页播放效果
  4. 使用 CRF 进行基于画质的编码,而不是使用固定比特率
  5. 先用 ffmpeg -i input.mp4 检查输入信息,了解源文件
  6. 需要指定文件大小时,使用两遍编码

常见问题

  • 剪辑后音视频不同步:使用重新编码,而不是 -c copy
  • 开头出现黑帧:添加 -avoid_negative_ts make_zero
  • 容器中的编解码器不兼容:检查容器格式是否支持该编解码器
  • GIF 文件过大:降低 FPS、缩小尺寸或缩短时长

更多资源

详细的命令参考,请参阅 references/ffmpeg-commands.md。

评论

支持 Markdown