关于 ffmpeg-usage
ffmpeg-usage 是面向需要处理视频和音频的用户的技能,提供基于 ffmpeg 的常见命令与工作流。内容覆盖格式转换、剪辑、字幕、压缩及面向社交平台的输出设置。
主要功能
- 01视频与音频格式转换
- 02缩放、裁剪与旋转视频
- 03创建 GIF 与提取缩略图
- 04提取、混合及转换音频
- 05字幕处理与文件压缩
适用场景
- 01将 MOV 转换为 MP4
- 02从视频片段制作 GIF
- 03提取视频音轨为 MP3
- 04为 TikTok 或 Instagram 调整视频
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ ychoi-kr/ claude-ffmpeg-skill --skill ffmpeg-usage安装后在 Claude Code 中输入/ffmpeg-usage确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
LICENSEREADME.mdvalidation_report.jsoninstall.shvalidate.pyexamples/conversion.sh详细介绍
ffmpeg 用法
概述
此 Skill 使用 ffmpeg 提供全面的视频和音频处理功能。它包含经过实战检验的命令和工作流,可用于常见的多媒体任务、特定平台优化,以及质量和文件大小管理的最佳实践。
版本: 1.0.0 要求: ffmpeg >= 4.0,ffprobe(可选,但建议安装)
当用户提及视频或音频处理任务、格式转换、社交媒体优化或多媒体编辑时,Claude 应使用此 Skill。
适用场景
用户提出以下请求时使用此 Skill:
- 视频格式转换(MP4、WebM、MOV 等)
- 调整分辨率或宽高比
- 从视频创建 GIF
- 提取音频或转换音频格式
- 视频编辑(剪辑、合并、调整速度、旋转)
- 字幕处理(烧录、软字幕、提取)
- 视频压缩或优化
- 针对特定平台调整格式(YouTube、Instagram、TikTok、Twitter)
- 提取缩略图或视频帧
- 批量处理视频/音频文件
前提条件
使用此 skill 前,请确保已安装 ffmpeg:
# macOS
brew install ffmpeg
# Ubuntu/Debian
sudo apt-get install ffmpeg
# Windows (with Chocolatey)
choco install ffmpeg
验证安装:
ffmpeg -version
支持的操作
1. 格式转换
使用优化的设置在不同视频格式之间转换。
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
2. 调整分辨率
调整视频大小,同时保持宽高比。
缩放至 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
3. 创建 GIF
从视频创建高质量 GIF,同时优化文件大小。
基本 GIF(10 fps):
ffmpeg -i input.mp4 -vf "fps=10,scale=480:-1:flags=lanczos" output.gif
使用调色板创建高质量 GIF:
# Generate palette
ffmpeg -i input.mp4 -vf "fps=10,scale=480:-1:flags=lanczos,palettegen" palette.png
# Create GIF using palette
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
4. 音频操作
提取、转换和处理音频流。
提取音频为 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
5. 视频编辑
剪辑、拼接和修改视频。
剪辑视频:
# From 10s to 30s
ffmpeg -i input.mp4 -ss 00:00:10 -to 00:00:30 -c copy output.mp4
# Duration-based (10s starting from 5s)
ffmpeg -i input.mp4 -ss 00:00:05 -t 10 -c copy output.mp4
拼接视频:
根据格式和兼容性选择方法:
方法 1:Concat 协议(首选——无需临时文件)
# For MPEG formats: .ts, .mpg, .mpeg, .mp3, .aac, etc.
# Direct concatenation without creating list file
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
# Works with: TS, MPEG-1, MPEG-2, MP3, AAC
# Does NOT work with: MP4, MOV, MKV (use Method 2 instead)
方法 2:Concat 解复用器(适用于 MP4、MOV、MKV)
# Use process substitution to avoid temporary files
ffmpeg -f concat -safe 0 -i <(printf "file '%s'\n" video1.mp4 video2.mp4 video3.mp4) -c copy output.mp4
# If shell doesn't support process substitution:
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
方法 3:Concat 滤镜(可接受重新编码时使用)
# Use when videos have different codecs/resolutions
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 协议(方法 1).mp4、.mov、.mkv→ 使用 concat 解复用器(方法 2)- 编码格式/分辨率不同 → 使用 concat 滤镜(方法 3)
加快/减慢速度:
# 2x speed
ffmpeg -i input.mp4 -filter:v "setpts=0.5*PTS" -an output.mp4
# 0.5x speed (slow motion)
ffmpeg -i input.mp4 -filter:v "setpts=2.0*PTS" output.mp4
旋转视频:
# 90 degrees clockwise
ffmpeg -i input.mp4 -vf "transpose=1" output.mp4
# 180 degrees
ffmpeg -i input.mp4 -vf "transpose=2,transpose=2" output.mp4
6. 字幕处理
添加、提取或烧录字幕。
将字幕烧录到视频中:
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
7. 提取缩略图
将视频帧提取为图像。
提取指定时间点的单帧:
ffmpeg -i input.mp4 -ss 00:00:05 -vframes 1 thumbnail.jpg
提取多个缩略图:
# One frame every 10 seconds
ffmpeg -i input.mp4 -vf fps=1/10 thumb%04d.jpg
# First 10 frames
ffmpeg -i input.mp4 -vframes 10 frame%04d.png
8. 压缩与优化
在保持质量的同时减小文件大小。
压缩视频(均衡):
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
特定平台预设
YouTube 优化
ffmpeg -i input.mp4 \
-c:v libx264 -preset slow -crf 18 \
-c:a aac -b:a 192k \
-pix_fmt yuv420p \
-movflags +faststart \
youtube.mp4
Instagram 快拍(9:16)
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
Twitter/X(16:9,最长 2:20)
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
TikTok(9:16)
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
常见用例
优化屏幕录制
# Reduce file size of screen recordings
ffmpeg -i screen_recording.mov \
-c:v libx264 -preset medium -crf 23 \
-vf "scale=1920:-1" \
-c:a aac -b:a 128k \
optimized.mp4
批量转换
# Convert all MOV files to MP4
for i in *.mov; do
ffmpeg -i "$i" -c:v libx264 -crf 23 -c:a aac "${i%.mov}.mp4"
done
根据图像创建视频
# From image sequence
ffmpeg -framerate 30 -pattern_type glob -i '*.jpg' \
-c:v libx264 -pix_fmt yuv420p \
output.mp4
# Single image to video (5 seconds)
ffmpeg -loop 1 -i image.jpg -c:v libx264 -t 5 -pix_fmt yuv420p output.mp4
最佳实践
-
始终先检查输入文件:
ffmpeg -i input.mp4 # Or use ffprobe for detailed info 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标志进行预览:# Test on first 10 seconds ffmpeg -i input.mp4 -t 10 [other options] test.mp4 -
使用适当的 CRF 值:
- 18 = 视觉上无损
- 23 = 高质量(默认值)
- 28 = 可接受的质量,文件更小
- 范围:0(无损)到 51(最差质量)
-
为网络视频添加
-movflags +faststart:- 支持渐进式播放
- 将元数据移到文件开头
错误处理
使用此技能时,务必:
- 确认输入文件存在且可读
- 处理前检查 ffmpeg 是否已安装
- 确认输出路径可写
- 使用适当的消息妥善处理错误
- 处理大型文件时显示进度
Claude 使用指南
当用户请求处理视频/音频时:
- 识别请求中的任务类型
- 从此技能中选择合适的命令
- 确认前提条件(已安装 ffmpeg,输入文件存在)
- 执行前说明命令的作用
- 执行命令并妥善处理错误
- 确认输出已成功创建
- 如适用,建议优化方案
对于复杂工作流,请分解为多个步骤并逐一说明。
对于视频拼接: 尽可能使用 printf 和进程替换,以避免创建临时文件(参见拼接部分中的方法 2)。仅在必要时才使用临时的 list.txt。
示例
用户:“将这个 MOV 文件转换为 MP4” **回复:**使用 MOV 转 MP4 命令,并采用 H.264 编解码器
用户:“从这个视频制作 GIF,但只截取从第 10 秒开始的 5 秒” **回复:**使用 GIF 创建命令,并指定时间范围
用户:“我需要将这个 4K 视频缩小到 1080p,以便用于网络” **回复:**结合分辨率缩放与网络优化预设
用户:“将音频提取为 MP3” **回复:**使用音频提取命令,并采用 MP3 编解码器
参考资料
- FFmpeg 官方文档:https://ffmpeg.org/documentation.html
- FFmpeg Wiki:https://trac.ffmpeg.org/wiki
- 支持的编解码器:https://ffmpeg.org/ffmpeg-codecs.html
- 滤镜文档:https://ffmpeg.org/ffmpeg-filters.html