精选
推荐文章

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