FFmpeg 基础功能样例
FFmpeg 是强大的音视频处理工具,支持视频截取、格式转换、压缩、合并等操作。
一、视频截取
1. 按时间截取视频片段
# 截取从第10秒开始,持续20秒的视频
ffmpeg -i input.mp4 -ss 00:00:10 -t 00:00:20 -c copy output.mp4
# 截取从第10秒到第30秒的视频
ffmpeg -i input.mp4 -ss 00:00:10 -to 00:00:30 -c copy output.mp4
参数说明:
-ss:开始时间点(支持格式:10、00:00:10)-t:持续时间-to:结束时间点-c copy:直接复制流,不重新编码(速度快,精度可能略有偏差)
2. 精确截取(重新编码)
# 精确截取,需要重新编码
ffmpeg -i input.mp4 -ss 00:01:30 -t 00:00:15 -c:v libx264 -c:a aac output.mp4
二、格式转码
1. 常见格式转换
# MP4 转 MKV
ffmpeg -i input.mp4 output.mkv
# MP4 转 AVI
ffmpeg -i input.mp4 -c:v libxvid -c:a mp3 output.avi
# MOV 转 MP4
ffmpeg -i input.mov -c:v libx264 -c:a aac output.mp4
# WebM 转 MP4
ffmpeg -i input.webm -c:v libx264 -c:a aac output.mp4
2. 指定编码器转码
# 使用 H.264 编码
ffmpeg -i input.avi -c:v libx264 -preset medium -crf 23 -c:a aac output.mp4
# 使用 H.265 (HEVC) 编码
ffmpeg -i input.mp4 -c:v libx265 -preset medium -crf 28 -c:a aac output.mp4
# 使用 VP9 编码 (WebM)
ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:a 128k output.webm
编码参数说明:
-preset:编码速度与压缩率平衡(ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow)-crf:质量系数(0-51,值越小质量越高,默认23,H.265默认28)
三、视频压缩
1. 降低码率压缩
# 限制视频码率为 1Mbps
ffmpeg -i input.mp4 -b:v 1M -c:a copy output.mp4
# 限制音频码率为 128Kbps
ffmpeg -i input.mp4 -c:v copy -b:a 128k output.mp4
2. 调整分辨率压缩
# 缩放到 1280x720
ffmpeg -i input.mp4 -vf scale=1280:720 -c:a copy output.mp4
# 缩放宽度为 1280,高度自动计算保持比例
ffmpeg -i input.mp4 -vf scale=1280:-1 -c:a copy output.mp4
# 缩放到原分辨率的 50%
ffmpeg -i input.mp4 -vf "scale=iw*0.5:ih*0.5" -c:a copy output.mp4
3. 使用 CRF 压缩
# CRF 值越大压缩率越高,质量越低
ffmpeg -i input.mp4 -c:v libx264 -crf 28 -c:a copy output.mp4
四、视频合并
1. 使用 concat 协议(相同编码格式)
# 创建文件列表 list.txt
# file 'video1.mp4'
# file 'video2.mp4'
# file 'video3.mp4'
ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4
2. 使用 concat 滤镜(不同编码格式)
ffmpeg -i video1.mp4 -i video2.mp4 -filter_complex "[0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1[outv][outa]" -map "[outv]" -map "[outa]" output.mp4
五、提取音视频
1. 提取音频
# 提取音频为 MP3
ffmpeg -i input.mp4 -vn -c:a mp3 -b:a 192k audio.mp3
# 提取音频为 AAC
ffmpeg -i input.mp4 -vn -c:a aac -b:a 128k audio.aac
# 提取音频为 WAV(无损)
ffmpeg -i input.mp4 -vn -c:a pcm_s16le audio.wav
2. 提取视频(静音)
ffmpeg -i input.mp4 -an -c:v copy output.mp4
3. 替换视频音频
ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 output.mp4
六、视频截图
1. 截取单帧
# 截取第5秒的画面
ffmpeg -i input.mp4 -ss 00:00:05 -vframes 1 screenshot.jpg
# 截取第10秒的 PNG 图片
ffmpeg -i input.mp4 -ss 10 -vframes 1 -q:v 2 screenshot.png
2. 定时截图
# 每秒截取一张图片
ffmpeg -i input.mp4 -vf fps=1 output_%04d.jpg
# 每5秒截取一张图片
ffmpeg -i input.mp4 -vf fps=1/5 output_%04d.jpg
# 每分钟截取一张图片
ffmpeg -i input.mp4 -vf fps=1/60 output_%04d.jpg
七、GIF 制作
1. 视频转 GIF
# 基础转换
ffmpeg -i input.mp4 output.gif
# 指定时间段和帧率
ffmpeg -ss 00:00:10 -t 5 -i input.mp4 -vf "fps=10,scale=480:-1" output.gif
# 高质量 GIF(使用调色板)
ffmpeg -i input.mp4 -vf "fps=15,scale=480:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" output.gif
2. 图片序列转 GIF
ffmpeg -framerate 10 -i image_%04d.jpg -vf "scale=640:-1" output.gif
八、添加水印
1. 图片水印
# 左上角
ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay=10:10" output.mp4
# 右下角
ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay=W-w-10:H-h-10" output.mp4
# 居中
ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay=(W-w)/2:(H-h)/2" output.mp4
2. 文字水印
ffmpeg -i input.mp4 -vf "drawtext=text='My Watermark':fontsize=24:fontcolor=white:x=10:y=10" output.mp4
# 带阴影的文字水印
ffmpeg -i input.mp4 -vf "drawtext=text='My Watermark':fontsize=24:fontcolor=white:shadowcolor=black:shadowx=2:shadowy=2:x=W-tw-10:y=H-th-10" output.mp4
九、调整视频速度
1. 视频加速/减速
# 2倍速播放
ffmpeg -i input.mp4 -filter:v "setpts=0.5*PTS" output.mp4
# 0.5倍速播放(慢放)
ffmpeg -i input.mp4 -filter:v "setpts=2*PTS" output.mp4
2. 音视频同步调速
# 2倍速(音视频同步)
ffmpeg -i input.mp4 -filter:v "setpts=0.5*PTS" -filter:a "atempo=2.0" output.mp4
# 0.5倍速(音视频同步)
ffmpeg -i input.mp4 -filter:v "setpts=2*PTS" -filter:a "atempo=0.5" output.mp4
十、常用参数速查
| 参数 | 说明 |
|---|---|
-i | 输入文件 |
-c:v | 视频编码器 |
-c:a | 音频编码器 |
-c copy | 直接复制流 |
-b:v | 视频码率 |
-b:a | 音频码率 |
-r | 帧率 |
-s | 分辨率 |
-vf | 视频滤镜 |
-af | 音频滤镜 |
-ss | 开始时间 |
-t | 持续时间 |
-to | 结束时间 |
-y | 覆盖输出文件 |
-vn | 禁用视频 |
-an | 禁用音频 |
-preset | 编码预设 |
-crf | 恒定质量因子 |
十一、实用组合示例
# 压缩视频并转换格式(适合网页播放)
ffmpeg -i input.avi -c:v libx264 -preset slow -crf 22 -c:a aac -b:a 128k -vf scale=1280:-1 output.mp4
# 截取片段并添加水印
ffmpeg -i input.mp4 -ss 00:01:00 -t 30 -i logo.png -filter_complex "overlay=W-w-10:H-h-10" -c:v libx264 -c:a copy output.mp4
# 批量转换当前目录下所有 MKV 为 MP4
for %f in (*.mkv) do ffmpeg -i "%f" -c:v libx264 -c:a aac "%~nf.mp4"
参考资源: