FFmpeg 万能命令参数解析
1.FFmpeg 的“语法” - 命令的基本结构
要让 FFmpeg 工作,你必须学会它的“说话方式”。一条最基础的 FFmpeg 命令,就像一个句子,有固定的结构:
ffmpeg [全局参数] [输入文件参数] -i [输入文件] [输出文件参数] [输出文件]
分解一下这个句子:
-
ffmpeg: 句子的主语,表示“我要让 FFmpeg 来干活”。 -
[全局参数]: 状语,修饰整个动作。比如-y(如果输出文件已存在,直接覆盖,别问我)。 -
-i [输入文件]: 宾语,表示“我要处理的对象是这个文件”。-i就像一个介词,引出输入文件。 -
[输入文件参数]: 定语,修-饰宾语。这些参数必须紧跟在-i之前,告诉 FFmpeg 如何“看待”这个输入文件。 -
[输出文件]: 补语,表示“我希望得到的结果是这个新文件”。 -
[输出文件参数]: 定语,修饰补语。这些参数必须紧跟在输出文件之前,告诉 FFmpeg 如何“制作”这个新文件。
黄金法则: 参数的位置非常重要!输入参数管输入,输出参数管输出,全局参数管全部。 放错了位置,命令就可能不生效或报错。
一个最简单的例子:格式转换
# 将 a.mp4 转换成 b.avi
ffmpeg -i a.mp4 b.avi
2.核心参数详解 - 命令的“动词”和“形容词”
现在,我们来学习那些最常用、最重要的参数。
2.1 输入/输出控制
-
-i <infile>: (Input) 指定一个输入文件。你可以有多个-i来指定多个输入文件(比如合并视频)。 -
-y: (Yes) 自动覆盖输出文件,无需确认。在写脚本时必用。 -
-n: (No) 如果输出文件已存在,则立即退出,不进行任何操作。 -
-f <format>: (Format) 强制指定输入或输出文件的容器格式。比如-f mp4。通常 FFmpeg 能自动识别,但有时需要手动指定(比如处理原始数据流时)。 -
-t <duration>: (Time) 指定处理的时长。比如-t 10表示只处理输入文件的前10秒。 -
-ss <time>: (Seek Start) 从指定的时间点开始处理。比如-ss 00:01:30表示跳过前面的1分30秒,从那里开始处理。
实例:剪辑视频
# 从 a.mp4 的第10秒开始,截取5秒钟的内容,保存为 clip.mp4
ffmpeg -ss 10 -i a.mp4 -t 5 clip.mp4
2.2 音视频流的选择与操作
一个媒体文件通常包含视频流、音频流、字幕流等。我们可以对它们进行精细操作。
-
-c <codec>: (Codec) 这是最核心的参数!它用来选择编码器。-
-c:v <codec>: 选择视频编码器。比如-c:v libx264(高质量H.264编码)。 -
-c:a <codec>: 选择音频编码器。比如-c:a aac(AAC编码)。 -
-c copy: 一个神奇的值!表示“复制”,不对流进行重新编码,只是把它从一个容器“搬”到另一个容器。速度极快!
-
-
-vn: (Video No) 禁用视频流,即从视频中提取音频。 -
-an: (Audio No) 禁用音频流,即制作一个无声视频。 -
-sn: (Subtitle No) 禁用字幕流。
实例:
# 1. 快速无损地将 a.mkv 转换成 a.mp4 (如果编码格式兼容)
ffmpeg -i a.mkv -c copy a.mp4
# 2. 从 a.mp4 中提取音频,保存为 audio.mp3
ffmpeg -i a.mp4 -vn -c:a libmp3lame audio.mp3
# 3. 将 a.mp4 的视频,与 b.mp3 的音频,合并成一个新的 new.mp4
ffmpeg -i a.mp4 -i b.mp3 -c:v copy -c:a copy new.mp4
2.3 音频参数 (Audio Options)
这些参数专门用来控制输出音频的“规格”。
-
-ar <rate>: (Audio Rate) 设置音频采样率。单位是 Hz。比如-ar 8000(电话音质),-ar 44100(CD音质)。 -
-ac <channels>: (Audio Channels) 设置音频声道数。比如-ac 1(单声道, Mono),-ac 2(立体声, Stereo)。 -
-ab <bitrate>或-b:a <bitrate>: (Audio Bitrate) 设置音频比特率 (码率),决定了音频的压缩质量和文件大小。比如-b:a 128k(128 kbps)。 -
-acodec <codec>: 是-c:a <codec>的旧别名,作用相同。
实例:为我们项目制作标准化的WAV文件
# 将任何输入的 audio.mp3 文件,转换成 8kHz采样率、单声道 的 output.wav
# pcm_s16le 是WAV文件中标准的16位有符号PCM编码格式
ffmpeg -i audio.mp3 -ar 8000 -ac 1 -c:a pcm_s16le output.wav
2.4 视频参数 (Video Options)
-
-r <rate>: (Rate) 设置视频帧率。比如-r 25(25 fps)。 -
-b:v <bitrate>: (Video Bitrate) 设置视频比特率,决定了视频的清晰度和文件大小。比如-b:v 2M(2 Mbps)。 -
-s <WxH>: (Size) 设置视频分辨率。比如-s 1280x720。 -
-aspect <ratio>: 设置视频宽高比。比如-aspect 16:9。
实例:压缩视频
# 将高分辨率的 a.mp4 压缩成适合网络传输的 720p 视频
ffmpeg -i a.mp4 -s 1280x720 -c:v libx264 -b:v 1.5M -c:a aac -b:a 128k output.mp4
2.5 滤镜 (Filters) - FFmpeg 的“瑞士军刀”
滤镜是 FFmpeg 最强大的功能之一,可以对音视频进行各种复杂处理。
-
-vf <filtergraph>: (Video Filter) 应用视频滤镜。 -
-af <filtergraph>: (Audio Filter) 应用音频滤镜。
实例:
# 1. 给视频添加水印
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:10" output.mp4
# 2. 提高音频音量
ffmpeg -i input.mp3 -af "volume=3dB" output.mp3
# 3. 改变视频播放速度
ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" -af "atempo=2.0" output.mp4
滤镜系统非常庞大,自成体系,需要专门学习。
3.信息查询 - 让你成为 FFmpeg 专家
ffmpeg -help 的输出还告诉我们如何查询 FFmpeg 的能力。
-
-decoders: 查看所有支持的解码器。你可以用它来确认 FFmpeg 能不能播放某种格式的视频。 -
-encoders: 查看所有支持的编码器。你可以用它来查找你想转换的目标格式应该用哪个编码器名称。-
例如,运行
ffmpeg -encoders | findstr pcm(Windows) 或ffmpeg -encoders | grep pcm(Linux),你就能找到各种PCM编码器的名字,比如pcm_s16le。
-
-
-formats: 查看所有支持的容器格式 (muxers 和 demuxers)。
4.总结:
掌握 FFmpeg 的关键在于理解其命令结构和核心参数。
-
先想好你要干什么(比如“把MP3转成8k单声道WAV”)。
-
拆解任务:
-
输入文件是什么?
input.mp3 -
输出文件是什么?
output.wav -
需要改变哪些音频参数?采样率
8000,声道数1。 -
输出的编码格式是什么?查询
-encoders得到pcm_s16le。
-
-
组装命令:
ffmpeg -i input.mp3 -ar 8000 -ac 1 -c:a pcm_s16le output.wav
通过不断地“拆解任务 -> 查找参数 -> 组装命令”这个练习,你会发现 FFmpeg 并没有那么可怕,它只是一个功能极其丰富的工具箱而已。
更多推荐



所有评论(0)