FFmpeg 参数详细解释
1. 输入/输出设置
| 参数 | 解释 | 示例 |
|---|
-i <input> | 指定输入文件路径,可以是视频、音频或其他媒体文件。FFmpeg 会解析输入文件中的视频流、音频流、字幕等。 | -i input.mp4 表示输入文件是 input.mp4。 |
-f <format> | 强制指定输入或输出的格式。适用于没有文件扩展名或你希望明确指定文件格式时。 | -f mp4 强制将输出文件格式设置为 mp4。 |
-t <duration> | 设置处理的持续时间。用于指定输出文件的时长,单位可以是秒(如 30)或 hh:mm:ss 格式。 | -t 00:01:30 表示处理 1 分钟 30 秒的视频。 |
-ss <time> | 从指定时间点开始处理。时间可以使用 hh:mm:ss 或秒数表示,适用于截取文件的某一部分。 | -ss 00:01:00 表示从视频的第 1 分钟开始处理。 |
-vn | 禁用视频流,仅处理音频流。使用此参数时,FFmpeg 不会读取视频流,只会处理音频内容。 | -vn 用于只处理音频,忽略视频流。 |
-an | 禁用音频流,仅处理视频流。使用此参数时,FFmpeg 不会读取音频流,只会处理视频内容。 | -an 用于只处理视频,忽略音频流。 |
-c:v <codec> | 设置视频编码器。指定使用哪个视频编码器对视频进行压缩编码。常见的视频编码器有 H.264(libx264)、H.265(libx265)、VP9 等。 | -c:v libx264 表示使用 H.264 编码器处理视频。 |
-c:a <codec> | 设置音频编码器。指定使用哪个音频编码器进行音频压缩。常见的音频编码器有 AAC、MP3、Opus 等。 | -c:a aac 表示使用 AAC 编码器处理音频。 |
-map <stream_specifier> | 选择需要处理的流。用于从多流输入文件中选择特定的音频、视频或字幕流。 | -map 0:v:0 表示选择第一个视频流。 |
2. 视频编码与质量设置
| 参数 | 解释 | 示例 |
|---|
-crf <value> | 设置视频编码的质量值。CRF(Constant Rate Factor)值控制编码的质量,值越小质量越高,文件越大,默认值为 23。范围是 0(无损)到 51(最低质量),通常建议在 18 到 28 之间。 | -crf 23 表示使用默认质量设置,-crf 18 表示较高的质量设置。 |
-preset <preset> | 设置编码的预设速度,决定了压缩的效率与编码速度的平衡。ultrafast 编码最快,但文件较大,veryslow 编码最慢,但压缩最小,适合文件大小要求高的场合。 | -preset fast 表示使用快速编码预设,适合需要较短编码时间的场合。 |
-b:v <bitrate> | 设置视频比特率。比特率决定视频的大小和质量,单位可以是 k 或 M。比特率越高,视频质量越好,文件越大。 | -b:v 1500k 表示设置视频的比特率为 1500kbps。 |
-maxrate <bitrate> | 设置编码时视频的最大比特率。如果比特率超过此值,编码器将自动调整质量以保证最大比特率。 | -maxrate 2000k 表示视频的最大比特率为 2000kbps。 |
-bufsize <size> | 设置视频编码缓冲区的大小,通常与 -maxrate 配合使用,用于控制码率的波动。 | -bufsize 4000k 表示缓冲区大小为 4000kbps。 |
-r <fps> | 设置视频的帧率(FPS)。常见的帧率有 24、30、60 等。帧率决定了每秒显示的图像帧数,较高的帧率会带来更流畅的视频,但也会增加文件大小。 | -r 30 表示设置帧率为 30 帧每秒。 |
-s <resolution> | 设置视频分辨率。常见的视频分辨率有 1920x1080(Full HD)、1280x720(HD)等。 | -s 1920x1080 表示将视频分辨率设置为 Full HD。 |
-level <level> | 设置编码器的标准级别,控制视频的复杂度和兼容性。例如,1.0 为最低,4.0 为较高。 | -level 4.0 表示使用较高的编码级别。 |
3. 音频编码与质量设置
| 参数 | 解释 | 示例 |
|---|
-c:a <codec> | 设置音频编码器。常见音频编码器有 AAC、MP3、Opus 等。指定音频编码器进行音频压缩。 | -c:a libmp3lame 表示使用 MP3 编码器。 |
-b:a <bitrate> | 设置音频比特率。较高的比特率会带来更好的音频质量,但文件大小也会增加。音频比特率常用单位是 k(千比特每秒)。 | -b:a 192k 表示音频比特率为 192kbps。 |
-ar <rate> | 设置音频采样率。采样率决定了每秒钟音频的采样数量,通常为 44100 Hz 或 48000 Hz。 | -ar 44100 表示音频的采样率为 44.1kHz。 |
-ac <channels> | 设置音频的通道数。常见的有单声道(1 通道)和立体声(2 通道)。 | -ac 2 表示设置音频为立体声。 |
4. 视频滤镜与效果
| 参数 | 解释 | 示例 |
|---|
-vf <filter> | 设置应用于视频的滤镜。常见的视频滤镜有缩放(scale)、裁剪(crop)、旋转(rotate)等。 | -vf "scale=1280:720" 表示将视频缩放为 1280x720 分辨率。 |
-filter_complex <filtergraph> | 使用复杂的视频滤镜链,适用于多个滤镜处理。它允许多个滤镜操作与流的连接。 | [0:v][1:v]hstack=inputs=2[v] 将两个视频水平拼接。 |
5. 输出设置
| 参数 | 解释 | 示例 |
|---|
-y | 强制覆盖输出文件。如果输出文件已存在,FFmpeg 会直接覆盖。 | -y 表示如果 output.mp4 存在,FFmpeg 会直接覆盖它。 |
-n | 禁止覆盖输出文件。如果输出文件已存在,FFmpeg 会提示错误并终止。 | -n 表示如果 output.mp4 存在,FFmpeg 会报错并停止。 |
6. 日志与调试设置
| 参数 | 解释 | 示例 |
|---|
-loglevel <level> | 设置日志级别。日志级别决定了 FFmpeg | |
输出的信息的详细程度。常见的日志级别包括 quiet, panic, fatal, error, warning, info, verbose, debug, trace 等。 | -loglevel debug 表示输出详细的调试信息。 |
示例命令
示例 1:压缩视频并转换格式
ffmpeg -i input.mp4 -c:v libx264 -preset medium -crf 23 -c:a aac -b:a 128k output.mp4
解释:
-i input.mp4: 输入视频文件 input.mp4。
-c:v libx264: 使用 H.264 编码器对视频进行编码。
-preset medium: 设置编码预设为 medium,即在压缩时间和压缩比之间取得平衡。
-crf 23: 设置视频质量为 23,这是一个较为平衡的质量设置。
-c:a aac: 使用 AAC 编码器对音频进行编码。
-b:a 128k: 设置音频比特率为 128kbps。
output.mp4: 输出文件名。
示例 2:裁剪并转换分辨率
ffmpeg -i input.mp4 -vf "crop=640:480:0:0,scale=1280:720" -c:a aac -b:a 128k output.mp4
解释:
-vf "crop=640:480:0:0,scale=1280:720": 对视频应用两步滤镜,首先裁剪视频为 640x480(从左上角 0:0 开始),然后缩放为 1280x720。
-c:a aac: 使用 AAC 编码器对音频进行编码。
-b:a 128k: 设置音频比特率为 128kbps。
output.mp4: 输出文件名。