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 并没有那么可怕,它只是一个功能极其丰富的工具箱而已。

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐