ffmpeg使用详细指南
mini云码 发布日期: 2026-02-03 10:04
ffmpeg是目前很多视频直播、视频裁剪工具默认的底层库,不过目前很少ffmpeg的详细指南教程。今天我汇总下ffmpeg的详细使用教程。
一、命令行结构
一个 FFmpeg 命令行大致分为以下几个部分:
ffmpeg [全局选项] -i <输入文件/流> [针对输入的过滤与参数] [输出选项] <输出文件/流>
ffmpeg:可执行程序,直接调用。
[全局选项]:影响整个 FFmpeg 进程的参数,如日志级别(-loglevel)、线程数(-threads)等。
-i <输入>:指定输入文件、URL 或设备。 如果需要多个输入,可多次使用 -i。
[针对输入的过滤与参数]:可以对输入进行一些局部参数调整,比如输入裁剪、开始偏移、抓取帧率等。
[输出选项]:包括输出文件格式、编解码器、码率、分辨率、帧率等设置。
<输出>:输出到本地文件、管道、网络推流地址等。
举一个例子:
ffmpeg -loglevel error -i abc.mp4 -c:v libx264 -b:v 800k -s 1280x720 out.mp4二、参数详解
-i的意思是指定输入文件
-i <文件路径或 URL>:指定输入源。
本地文件:-i ./v.mp4
网络 URL:-i https://abc.com/v.flv
摄像头/麦克风:如 Windows 下 -i video="Integrated Camera"。
输出文件:直接在命令末尾指定。
指定编码器:
-c:v <视频编码器>:指定视频编码器。常见选项:
libx264:H.264 编码器,高效且兼容性好。
libx265:H.265 编码器,压缩效率高,但兼容性稍差。
mpeg4:旧版 MPEG-4 编码(.mp4 容器)。
copy:流复制(不重新编码)。
-c:a <音频编码器>:指定音频编码器。常见选项:
aac:AAC 编码(内置或外部库)。
libmp3lame:MP3 编码。
copy:流复制。
示例代码如下:
ffmpeg -i input.mkv -c:v libx264 -c:a aac out.mp4
视频质量控制
-s <width>x<height>:设置输出分辨率,如-s 1280x720或者标准符号-s hd720、-s pal等。-r <fps>:设置帧率(帧/秒),如-r 30、-r 24等。
使用示例:
ffmpeg -i abc.mp4 -s 640x360 -r 25 -c:v libx264 -crf 25 out.mp4
-b:v <视频码率>:设置输出视频的目标码率(比特率)。
例如 -b:v 800k 表示 800kbps。
适用于 CBR(恒定码率)场景,但可能导致画面忽大忽小。
-crf <常量质量因子>:常量质量模式,仅适用于某些编码器(如 x264、x265)。
-crf 值范围通常是 0 ~ 51,值越小质量越高,文件越大;常见取值范围在 18 ~ 28。
推荐:H.264 使用 -crf 23 左右;H.265 使用 -crf 28 左右。
使用示例:
ffmpeg -i abc.mp4 -c:v libx264 -crf 23 -c:a copy out.mp4
其他参数
-ss <时间偏移>:跳转到指定时间位置再开始处理。可以放在输入前或输出参数前:
输入前:-ss 00:01:00 -i input.mp4 -c copy clip.mp4(先跳到 1 分钟处再读取)
输出前:-i input.mp4 -ss 00:01:00 -c copy clip.mp4(读取整个文件后再跳到 1 分钟位置输出)
区别:输入前更快,但对关键帧有依赖;输出前更精确,但相对慢。
-t <持续时长>:指定持续时间,例如 -t 00:00:30 表示处理 30 秒。
-vf <视频滤镜链>:一系列视频滤镜,例如缩放、裁剪、水印、水平翻转等。
语法:-vf "scale=1280:720,transpose=1"。
-af <音频滤镜链>:音频滤镜,例如扬声器环绕、音量调整、降噪等。
语法:-af "volume=1.5,atempo=0.9"。
本地视频转换和裁剪相关命令:
格式转换命令:
ffmpeg -i abc.mp4 -c:v libx264 -c:a aac out.avi
裁剪例子:
ffmpeg -ss 00:00:20 -i abc.mp4 -t 00:00:10 -c copy out.mp4
上面的例子是从第20秒开始,取10秒视频。
裁剪并重新编码例子:
ffmpeg -ss 00:00:20 -i abc.mp4 -t 00:00:10 -c:v libx264 -c:a aac out.mp4
合并例子:
先创建一个merge.txt文件,用于记录那些文件需要合并:
file '1.mp4'
file '2.mp4'
file '3.mp4'
合并命令:
ffmpeg -f concat -safe 0 -i merge.txt -c copy out.mp4
