FFmpeg 常用命令

FFmpeg 是一个强大的音视频处理工具。本文档提供一些常见使用场景的简单命令参考。

查看媒体文件信息

使用 ffprobe 获取流信息:

ffprobe -v error -show_format -show_streams input.mp4

以 JSON 格式输出信息:

ffprobe -v error -show_format -show_streams -print_format json input.mp4

视频剪辑

参数顺序 定位方式 速度 精确度 说明
-ss-i 输入定位 关键帧级精度 快速裁剪,适用于不需要精确帧的场景
-ss-i 输出定位 逐帧级精度 精确到帧的裁剪或处理,速度较慢

示例命令

  1. 输入定位(快速裁剪)

    ffmpeg -ss 00:00:30 -i input.mp4 -t 10 -c copy output.mp4

    从视频大约 30 秒处开始,快速截取 10 秒内容(可能存在几秒的偏差)。

  2. 输出定位(精确裁剪)

    ffmpeg -i input.mp4 -ss 00:00:30 -t 10 -c:v libx264 -c:a copy output.mp4

    精确截取从 30 秒处开始的 10 秒内容。

视频合并

合并视频与音频(不重新编码,速度快):

ffmpeg -i video.mp4 -i audio.mp3 -c copy -map 0:v:0 -map 1:a:0 output.mp4

合并视频与音频(重新编码,可调整编码参数):

ffmpeg -i video.mp4 -i audio.mp3 -c:v libx264 -c:a aac output.mp4

合并多个视频文件(需要先创建一个文本文件列表 list.txt):

# list.txt 示例
# file 'video1.mp4'
# file 'video2.mp4'
# file 'video3.mp4'

ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4

视频格式转换

更换容器格式(不改变编码,速度快):

ffmpeg -i input.mp4 -c copy output.mkv

更改视频编码:

ffmpeg -i input.mp4 -c:v libx264 -c:a copy output.mp4

视频压缩

CRF(恒定质量编码)

使用 CRF(Constant Rate Factor)方式压缩视频,数值范围 0-51(值越大压缩率越高,画质越低,18-28 是推荐范围)。该模式通过动态分配比特率实现质量优先的压缩:

ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium -c:a copy output.mp4

CBR(恒定比特率)

适用于需要固定带宽的场景(如直播推流),通过强制限定比特率保持数据流稳定。需配合 bufsize 参数控制缓冲区大小:

ffmpeg -i input.mp4 -c:v libx264 -b:v 4000k -maxrate 4000k -minrate 4000k -bufsize 2000k -c:a copy output.mp4

视频帧率调整

简单更改帧率

ffmpeg -i input.mp4 -r 30 output.mp4

这会将视频帧率设置为 30fps,通过丢弃或重复帧来实现。注意:可能导致视频播放不流畅。

保持质量的帧率转换

ffmpeg -i input.mp4 -r 30 -c:v libx264 -preset slow -crf 18 -c:a copy output.mp4

这种方式可以获得较好的质量,使用 libx264 编码器,质量参数 crf 值越小质量越高(18-23 通常是比较好的选择)。

提取音频

从视频中提取音频:

ffmpeg -i input.mp4 -vn -c:a copy output.mp3

如需不同格式:

ffmpeg -i input.mp4 -vn -c:a aac output.aac

使用 NVIDIA GPU 加速(NVENC):

ffmpeg -i input.mp4 -c:v hevc_nvenc -preset p7 -rc vbr -cq 23 -maxrate 6M -bufsize 12M -rc-lookahead 20 -spatial_aq 1 -temporal_aq 1 -aq-strength 15 -c:a copy output.mp4