第一个转码命令:从 MP4 到 AVI
好,我们直接动手。打开你的终端,找一个 MP4 文件,输入下面这行命令:
ffmpeg -i input.mp4 output.avi
按下回车。几秒钟后,你手里就多了一个 AVI 文件。这就是 FFmpeg 最基础的转码操作。
我第一次用 FFmpeg 时,看到这么短的命令就能完成转码,说实话有点不敢相信。后来在项目中用它批量处理素材,才发现这行命令背后藏着不少门道。
拆解命令:-i 参数到底在干什么?
-i 是 FFmpeg 里最常用的参数,全称是 input。它的作用就一个:告诉 FFmpeg「我要处理哪个文件」。
你想想看,FFmpeg 本身是个命令行工具,它不知道你要操作什么。没有 -i,它就像一台没有原料的机器,空转而已。
核心规则:所有输入文件都必须用 -i 指定。一个命令里可以有多个 -i,但至少得有一个。
我习惯把 -i 理解为「喂料口」。你把原料(input.mp4)塞进去,FFmpeg 就开始干活了。
输出文件:FFmpeg 的「自动判断」机制
命令末尾的 output.avi 是输出文件名。这里有个关键点:FFmpeg 会根据文件扩展名自动选择编码器。
你写 .avi,它就自动用 AVI 容器 + 对应的视频/音频编码器。你写 .mp4,它就换一套。这就是为什么你不需要手动指定编码器——FFmpeg 帮你猜了。
| 输出扩展名 | FFmpeg 自动选择的容器 | 常见默认编码器 |
|---|---|---|
| .avi | AVI | mpeg4 (视频) / mp3 (音频) |
| .mp4 | MP4 | h264 (视频) / aac (音频) |
| .mkv | Matroska | h264 (视频) / aac (音频) |
| .mov | QuickTime | mpeg4 (视频) / aac (音频) |
小技巧:如果你不确定 FFmpeg 会用什么编码器,可以加 -c copy 只复制流不重新编码。但那是后面章节的内容,现在先记住这个自动机制就好。
转码时到底发生了什么?
表面上看,你只是改了个文件名。实际上 FFmpeg 做了三件事:
- 解封装:读取 input.mp4 的容器格式,分离出视频流和音频流
- 解码 → 编码:把原始视频数据解码成未压缩的帧,再用新编码器重新压缩
- 封装:把重新编码后的数据写入 output.avi 容器
说白了,就是「拆开 → 重做 → 装回去」。这个过程会损失画质,因为重新编码是有损的。
我曾经在项目里用这个命令批量转码几百个文件,结果发现画质下降明显。后来才意识到,默认参数并不适合所有场景。嗯,这里要注意:简单的命令意味着简单的控制。
避坑指南:你可能遇到的问题
- 文件找不到:路径写错了。建议把文件拖到终端里自动生成路径。
- 编码器不支持:有些 AVI 播放器打不开 FFmpeg 默认生成的 AVI。可以试试加
-c:v libxvid指定编码器。 - 转码太慢:默认用的是软件编码,CPU 跑满。想快可以加
-preset ultrafast,但文件会变大。
警告:不要用这个命令处理重要素材的原始文件。先复制一份再转码。我曾经手滑覆盖了原始素材,后悔莫及。
本章核心流程图
下面这张图展示了从输入到输出的完整流程:
总结一下
这行命令虽然简单,但它是你掌握 FFmpeg 的起点。记住三点:
-i是输入文件的「身份证」,必须带- 输出文件扩展名决定了 FFmpeg 的「自动选择」
- 转码 = 解封装 + 重编码 + 重新封装,有画质损失