TL;DR
ffmpeg 是处理音视频的第一工具。核心结构:ffmpeg [全局选项] [输入选项] -i 输入 [输出选项] 输出。动手前先 ffprobe 看文件信息;-c copy 不重编码最快,但要求容器兼容。
查看信息
| 需求 | 命令 |
|---|
| 查看媒体基本信息 | ffprobe input.mp4 |
| 查看所有流详情 | ffprobe -show_streams input.mp4 |
| 查看可用编码器 / 滤镜 | ffmpeg -encoders / ffmpeg -filters |
转码与格式转换
| 需求 | 命令 |
|---|
| 通用转换(自动选编码器) | ffmpeg -i input.flv output.mp4 |
| H.264 + AAC(兼容性最好) | ffmpeg -i input.mp4 -c:v libx264 -crf 23 -c:a aac output.mp4 |
| 指定分辨率 | ffmpeg -i input.mp4 -vf "scale=1280:720" -c:a copy output.mp4 |
| 提取音频并转 MP3 | ffmpeg -i input.mp4 -vn -c:a libmp3lame -q:a 2 output.mp3 |
| 提取音频(保持原编码) | ffmpeg -i input.mp4 -vn -c:a copy output.aac |
截取片段
| 需求 | 命令 |
|---|
| 快速截取(2:00 起 30 秒,不重编码) | ffmpeg -ss 00:02:00 -i input.mp4 -t 30 -c copy output.mp4 |
| 精确截取(重编码,逐帧对齐) | ffmpeg -i input.mp4 -ss 00:02:00 -t 30 -c:v libx264 -c:a aac output.mp4 |
注意:-ss 放在 -i 前是快速 seek(落到最近关键帧,配合 -c copy 会有秒级误差);要精确到帧就把 -ss 放输出侧并重编码。
合并与拼接
| 需求 | 命令 |
|---|
| 用列表文件合并(参数一致的流) | ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4 |
| list.txt 格式 | 每行 file '1.mp4',用相对路径,UTF-8 |
压缩与常用滤镜
| 需求 | 命令 |
|---|
| CRF 压缩(18–28,越小质量越高) | ffmpeg -i input.mp4 -c:v libx264 -crf 28 -preset faster output.mp4 |
| 转 GIF | ffmpeg -i input.mp4 -vf "fps=15,scale=480:-1" output.gif |
| 抽帧(每秒 1 帧) | ffmpeg -i input.mp4 -r 1 frame_%03d.jpg |
| 2 倍速(视频 PTS 减半 + 音频 atempo) | ffmpeg -i input.mp4 -filter:v "setpts=0.5*PTS" -filter:a "atempo=2.0" output.mp4 |
| 旋转 90° | ffmpeg -i input.mp4 -vf "transpose=1" output.mp4 |
高频排查
- 输出 0 字节或秒退:先
ffprobe 确认输入可读,检查磁盘空间; -c copy 报错:容器与编码不兼容,去掉 -c copy 改为重编码;- 无声 / 无画面:用
-map 0:v、-map 0:a 精确指定流; - 合并花屏:各片段编码参数必须一致(分辨率 / 编码 / 帧率),不一致就先统一转码再合并。
来源
- FFmpeg 官方文档(ffmpeg.org/documentation.html)
- Tech-Service Wiki 与 FFmpeg 实用命令教程(2026-08 核实)
最后更新:2026-08-03