FFmpeg 常用参数详细解释

576 阅读6分钟

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>设置视频比特率。比特率决定视频的大小和质量,单位可以是 kM。比特率越高,视频质量越好,文件越大。-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: 输出文件名。